CLIとCGIの違い
PHPは様々な環境で動作させることができます。最も一般的な環境は CGI で、これは PHP が HTTP リクエストを処理する際に実行されます。しかし、ターミナルから PHP スクリプトを実行することも可能で、その場合はいわゆる CLI (Command-line interface) タスクとなります。
CLIとCGIの最も重要な違い
- CGI SAPI
とは異なり、CLI` はデフォルトで出力にヘッダを書きません。 - シェル環境では無意味なため、
CLI SAPIでオーバーライドされるphp.iniディレクティブがいくつか存在します。 html_errors: CLI のデフォルトはFALSEです。- implicit_flush
: CLI のデフォルト値はTRUE` です。 - max_execution_time
: CLI のデフォルト値は0` (無制限)である。 register_argc_argv: CLI のデフォルト値はTRUEです。- スクリプトはコマンドライン引数を取ることができますargc
変数は、アプリケーションに渡された引数の数を表します。また、$argv` フィールドには、実際の引数の配列が入ります。 - シェル環境用の新しい定数として、
STDIN、STDOUT、STDERRの3つが定義されています。すべて対応するシェルデバイスのファイルハンドラです。例えば、STDINはfopen('php://stdin', 'r')に対するファイルハンドラである。つまり、$strLine = trim(fgets(STDIN));のようにSTDINから行を読み取ることができるのです。STDINはPHP CLI` を使ってすでに定義されています。 - PHP CLI は、カレントディレクトリを実行中のスクリプトのディレクトリに変更することはありません。スクリプトのカレントディレクトリは、PHP CLIコマンドを実行したディレクトリになります。
- PHP CLI には、多くの有用なオプションが用意されています。phpの設定、phpスクリプト、異なるモードでの実行に関する貴重な情報を取得することができます。
- PHP 5 では、CLI および CGI のファイル名にいくつかの変更がありました。PHP 5 では、CGI 版は
php-cgi.exe(旧php.exe) に改名され、CLI 版はメインディレクトリに置かれるようになりました (旧cli/php.exe). - PHP 5 では、新しいモードとして
php-win.exeが導入されました。これはCLIバージョンと同じですが、php-winでは何も表示されないので、コンソールを提供しません (画面に "dos box" が表示されません)。この動作はPHP GTKに似ています。