/**PHP生命周期*PHP程序启动*预初始化(Apache或Nginx相关操作)*扩展名php.dll对应的模块初始化*请求初始化$_SERVER等参数I*frame执行php脚本代码II可以重复执行(一般是框架内容)*请求处理完成requestI*关闭模块close**Apache:*A:php作为Apache的一个模块启动和终止。*这个时候php会初始化一些必要的数据(PHP_MINIT_FUNCTION),比如Apache相关的,这些数据是常驻内存的!终止对应于它。*B:当Apache分配一个页面请求时,php会启动和终止一次**PHP扩展周期:*http://www.cunmou.com/phpbook/1.md*Moduleinit,Requestinit,RequestShutdown,Moduleshutdown四个过程*具体执行顺序如下*///这四个宏都是在walu.c中完成实现的,它们的定义在/main/php.h中(其实也叫其他宏)//这些代码都在walu.c里,不是php内核代码在.h里//ModuleInitialize预初始化必要数据{extension(systemmodule),(constant,class,resource)(custom)}inttime_of_minit;//初始化在MINIT,在每次页面请求时输出,看有没有变化PHP_MINIT_FUNCTION(walu){time_of_minit=time(NULL);//我们在MINIT启动时初始化returnSUCCESS;}//(Startup)当一个页面请求来的时候,PHP会立即像打鸡血一样开辟一个新的环境,并重新扫描每一个自己的extension,//一个一个执行各自的RINIT方法(俗称RequestInitialization),//此时一个扩展可能会初始化自己扩展使用的变量,初始化客户端中的变量,即PHP脚本等,//内核预置PHP_RINIT_FUNCTION()宏函数帮助我们实现这个功能:inttime_of_rinit;//在RINIT中初始化,看每次请求页面时是否变化PHP_RINIT_FUNCTION(walu){time_of_rinit=time(NULL);returnSUCCESS;}//(结算)处理(文件运行成功,用户主动退出/死,致命错误)//回收程序//释放本次请求使用的所有东西:包括变量表中的所有变量,allmemoryrequestedinthisrequest等WaitPHP_RSHUTDOWN_FUNCTION(walu){FILE*fp=fopen("/cnan/www/erzha/time_rshutdown.txt","a+");//请确保文件可写,否则apachewillcrashfprintf(fp,"%d\n",time(NULL));//看看每次请求结束时是否会往这个文件中添加数据fclose(fp);returnSUCCESS;}//当Apache通知PHP要停止时,PHP则进入MSHUTDOWN(俗称ModuleShutdown)阶段。//此时PHP会对所有的扩展下达最后通牒。如果任何扩展有一个未实现的愿望,把它放在它自己的MSHUTDOWN方法中//这是最后的机会。PHP一旦执行了扩展的MSHUTDOWN,就会进入自毁程序,//这里必须要擅自释放自己申请的内存,否则就是灾难PHP_MSHUTDOWN_FUNCTION(walu){FILE*fp=fopen("/cnan/www/erzha/time_mshutdown.txt","a+");//请确保该文件是可写的,否则apache会莫名崩溃fprintf(fp,"%d\n",time(NULL));returnSUCCESS;}//我们在页面输出time_of_minit和time_of_rinit的值PHP_FUNCTION(walu_test){php_printf("%d
",time_of_minit);php_printf("%d
",time_of_rinit);return;}#线程安全与非线程安全#web:http://www.cunmou.com/phpbook/1.4.md#TRSM(threadsaferesourcemanagement)php抽象层,php多线程管理
