====== PHP からコマンド実行 ======
https://www.php.net/manual/ja/function.exec.php
こんな風に書くのがいいのではないか?
$outs = null;
$ret = null;
if (exec($cmd, $outs, $ret) === false || $ret !== 0) {
$err = implode(' ', $outs);
throw new Exception("Could not execute ${cmd} or failed to execute: ${err}");
}
exec() が false を返すパターンは今のところ見つかっていない。。。
実行後の戻り値は $ret で見ることになり、通常成功時は 0 が帰るはず(呼び出されるスクリプトをそう作成しておくべき)なので、帰らなかった場合はログ出力などのエラー処理を行う。ちなみに command not found は以下の様になった。
$ notExistCommand
bash: 127: command not found
なお、負荷テストなどのため、非同期でシェルを実行しまくるには、$cmd 内のコマンドを & で終わらせて、戻り値を待たない書き方にする。
その際 exec() の中でコマンドと & の結合を行うと、なぜか非同期にはならないので、必ず exec() の外で $cmd を生成しておくこと。