我有一个PHP脚本,如下所示:
$command = "/home/user/dir/script.sh 'create' '" . $paramA . "' '" . $paramB . "'";
echo $command . PHP_EOL;
echo shell_exec($command);
(脚本是实际的,只有模糊的脚本和变量名。为了确保我不会生气,我甚至测试了混淆版本) .sh文件的内容如下:
if [[ $1 = "create" ]]
then
Mode="Create"
elif [[ $1 = "delete" ]]
then
Mode="Delete"
else
echo "--- Invalid mode: $1; must be create or delete"
exit 1
fi
现在,PHP脚本的输出如下:
/home/user/dir/script.sh 'create' 'somevalue' 'someothervalue'
--- Invalid mode: create; must be create or delete
所以...我正在将命令行参数传递给此脚本,并且脚本认为该参数不正确。但正如您所看到的,脚本会在失败时将参数值转储到stdout;我们可以看到价值是正确的。
我也通过将生成的命令行调用复制到我自己的终端来测试此脚本,这将执行。 有人知道吗?
(从调用的响应中可以看出,它与权限或任何内容无关,因为脚本 正在执行....)
答案 0 :(得分:0)
解决方案是Apache没有以与用户相同的shell执行脚本。
Bash,而不是sh或csh。
使用shebang / hash-bang修复。