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

use*_*387 19 php shell shell-exec

我使用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');
Run Code Online (Sandbox Code Playgroud)

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

当我将呼叫更改为:

码:

$page = shell_exec('/tmp/my_script.php {$my_url} {$my_refer}');
Run Code Online (Sandbox Code Playgroud)

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

当我将呼叫更改为:

码:

$page = shell_exec('/tmp/my_script.php "http://www.somesite.com/" "http://www.somesite.com/"');
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*hen 22

更改

$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.'"');

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

例:

$my_url=escapeshellarg($my_url);
$my_refer=escapeshellarg($my_refer);
Run Code Online (Sandbox Code Playgroud)

  • 还要确保你用escapseshellarg进行整理 (3认同)
  • PHP 只会解析用双引号 (`"`) 包裹的 `$` 变量。 (2认同)

Cod*_*ver 15

需要使用配额发送参数,因此您应该使用它:

$page = shell_exec("/tmp/my_script.php '".$my_url."' '".$my_refer."'");
Run Code Online (Sandbox Code Playgroud)


Ora*_*ill 10

变量不会在单个带引号的字符串内插入.此外,您应确保正确转义您的参数.

 $page = shell_exec('/tmp/myscript.php '.escapeshellarg($my_url).' '.escapeshellarg($my_refer));
Run Code Online (Sandbox Code Playgroud)