そこで、Web サーバーで PHP から bash コマンドを実行したいと考えています。を使用してこれを行うことができますshell_exec
。ただし、実行したいコマンドの 1 つはcurl
. .wav
ファイルを別のサーバーに送信し、その応答を記録するために使用します。ただし、PHP から呼び出すとcurl
機能しません。
エラーを次の小さな例に減らしました。次を含む名前のスクリプトがphp_script.php
あります。
<?php
$ver=shell_exec("curl -F file=@uploads/2013-7-24-17-31-43-29097-flash.wav http://otherserver");
echo $ver
興味深いことに、この php スクリプトをコマンド ラインから を使用して実行すると、次のようなphp php_script.php
結果が得られます。
Status: 500 Internal Server Error
Content-type: text/html
ただし、curl -F file=@uploads/2013-7-24-17-31-43-29097-flash.wav http://otherserver
直接実行すると、期待していた応答が得られます。
verdict = authentic
shell_exec
(編集:) を含まない引数内に bash コードを配置するcurl
と、bash コマンドが正常に実行されることに言及する必要があります。たとえば、行を次のように変更すると、$ver = shell_exec("echo hello > world");
「hello」という単語がファイル「world」に入れられます (ファイルが存在し、書き込み可能である場合)。(編集終了)
PHP から呼び出されたときに、何かが curl の実行をブロックしています。これは PHP がセーフ モードで実行されている可能性があると考えていましたが、php.ini にその兆候は見つかりませんでした。(これをテストして 100% 確認する方法はありますか?) curl をブロックしているものは何ですか? さらに重要なことに、このブロックをバイパスまたは無効にするにはどうすればよいですか?
(もちろん、PHP には curl ライブラリがあることはわかっています。ただし、デバッグ目的で、コマンド ラインからも実行できるコマンドを使用することを好みます。)
乾杯、アラン