phpからexec()でコマンド実行した場合のエラー処理まとめ。
出力を処理しない
if ( !exec('command',$array)) {
//command失敗を検知して処理したい
echo "NG";
}
これだと、command実行時に標準エラー出力を吐いた場合、そのまま出力されてしまいます。
<commandのエラー出力>
NG
標準エラー出力も標準出力へ吐き出す(2>&1)
標準エラー出力も変数へ突っこんで処理したいなら、
if ( !exec('command 2>&1',$array)) {
//command失敗を検知して処理したい
echo "NG";
}
var_dump($array);
array(1) {
[0]=>
string(77) "<commandのエラー出力>"
}
エラーメッセージが変数へ代入されます。
exec()の実行自体はエラーにならず、php側で拾えなくなるので注意。
標準エラー出力を捨てる(2>/dev/null)
今度はcommandのエラー出力を捨ててみます。
if ( !exec('command 2>/dev/null',$array)) {
//command失敗を検知して処理したい
echo "NG";
}
実行結果
NG
command実行時のエラー出力は出力されず、
なおかつexec()の実行エラーはきちんと拾えたようです。
しかしなぜ2>&1だとexec()の実行エラーは拾えないのに、2>/dev/nullだと拾えるのか。。。
ちょっともやもやします。