devops:php:exec

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 を生成しておくこと。

  • devops/php/exec.txt
  • 最終更新: 2022/03/04 09:59
  • by admin