ホームページ  >  記事  >  バックエンド開発  >  PHP ソースコード分析 - PHP ライフサイクル_PHP チュートリアル

PHP ソースコード分析 - PHP ライフサイクル_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:47:211021ブラウズ

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);

php_printf("%d
",time_of_rinit);

戻る

}

Apache を例に挙げます

マルチスレッドモードで作業している場合:

このモードでは、サーバー プロセスは 1 つだけ実行されますが、多くのスレッドが同時に実行されるため、モジュールの初期化とモジュールのシャットダウンは 1 回だけ実行するだけで済み、一部のグローバル変数は初期化するだけで済みます。スレッドの固有の特性により、リクエスト間で一部のデータを簡単に共有することができます。

マルチスレッドの動作方法は以下の通りです

:

マルチプロセスモードで作業している場合:

minit_time と rinit_time の値はリクエストごとに変化します。
ページ要求が終了するたびに、データが time_rshutdown.txt および time_mshutdown.txt に書き込まれます。

以下は、マルチプロセス作業モードの図です:


神様のブログより抜粋

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478513.html技術記事 PHP の最も一般的な 2 つの動作モードは、WEB モードと CLI モードです。 モードに関係なく、PHP は SAPI として実行され、同じように動作します。 1.ターミナルでphpコマンドを入力すると…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。