Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中,如何将参数从php传递到脚本?_Php_Linux_Bash - Fatal编程技术网

在linux中,如何将参数从php传递到脚本?

在linux中,如何将参数从php传递到脚本?,php,linux,bash,Php,Linux,Bash,我试图通过传递三个参数从php运行scrip,问题是我只能很好地传递第一个参数 代码: 我的脚本包含以下内容: mkdir $1 mkdir $2 mkdir $3 仅创建md2文件夹,通过调用:sdd?创建sdc文件夹?并且未创建最后一个文件夹sdd 有什么建议吗?请尝试 $railvl1 = exec("sh /var/www/proyecto/borrarraid1.sh '{$asd}'"); 你可以用另一种方式,看看我的例子! 试试这个 $name = ''; $checkbox

我试图通过传递三个参数从php运行scrip,问题是我只能很好地传递第一个参数

代码:

我的脚本包含以下内容:

mkdir $1
mkdir $2
mkdir $3
仅创建md2文件夹,通过调用:sdd?创建sdc文件夹?并且未创建最后一个文件夹sdd

有什么建议吗?

请尝试

 $railvl1 = exec("sh /var/www/proyecto/borrarraid1.sh '{$asd}'");

你可以用另一种方式,看看我的例子! 试试这个

$name = '';
$checkbox = ['FolderA', 'FolderB', 'FolderC'];

$checkboxes = implode(' ', $checkbox);
$name .= " $checkboxes" ;
$output = shell_exec("/var/www/proyecto/borrarraid1.sh $name");
Sh文件

set folder1 [lindex $argv 0]
set folder2 [lindex $argv 1]
set folder3 [lindex $argv 2]

mkdir folder1
mkdir folder2
mkdir folder3
!!使用该功能可防止外壳注入攻击:

$asd = escapeshellarg($name);
for($i=0; $i<count($checkbox); $i++){
    $raid = $checkbox[$i];
    $asd = $asd ." ". escapeshellarg($raid);
}

$last_line = exec("sh /var/www/proyecto/borrarraid1.sh ". $asd, $output, $retval);

$output_delimiter = '<br/>'
if ($retval !== 0) {
    echo "Error while executing command", $output_delimiter;
    echo implode($output, $output_delimiter);
} else {
    echo "The command was executed successfully", $output_delimiter;
    echo implode($output, $output_delimiter);
}
$asd=escapeshellarg($name);

对于($i=0;$iQuite),您的脚本可能会做得更多,但PHP可以在文件系统本身上创建目录,而且这里可能有太多的移动部分。您应该将问题简化为一段我们可以运行的代码,以演示您的问题。(现在还不清楚您的问题是在PHP还是在Bash脚本中。)顺便说一句,“sdc文件夹是通过调用:sdd创建的?”对我来说没有任何意义。什么是
:sdd?
?您好,谢谢您的帮助。我按照您告诉我的做了,但效果不太好。我创建了3个文件夹,但它们被称为md2(ok),sdd?和sdc?为什么?最后?如果
$asd
包含引用怎么办?@andoni使用
escapeshellarg
,正如我所示:。这个答案是错误的,而且问题非常严重,因为它可能允许黑客访问您的后端。我正在尝试按照您所说的做,但它不起作用。它是什么,或者它是做什么的$output,$retval??您在问题中使用了
exec()
。我只是使用了您所拥有的。既然如此,我必须假设您知道如何使用
exec()
工作,因此没有对其进行解释。
$output
$retval
通过引用传递,让您有机会获得命令的完整输出及其返回值。在任何情况下,如果您想了解其工作原理,请阅读
exec()
的手册:。
set folder1 [lindex $argv 0]
set folder2 [lindex $argv 1]
set folder3 [lindex $argv 2]

mkdir folder1
mkdir folder2
mkdir folder3
$asd = escapeshellarg($name);
for($i=0; $i<count($checkbox); $i++){
    $raid = $checkbox[$i];
    $asd = $asd ." ". escapeshellarg($raid);
}

$last_line = exec("sh /var/www/proyecto/borrarraid1.sh ". $asd, $output, $retval);

$output_delimiter = '<br/>'
if ($retval !== 0) {
    echo "Error while executing command", $output_delimiter;
    echo implode($output, $output_delimiter);
} else {
    echo "The command was executed successfully", $output_delimiter;
    echo implode($output, $output_delimiter);
}