我试图通过传递三个参数来从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。
有什么建议吗?
答案 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}'");