4

そこで、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 ライブラリがあることはわかっています。ただし、デバッグ目的で、コマンド ラインからも実行できるコマンドを使用することを好みます。)

乾杯、アラン

4

1 に答える 1

0

その理由は、コマンドを直接実行すると管理者権限があり、ルートとして実行しているため、コマンドが実行されます。ただし、PHP を介してコマンドを実行すると、ユーザーとして実行されます。デフォルトのユーザーには、shell_exec コマンドを実行する権限がありません。

CPanel/Apache 設定ファイルから shell_exec の設定を変更する必要があります。ただし、shell_exec アクセス権をユーザーに提供することはお勧めできません。ハッカーがサーバーを攻撃するのに役立つため、適切な注意が必要です。

PHP で提供されている curl ライブラリを使用する方が適切です。

于 2013-07-24T17:01:57.850 に答える