No.445


【PHP】コマンドラインから実行されているか判定する

CLIから実行されているかどうか簡単に判定したい

 WEBからのアクセスとコマンドライン(CLI)からのバッチ処理が一緒に動くシステムは多い。

 そんなとき、共有している処理でアクセス元によって処理を変えたい場合がある。
 例えばコマンドラインから実行されているときはデバック情報を出力する、などだ。

 判定の仕方はいろいろあって、よく見かけるのは環境変数のHTTP_USER_AGENTでブラウザ名が取得できるか、というものが有名かもしれない。

 ところが、便利関数(もしくは定数)があって一発で判定できてしまう。以外と知られてないので共有がてらメモしておこう。


関数php_sapi_name()

 php_sapi_name() を実行すると、PHPが利用しているインターフェースの種類を返してくれる。

PHPマニュアル php_sapi_name

 インターフェースの種類はたくさんあるのだが、コマンドライン(CLI)から実行されているときは必ずcliだ。(PHP8.3時点)

 だから下記のような判定式で簡単に判別できる。

if (php_sapi_name() == 'cli') {
  // コマンドラインの場合の処理
} else {
 // その他の場合の処理
}

定数:PHP_SAPI

 PHPの定数PHP_SAPIにも同様の値が入っている。
 どっちを使うかは好みで。

if (PHP_SAPI == 'cli') {
  // コマンドラインの場合の処理
  以下略