CLI SAPI を他の SAPI と比べた時の 大きな違いを以下に示します。
CGI SAPI と異なり、ヘッダが出力されません。
CGI SAPI は HTTP ヘッダの出力を抑制する機能を 提供していますが、等価な機能は CLI SAPI ではサポートされていません。
デフォルトでは CLI は静寂モードで起動されます。古い CGI スクリプトと互換性を 保って使えるように -q および --no-header スイッチが残されています。
作業ディレクトリをスクリプトの場所に変更しません (-C および --no-chdir スイッチは 互換性のために残されています)。
エラーメッセージはプレーンテキスト (HTML フォーマットはしない) で表示されます。
以下に示すいくつかの php.ini ディレクティブは、CLI SAPI により上書きされます。これは、シェル環境では意味がないためです。
FALSE
TRUE
この設定が TRUE なので、CLI SAPI では常に argc (アプリケーションに渡した引数の数) および argv (実際の引数の配列) を使うことができます。
CLI SAPI を使用するときに PHP の $argc 変数と $argv 変数が登録され、適切な値がセットされます。 あるいは $_SERVER や $_SERVER['argv'] を使うこともできます。
php.ini で FALSE とハードコードされていても、 出力バッファリング 関数は使用可能です。
PHP CLI は GET、POST あるいはファイルのアップロードをサポートしません。
注意: これらのディレクティブは、設定ファイル php.ini またはカスタム 設定ファイル(指定した場合のみ)で他の値に初期化できません。 この制限は、これらのデフォルト値が全ての設定ファイルをパースした後に 適用されるためです。しかし、これらの値は実行時に変更することが 可能です (上記のディレクティブの全てについてこれが当てはまるわけでは ありません。例えば、register_argc_argv)。
注意:
これらのディレクティブは、設定ファイル php.ini またはカスタム 設定ファイル(指定した場合のみ)で他の値に初期化できません。 この制限は、これらのデフォルト値が全ての設定ファイルをパースした後に 適用されるためです。しかし、これらの値は実行時に変更することが 可能です (上記のディレクティブの全てについてこれが当てはまるわけでは ありません。例えば、register_argc_argv)。
注意: コマンドラインのスクリプトでは ignore_user_abort を設定することを推奨します。詳細は ignore_user_abort() を参照ください。
コマンドラインのスクリプトでは ignore_user_abort を設定することを推奨します。詳細は ignore_user_abort() を参照ください。
シェル環境での利便性を考慮して、 I/O ストリーム 用に多くの定数が定義されています。
CLI SAPI は、カレントディレクトリをスクリプトのディレクトリに変更 しません!
例1 CGI SAPI との違いを示す例
<?php// test.php という名前のシンプルなテストアプリケーションecho getcwd(), "\n";?>
CGI 版を使った場合、出力は以下のようになります。
$ pwd /tmp $ php -q another_directory/test.php /tmp/another_directory
これは、PHP がカレントディレクトリを スクリプトのディレクトリに変更することを明らかに示しています。
CLI SAPI を使った場合はこのようになります。
$ pwd /tmp $ php -f another_directory/test.php /tmp
これにより、PHP でシェルツールを書く際の柔軟性をより大きくすることができます。
注意: CGI SAPI は、この CLI SAPI の動作をコマンドライン実行時のスイッチ -C によりサポートしています。
CGI SAPI は、この CLI SAPI の動作をコマンドライン実行時のスイッチ -C によりサポートしています。