PHP の最も一般的な 2 つの動作モードは、WEB モードと CLI モードです。
どのモードでも、PHP は同じように動作し、SAPI として実行されます。
1. ターミナルに php コマンドを入力すると、CLI が使用されます。
リクエストを完了するために PHP をサポートする Web サーバーのようなものです。リクエストが完了すると、制御がターミナルに返されます。
2. Apache をホストとして使用している場合、リクエストが来たとき、PHP はリクエストの完了をサポートします。
main/php.hには以下のマクロが定義されています
#define PHP_MINIT_FUNCTION ZEND_MODULE_STARTUP_D
#define PHP_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D
#define PHP_RINIT_FUNCTION ZEND_MODULE_ACTIVATE_D
#define PHP_RSHUTDOWN_FUNCTION ZEND_MODULE_DEACTIVATE_D
#define PHP_MINFO_FUNCTION ZEND_MODULE_INFO_D
#define PHP_GINIT_FUNCTION ZEND_GINIT_FUNCTION
#define PHP_GSHUTDOWN_FUNCTION ZEND_GSHUTDOWN_FUNCTION
対応する関数は
PHP_MINIT_FUNCTION モジュールの初期化時に実行
PHP_MSHUTDOWN_FUNCTION モジュールがアンインストールされるときに実行されます
PHP_RINIT_FUNCTION REQUEST リクエストが初期化されるときに実行されます
PHP_RSHUTDOWN_FUNCTION REQUEST リクエストが終了すると実行されます
PHP_MINFO_FUNCTION このモジュールの情報をphpinfoに設定します
PHP_GINIT_FUNCTION グローバル変数を初期化するとき
PHP_GSHUTDOWN_FUNCTION グローバル変数を解放するとき
カスタム拡張機能のケース スニペットを参照してください:
www.2cto.com
int ミニタイム
PHP_MINIT_FUNCTION(テスト)
{
minit_time = 時間(NULL);
成功を返します}
PHP_MSHUTDOWN_FUNCTION(テスト)
{
ファイル *fp=fopen("mshutdown.txt","a+");
fprintf(fp,"%ldn",time(NULL));//各リクエストの最後にデータがこのファイルに追加されるかどうかを確認してみましょう
fclose(fp);
成功を返します}
int rinit_time
PHP_RINIT_FUNCTION(テスト)
{
rinit_time = 時間(NULL);
成功を返します
}
PHP_RSHUTDOWN_FUNCTION(テスト)
{
ファイル *fp=fopen("rshutdown.txt","a+");
fprintf(fp,"%ldn",time(NULL));//各リクエストの最後にデータがこのファイルに追加されるかどうかを確認してみましょうfclose(fp);
成功を返します
}
PHP_MINFO_FUNCTION(テスト)
{
php_info_print_table_start();// php_write を呼び出して HTML タグを出力します
php_info_print_table_header(2, "モジュール情報", "有効")
php_info_print_table_end();// php_write を呼び出して HTML タグを出力します
/* php.ini にエントリがある場合はコメントを削除します
DISPLAY_INI_ENTRIES();
*/
}
//PHPで呼び出せる関数test()を定義し、ページ上にminit_timeとrinit_timeの値を出力させます
PHP_FUNCTION(テスト)
{
php_printf("%d
",time_of_minit);
戻る
}
Apache を例に挙げます
マルチスレッドモードで作業している場合:
このモードでは、サーバー プロセスは 1 つだけ実行されますが、多くのスレッドが同時に実行されるため、モジュールの初期化とモジュールのシャットダウンは 1 回だけ実行するだけで済み、一部のグローバル変数は初期化するだけで済みます。スレッドの固有の特性により、リクエスト間で一部のデータを簡単に共有することができます。
マルチスレッドの動作方法は以下の通りです
:
マルチプロセスモードで作業している場合:
minit_time と rinit_time の値はリクエストごとに変化します。
ページ要求が終了するたびに、データが time_rshutdown.txt および time_mshutdown.txt に書き込まれます。
以下は、マルチプロセス作業モードの図です: