LoginSignup
11
11

More than 5 years have passed since last update.

exec()の実行成否をtry catchで判断するのは…やめようね!

Posted at
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()の戻り値はコマンド結果の最終行を返します。
戻り値をそのまま評価対象にするのは実行するコマンドをだいぶ選びますので、用法を守って正しくお使い下さい。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11