如何将参数从php传递到Linux中的脚本?

时间:2019-01-28 22:42:02

标签: php linux bash

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

代码:

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

$asd=$asd ." ". $raid;

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

$ name有一个字符串,$ raid包含复选框数组。

如果我使用vardump或在$ asd上死亡,则会显示以下内容。

string(15) "md2 sdc sdd "

我的脚本有这个:

mkdir $1
mkdir $2
mkdir $3

仅创建md2文件夹,通过调用:sdd创建sdc文件夹?并且没有创建最后一个文件夹sdd。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您可以用其他方式来做,请查看我的示例! 尝试

$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

答案 1 :(得分:0)

!使用函数escapeshellarg可以防止Shell注入攻击:

$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);
}

PS:exec()手册页:http://php.net/manual/en/function.exec.php

答案 2 :(得分:-1)

请尝试

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