27

shell_exec()初めて使用する途中です。ffmpeg シェル スクリプトを使用して、サーバー上のいくつかのビデオ ファイルを変換しようとしています。

ブラウザで以下のコードを実行すると、NULL が返されます。

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4"));

ただし、端末で同等のコードを実行すると、次のようになります。

> ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4

エラーで終わる有用な情報を大量に返します"At least one output file must be specified"

この情報が PHP スクリプトに返されず、エコーアウトできるのはなぜですか?

4

1 に答える 1

56

エラーデータは、ターゲットプログラムのSTDERRストリームから出力されます。shell_exec()コマンドに追加することで、通常の返される文字列を介してエラーデータにアクセスできます。コマンドは、現在表示されているストリームに2>&1リダイレクトさSTDERRれます。STDOUT

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4 2>&1"));

また、proc_open()にアクセスできるようにするものとSTDIN、3つの個別のストリームを確認することもできます。これにより、ターゲットプログラムをよりきめ細かく制御でき、リダイレクトを含め、ターゲットプログラムへの入力と出力を正確に処理できます。必要に応じて、それらすべてを直接ログファイルに保存します。ただし、これははるかに複雑なメカニズムであり、多くの落とし穴やつまずきの危険があることに注意してください。STDOUTSTDERR

標準ストリームの詳細については、こちらをご覧ください

于 2013-02-26T10:26:07.483 に答える