php的最多的两种运行模式是web模式、cli模式。
无论哪种模式,php工作原理都是一样的,作为一种sapi运行。
1、当我们在终端敲入php这个命令的时候,它使用的是cli。
它就像一个web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。
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 初始化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