try{
exec('Something_command',$output);
} catch (Exception $e) {
echo 'コマンドの実行に失敗しました。';
}
と言った処理があったのですが、この書き方でcatch
には入りません。
コマンドが失敗する余地がある場合や動的にコマンドを生成して実行する場合(動的にコマンドを生成するのはバグ臭プンプンですがそこはスルー)には以下のようにしてコマンドの失敗検知を行なう様にする。
exec('Something_command',$output, $return_var);
if($return_var !== 0){
echo 'コマンドの実行に失敗しました。';
}
実行結果
コマンドの実行に失敗しました。
PHPのリファレンスを見ると
引数return_varが、引数 output と共に存在する場合、実行したコマンドの ステータスがこの変数に書かれます。
とあり、実行後の$return_var
を見ることでコマンドが成功したか否かを判断することが出来ます。
別パターン
2>/dev/null
で標準エラー出力を捨てるパターン
if(!exec('Something_command 2>/dev/null',$output)){
echo 'コマンドの実行に失敗しました。';
}
実行結果
コマンドの実行に失敗しました。
exec()
の戻り値はコマンド結果の最終行を返します。
戻り値をそのまま評価対象にするのは実行するコマンドをだいぶ選びますので、用法を守って正しくお使い下さい。