使用带有php的shell_exec解析参数很奇怪

时间:2018-01-09 20:43:54

标签: php bash sh

我有一个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;我们可以看到价值是正确的。

通过将生成的命令行调用复制到我自己的终端来测试此脚本,这将执行。 有人知道吗?

(从调用的响应中可以看出,它与权限或任何内容无关,因为脚本 正在执行....)

1 个答案:

答案 0 :(得分:0)

解决方案是Apache没有以与用户相同的shell执行脚本。

Bash,而不是sh或csh。

使用shebang / hash-bang修复。