PHP扩展开发与内核应用阅读笔记---php的生命周
来源:互联网 发布:下载网站的软件 编辑:程序博客网 时间:2024/05/16 08:05
首先提供书的地址:http://www.walu.cc/phpbook/index.md,并向作者表示感谢!同时欢迎同看此书的人加入QQ群:76761320
本章知识点:
- 简单了解SAPI
- php的启动与终止
- php的生命周期
- 线程安全
一、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的线程安全模型
- PHP扩展开发与内核应用阅读笔记---php的生命周
- PHP扩展开发与内核应用阅读笔记---php的内存管理
- PHP扩展开发与内核应用阅读笔记---php的作用域以及如何在扩展中定义,查找php变量
- PHP扩展开发与内核应用
- php扩展开发与内核应用
- 《PHP扩展开发及内核应用》
- PHP扩展开发及内核应用
- 《PHP扩展开发及内核应用》目录
- 《PHP扩展开发及内核应用》
- PHP扩展开发笔记
- PHPER必读电子书推荐-《PHP扩展开发及内核应用》
- PHP内核的学习--创建PHP扩展
- PHP 扩展开发笔记一
- PHP内核介绍及扩展开发指南
- PHP应用的水平扩展
- 推广一下《PHP扩展开发及内核应用》,经典好书,翻译完成。
- 《PHP扩展开发及内核应用》读书笔记(更新到第3章)
- 关于php的扩展开发
- Android获取通话时间实例分析
- 深入理解Java内存模型(一)——基础
- oc block的使用
- Android onInterceptTouchEvent 与onTouchEvent 事件处理
- 如何使用SQLite
- PHP扩展开发与内核应用阅读笔记---php的生命周
- 使用XML进行声明式事务管理
- ASM(Active Shape Model) 主动形状模型总结
- JSTL分页
- 借putty之私钥为SecureCRT所用
- UVa11292
- Discourse CentOS 安装记录
- set集合容器自定义比较函数
- dom4j解析http请求获取的xml文件