[PHP]コマンドラインからの実行を判定する

Read More

PHPにはファイルを実行する方法が2種類ある。

1つはWebブラウザからの実行。
もう1つはコマンドラインからの実行。


どの方法でファイルが実行されたかをプログラム内で判定し、それによって処理を変えたい時がある。



--
ここからちょっと前置き↓



通常はWebブラウザを通してファイルにアクセスすることが多い。
が、コマンドラインから直にファイルを叩く場合もある。
cronからバッチファイルを叩いてもやはりコマンドからの実行扱いとなる。


自分の場合、コマンドから叩く予定のPHPファイルであっても、一旦Webブラウザからアクセスできる場所に置いて開発を進めることが多い。

いちいちコマンドでしか実行できない場所にファイルを置くとテストがめんどくさいからだ。


Webからファイルにアクセスして外部出力のデータをHTMLで見やすく加工した方が色々と捗る。

しかし同じファイルをコマンドラインで叩いた場合はこのHTML混じりの出力がときに邪魔になったりする。


で、出力にHTMLを含める場合とそうでない場合で切り分けたいと考えたりする。




前置き終わり↑



--
どのように実行されたものか判定するには以下のように行う。


■Webブラウザ・コマンドラインからの実行を判定する
if(php_sapi_name()=='cli')
{
  echo 'true';  // コマンドライン
}
else
{
  echo 'false';  // それ以外
}





--
先述した方法を使うとコマンドラインかどうかの判定はできるようになる。

ただそれとは別に、コマンドラインは.htaccessが効かなかったり利用できるスーパーグローバル変数がWebのそれと違ったりする。

そういう部分を何も考えずに組んでしまうと色々問題が発生したりするので注意が必要。



-- 2017/08/19 追記
コマンドラインに出力可能かどうか調べることで実行環境を想定することもできる。
<?php
if(defined('STDIN'))
{
  echo 'コマンドラインに出力可能';
}
else
{
  echo '出力できない';
}
?>




is_cli()、is_browser()、is_cli_print()などと関数化してもわかりよいかもしれない。