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スクリプトに返されないので、エコー出力できますか?
エラーデータは、ターゲットプログラムのSTDERR
ストリームから出力されます。 _2>&1
_をコマンドに追加すると、Shell_exec()
から通常返される文字列を介してエラーデータにアクセスできます。これにより、現在表示されているストリームであるSTDERR
をSTDOUT
にリダイレクトします。
_var_dump(Shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4 2>&1"));
_
proc_open()
を確認することもできます。これにより、STDIN
、STDOUT
、STDERR
に3つの個別のストリームとしてアクセスできるようになります。これにより、ターゲットプログラムと、プログラムへの入力と出力を正確に処理する方法。必要に応じて、プログラムをログファイルに直接リダイレクトすることも含みます。ただし、これは多くの落とし穴やつまずきの危険を伴うはるかに複雑なメカニズムであることに注意してください。
標準ストリームの詳細については、 ここ を参照してください。