PHP扩展开发与内核应用阅读笔记---php的生命周

来源:互联网 发布:下载网站的软件 编辑:程序博客网 时间:2024/05/16 08:05


首先提供书的地址:http://www.walu.cc/phpbook/index.md,并向作者表示感谢!同时欢迎同看此书的人加入QQ群:76761320

本章知识点:

  1. 简单了解SAPI
  2. php的启动与终止
  3. php的生命周期
  4. 线程安全

一、SAPI就是PHP和外部环境的代理器, 他把外部环境抽象后, 为内部的PHP提供一套固定的, 统一的接口, 

使得PHP自身实现可以不用考虑不同的外部环境而导致逻辑复杂.

二、php终止与启动的两个概念:

         1.PHP作为Apache(拿它举例,板砖勿扔)的一个模块的启动与终止,这次启动php会初始化一些必要数据。并且这些数据是常驻内存的!

         2.当Apache分配一个页面请求过来的时候,PHP会有一次启动与终止,这也是我们最常讨论的一种。

         3.通过修改扩展文件中的.c文件来体验,php的启动和终止

                如果你的扩展起名为walu那么我们需要修改你扩展目录下的walu.c ,用下面代码中的函数替换walu.c中同名的函数

//这些代码都在walu.c里面,不再.h里int time_of_minit;//在MINIT中初始化,在每次页面请求中输出,看看是否变化PHP_MINIT_FUNCTION(walu){    time_of_minit=time(NULL);//我们在MINIT启动中对他初始化    return SUCCESS;}int time_of_rinit;//在RINIT里初始化,看看每次页面请求的时候变不。PHP_RINIT_FUNCTION(walu){    time_of_rinit=time(NULL);    return SUCCESS;}PHP_RSHUTDOWN_FUNCTION(walu){    FILE *fp=fopen("/cnan/www/erzha/time_rshutdown.txt","a+");//请确保文件可写,否则apache会莫名崩溃    fprintf(fp,"%d\n",time(NULL));//让我们看看是不是每次请求结束都会在这个文件里追加数据    fclose(fp);    return SUCCESS;}PHP_MSHUTDOWN_FUNCTION(walu){    FILE *fp=fopen("/cnan/www/erzha/time_mshutdown.txt","a+");//请确保文件可写,否则apache会莫名崩溃    fprintf(fp,"%d\n",time(NULL));    return SUCCESS;}//我们在页面里输出time_of_minit和time_of_rinit的值PHP_FUNCTION(walu_test){    php_printf("%d<br />",time_of_minit);    php_printf("%d<br />",time_of_rinit);    return;}

        在这里我们需要搞清楚这些函数到是什么时候执行的,做什么的。

首先:PHP_MINIT_FUNCTION:


           当模块被Zend Engine(ZE)加载后,例如Apache启动,加载了PHP模块,
ZE会对每一个扩展模块调用此函数(如果有的话),可以在该函数里进行一些初始化操作。

PHP_RINIT_FUNCTION: 

        对于每一个"使用"该模块的PHP脚本请求前,都执行该函数(如果有的话),最好的例子: Session 扩展模块,如果在一个PHP脚本里执行session.start(), Session模块的PHP_RINIT_FUNCTION(),将被调用. 详情可以看看 session模块 的源代码

PHP_RSHUTDOWN_FUNCTION:

        与PHP_RINIT_FUNCTION()相反,该函数是在一个 PHP 脚本执行完毕后执行

PHP_MSHUTDOWN_FUNCTION:

        当ZE收到shutdown信号后,例如apache卸载PHP模块,ZE 对每一个模块调用此函数,最后关闭自己的核心子系统.

三、PHP的生命周期:

       通过二的php的启动与终止我们了解到php执行了四个过程

      Module init、Request init、Request Shutdown、Module shutdown  。

四、线程安全:

     看完之后感觉有些深,有些散乱,没明白到底讲的什么。等过段时间再来看!

      推荐两篇关于线程安全的博文:

1.PHP源码分析之线程安全模型

2.深入研究PHP及Zend Engine的线程安全模型

原创粉丝点击