将多个 PHP 变量传递给 shell_exec()?

2022-08-30 19:35:44

我使用shell_exec方法从PHP调用 test.sh。

$my_url="http://www.somesite.com/";
$my_refer="http://www.somesite.com/";
$page = shell_exec('/tmp/my_script.php $my_url $my_refer');

但是,命令行脚本说它只收到了 1 个参数:/tmp/my_script.php

当我将调用更改为:

法典:

$page = shell_exec('/tmp/my_script.php {$my_url} {$my_refer}');

它说它收到了3个参数,但argv[1]和argv[2]是空的。

当我将调用更改为:

法典:

$page = shell_exec('/tmp/my_script.php "http://www.somesite.com/" "http://www.somesite.com/"');

脚本最终按预期接收所有 3 个参数。

您是否总是必须使用脚本仅发送带引号的文本,并且不允许发送像$var这样的变量?或者有没有一些特殊的方式来发送$var?


答案 1

改变

$page = shell_exec('/tmp/my_script.php $my_url $my_refer');

$page = shell_exec("/tmp/my_script.php $my_url $my_refer");

$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"');

还要确保在两个值上都使用 escshellarg

例:

$my_url=escapeshellarg($my_url);
$my_refer=escapeshellarg($my_refer);

答案 2

需要发送带有配额的参数,因此您应该像这样使用它:

$page = shell_exec("/tmp/my_script.php '".$my_url."' '".$my_refer."'");

推荐