他の SAPI との違い

CLISAPI を他の SAPI と比べた時の 大きな違いを以下に示します。

  • CGISAPI と異なり、ヘッダが出力されません。

    CGISAPI は HTTP ヘッダの出力を抑制する機能を 提供していますが、等価な機能は CLISAPI ではサポートされていません。

    デフォルトでは CLI は静寂モードで起動されます。古い CGI スクリプトと互換性を 保って使えるように -q および --no-header スイッチが残されています。

    作業ディレクトリをスクリプトの場所に変更しません (-C および --no-chdir スイッチは 互換性のために残されています)。

    エラーメッセージはプレーンテキスト (HTML フォーマットはしない) で表示されます。

  • 以下に示すいくつかの php.ini ディレクティブは、CLISAPI により上書きされます。これは、シェル環境では意味がないためです。

    上書きされる php.ini のディレクティブ
    ディレクティブCLISAPI のデフォルト値コメント
    html_errorsfalse エラーメッセージに含まれる HTML タグは シェル上では意味がなく、可読性をかなり低下させるため、この ディレクティブはデフォルトで false となっています。
    implicit_flushtrueprint, echo および 関連するものによる全ての出力は、直ちに出力され、バッファに キャッシュされないことが望ましいと言えます。この場合でも、 標準出力を保留または操作したい場合には、 出力バッファリング を使用することが可能です。
    max_execution_time0 (無制限) シェル環境では、PHP を際限なく使用できる ようにするために、最大実行時間の制限は無しに設定されています。 Web 用アプリケーションは数秒単位で実行されるよう作られて いますが、シェルアプリケーションの実行時間は、これよりかなり 長くなる傾向があります。
    register_argc_argvtrue

    この設定が true なので、CLISAPI では常に argc (アプリケーションに渡した引数の数) および argv (実際の引数の配列) を使うことができます。

    CLISAPI を使用するときに PHP の $argc 変数と $argv 変数が登録され、適切な値がセットされます。 あるいは $_SERVER$_SERVER['argv'] を使うこともできます。

    output_bufferingfalse

    php.inifalse とハードコードされていても、 出力バッファリング 関数は使用可能です。

    max_input_timefalse

    PHP CLI は GET、POST あるいはファイルのアップロードをサポートしません。

    注意:

    これらのディレクティブは、設定ファイル php.ini またはカスタム 設定ファイル(指定した場合のみ)で他の値に初期化できません。 この制限は、これらのデフォルト値が全ての設定ファイルをパースした後に 適用されるためです。しかし、これらの値は実行時に変更することが 可能です (上記のディレクティブの全てについてこれが当てはまるわけでは ありません。例えば、register_argc_argv)。

    注意:

    コマンドラインのスクリプトでは ignore_user_abort を設定することを推奨します。詳細は ignore_user_abort() を参照ください。

  • シェル環境での利便性を考慮して、 I/O ストリーム 用に多くの定数が定義されています。

  • CLISAPI は、カレントディレクトリをスクリプトのディレクトリに変更 しません!

    例1 CGISAPI との違いを示す例

    <?php
    // test.php という名前のシンプルなテストアプリケーション
    echo getcwd(), "\n";
    ?>

    CGI 版を使った場合、出力は以下のようになります。

     $ pwd /tmp $ php -q another_directory/test.php /tmp/another_directory 

    これは、PHP がカレントディレクトリを スクリプトのディレクトリに変更することを明らかに示しています。

    CLISAPI を使った場合はこのようになります。

     $ pwd /tmp $ php -f another_directory/test.php /tmp 

    これにより、PHP でシェルツールを書く際の柔軟性をより大きくすることができます。

    注意:

    CGISAPI は、この CLISAPI の動作をコマンドライン実行時のスイッチ -C によりサポートしています。

To Top