php 變數生命週期:PHP源碼分析-PHP的生命週期
來源:互聯網
上載者:User
PHP的最多的兩種運行模式是WEB模式、CLI模式。
無論哪種模式,PHP工作原理都是一樣的,作為一種SAPI運行。
1、當我們在終端敲入php這個命令的時候,它使用的是CLI。
它就像一個web伺服器一樣來支援php完成這個請求,請求完成後再重新把控制權交給終端。
2、當使用Apache作為宿主時,當一個請求到來時,PHP會來支援完成這個請求。
main/php.h中定義了以下幾個宏
#define PHP_MINIT_FUNCTIONZEND_MODULE_STARTUP_D
#define PHP_MSHUTDOWN_FUNCTIONZEND_MODULE_SHUTDOWN_D
#define PHP_RINIT_FUNCTIONZEND_MODULE_ACTIVATE_D
#define PHP_RSHUTDOWN_FUNCTIONZEND_MODULE_DEACTIVATE_D
#define PHP_MINFO_FUNCTIONZEND_MODULE_INFO_D
#define PHP_GINIT_FUNCTIONZEND_GINIT_FUNCTION
#define PHP_GSHUTDOWN_FUNCTIONZEND_GSHUTDOWN_FUNCTION
對應的作用是
PHP_MINIT_FUNCTION初始化module時運行
PHP_MSHUTDOWN_FUNCTION當module被卸載時運行
PHP_RINIT_FUNCTION當一個REQUEST請求初始化時運行
PHP_RSHUTDOWN_FUNCTION當一個REQUEST請求結束時運行
PHP_MINFO_FUNCTION這個是設定phpinfo中這個模組的資訊
PHP_GINIT_FUNCTION初始化全域變數時
PHP_GSHUTDOWN_FUNCTION釋放全域變數時
看一個自訂擴充案例片段:
int minit_time;
PHP_MINIT_FUNCTION(test)
{
minit_time = time(NULL);
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(test)
{
FILE *fp=fopen("mshutdown.txt","a+");
fprintf(fp,"%ld\n",time(NULL));//讓我們看看是不是每次請求結束都會在這個檔案裡追加資料
fclose(fp);
return SUCCESS;
}
int rinit_time;
PHP_RINIT_FUNCTION(test)
{
rinit_time = time(NULL);
return SUCCESS;
}
PHP_RSHUTDOWN_FUNCTION(test)
{
FILE *fp=fopen("rshutdown.txt","a+");
fprintf(fp,"%ld\n",time(NULL));//讓我們看看是不是每次請求結束都會在這個檔案裡追加資料
fclose(fp);
return SUCCESS;
}
PHP_MINFO_FUNCTION(test)
{
php_info_print_table_start();//調用php_write輸出HTML標籤
php_info_print_table_header(2, "module info", "enabled"); 本文連結http://www.cxybl.com/html/wlbc/Php/20121221/35071.html