2013年3月18日月曜日

php5でのexecとstderr

stderrをstdoutにリダイレクトする事で、stderrが用意されないIIS6で落ちるのを防ぐことができます。

exec("pdftk.exe 2>&1", $output, $retval);

問題点:stderrとstdoutの区別が付かなくなってしまいます。エラー表示(stderr)なのか、情報(stdout)なのか。
 
proc_openを使うと、個別に対応可能ですが、手間です。
 
成功・失敗だけを見たいのであれば、$retvalを見れば十分な場合も多いです。
 
良識的なコマンドラインツールは、次のような$retvalを返すように考えられ作られています。
0 = 成功
0 以外 = 失敗 (正だけではなく、負の場合も有るので注意が必要。アクセス違反を意味する 0xC0000005 つまり -1073741819 等。)
 
そういう場合ではstderrをstdoutに結合する方法も有効と思います。

0 件のコメント:

コメントを投稿