php 启用扩展,PHP扩展之PHP的启动和停止

大家都知道PHP有很多运行模式,前面我也有一篇文章简单介绍了一下PHP常见的几种运行模式,其实无论哪种模式,PHP工作原理都是一样的。

本文主要介绍PHP程序的启动和停止在内核里面是走过了哪些过程,我们先来看一看内核中预置的几个宏:

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  释放全局变量时

PHP启动,可以理解为2个部分:

第一个是模块被加载的时候,可以理解为我们的PHP扩展在加载的时候,体现在PHP_MINIT_FUNCTION宏,比如PHP随Apache的启动而诞生在内存里时,会把所有已加载扩展的MINIT方法都执行一遍。 在这个过程里,扩展定义的一些常量、类、资源等所有PHP脚本用到的东西都会随Apache常驻内存,可以被所有请求使用,直到Apache卸载PHP模块。

第二个是当一个页面请求被发送到PHP的时候,PHP会有一次启动,也是广义上的PHP启动,体现在PHP_RINIT_FUNCTION宏,比如Apache发送一个请求到PHP,PHP会迅速的开辟一个新的环境,并重新扫描各个扩展,遍历执行各个扩展的RINIT方法,这时候一个扩展可能会初始化在本次请求中会使用到的变量等。

停止反之,分别体现在PHP_MSHUTDOWN_FUNCTION宏和PHP_RSHUTDOWN_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_info_print_table_header(, "module info", "enabled");

php_info_print_table_end();

/* Remove comments if you have entries in php.ini

DISPLAY_INI_ENTRIES();

*/

}

PHP_FUNCTION(test)

{

php_printf("%d",minit_time);

php_printf("%d",rinit_time);

return;

}

测试的结果如下:

minit_time的值每次请求都不变。

rinit_time的值每次请求都改变。

每次页面请求都会往rshutdown.txt中写入数据。

只有在apache结束后mshutdown.txt才写入数据。

打赏

5bcf1d675d3d892e4e904daf057a4823.png微信扫一扫,打赏作者吧~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值