21

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 を送信する特別な方法はありますか?

4

6 に答える 6

25

変化する

$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);
于 2013-06-05T05:28:23.020 に答える
2

変化する

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

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

次に、コードでファイル名のスペースを許容します。

于 2013-06-05T05:31:36.767 に答える
2

私はこれに苦労したので、コードスニペットを共有したいと思いました.

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host $command");

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host {$command}");

ブラケットを追加すると、{}それが修正されました。

また、確認することescapeshellargも必要です。

$host=escapeshellarg($host);
$command=escapeshellarg($command);

スクリプトも必要であることを除いて:

set host [lindex $argv 0]
set command [lindex $argv 1]
于 2015-07-30T11:34:05.757 に答える