PHP の拡張モジュールは、そのライフサイクルにおいていくつかの段階をたどります。 これらの段階を通じて、開発者はさまざまな初期化や後処理そして情報の取得などを行います。 Zend API には、拡張モジュールの 5 つの段階のそれぞれに対するフックがあります。 これらは PHP の関数からコールされるのとは別のものです。
Zend エンジンは、クライアントからのひとつあるいは複数の "リクエスト" を処理します。昔ながらの CGI の実装では、 このリクエストごとにひとつのプロセスを実行します。 しかし、それ以外の多くの実装 (有名どころでは Apache モジュールなど) では、複数のリクエストを単一の PHP プロセスに関連付けることができます。 したがって、PHP の拡張モジュールはその生存期間中に多くのリクエストを処理することもありえます。
zend_module
構造体で定義された "モジュール初期化"
関数をロード時に実行します。
zend_module
構造体で定義された "リクエスト初期化"
関数を実行します。
zend_module
構造体で定義された "リクエスト後処理"
関数を実行します。
zend_module
構造体で定義された "モジュール後処理"
関数を実行します。
これら 4 つのポイントでは、多くの作業が行われます。 この表では、一般的な初期化と後処理がどこで行われるのかをまとめます。
モジュールの初期化/後処理 | リクエストの初期化/後処理 |
---|---|
モジュールグローバル変数の割り当て/解除と初期化 | リクエスト固有の変数の割り当て/解除と初期化 |
クラスエントリの登録/解除 | |
INI エントリの登録/解除 | |
定数の登録 |
グローバルの初期化や実際に使われるコールバックとは別に、 モジュールのライフサイクルにかかわるものがもうひとつあります。 phpinfo() のコールです。 ユーザーがこれをコールした際の出力には、 コールした時点で PHP インタプリタに読み込まれている各拡張モジュールからの出力が含まれます。 結果が HTML であるかそれ以外であるかにはかかわりません。
各フォーマットに依存しない出力を得るために、ヘッダファイル "ext/standard/info.h" に関数の配列が含まれており、 これらを用いて標準化された表示要素を生成します。 特に、以下のいくつかの関数で、おなじみの表を作成します。
これら 4 つの関数を使用すると、拡張モジュールのほぼすべての機能の情報を出力することができます。 これは、counter 拡張モジュールの情報出力用コールバックです。
例1 counter の PHP_MINFO 関数
/* {{{ PHP_MINFO(counter) */ PHP_MINFO_FUNCTION(counter) { char buf[10]; php_info_print_table_start(); php_info_print_table_row(2, "counter support", "enabled"); snprintf(buf, sizeof(buf), "%ld", COUNTER_G(basic_counter_value)); php_info_print_table_row(2, "Basic counter value", buf); php_info_print_table_end(); } /* }}} */