web-dev-qa-db-ja.com

PHP-シェルエラーを画面にエコー出力する方法

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スクリプトに返されないので、エコー出力できますか?

24
Mazatec

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

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

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

標準ストリームの詳細については、 ここ を参照してください。

45
DaveRandom