PHP内核之旅-1.生命周期
1.SAPI接口
PHP具体应用的编程接口。
2.开始和结束
PHP开始执行以后会经过两个主要的阶段:
处理请求之前的开始阶段和请求之后的结束阶段。
1.1开始阶段:
1.1.1 模块初始化阶段(MINT),只进行一次。
1.1.2 模块激活阶段(RINIT),PHP会调用所有模块的RINIT函数
1.2结束阶段(脚本执行到末尾或者通过调用exit()或die()函数,PHP都将进入结束阶段)
1.2.1 停用模块(RSHUTDOWN,对应RINIT)
1.2.2 关闭模块(MSHUTDOWN,对应MINIT),Web服务器退出或者命令行脚本执行完毕退出时
3.单进程SAPI生命周期
CLI/CGI模式的PHP属于单进程的SAPI模式。处理一次请求后就关闭。
在各个阶段之间PHP还做了很多工作。
(1)启动
(2)初始化若干全局变量
(3)初始化若干常量
(4)初始化Zend引擎和和性组建
(5)解析php.ini
(6)全局操作函数的初始化
(7)初始化静态构建的模块和共享模块(MINIT)
(8)禁用函数和类
(9)ACTIVATION
(10)激活Zend引擎
(11)激活SAPI
(12)环境初始化
(13)模块请求初始化
(14)运行
php_execute_script函数包含了运行PHP脚本的全部过程
(15)DEACTIVATION
(16)flush
sapi_flush将最后的内容刷新出去
(17)关闭Zend引擎
4.多进程SAPI生命周期
5.Zend引擎
Zend引擎是PHP实现的核心,提供了语言实现上的基础设施。
PHP的语法时限,脚本的编译运行环境,扩展机制以及内存管理。
很多PHP扩展都是使用Zend API,而Zend正是PHP语言本身的实现,PHP只是使用Zend这个内核来构建PHP语言的。
参考资料:http://www.php-internals.com/book/?p=chapt02/02-01-php-life-cycle-and-zend-engine
作 者:
Jackson0714
出 处:http://www.cnblogs.com/jackson0714/
关于作者:专注于微软平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
PHP内核之旅-1.生命周期的更多相关文章
- 深入理解PHP内核(二)概览-PHP生命周期与Zend引擎
本文参考自<深入理解PHP内核>,地址:https://github.com/reeze/tipi 本文链接:http://www.orlion.ml/232/ 1.SAPI接口 SAPI ...
- React Native填坑之旅--组件生命周期
这次我们来填React Native生命周期的坑.这一点非常重要,需要有一个清晰的认识.如果你了解Android或者iOS的话,你会非常熟悉我们今天要说的的内容. 基本上一个React Native的 ...
- PHP内核的学习--PHP生命周期
一切的开始: SAPI接口 SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口, 就像PC一样,无论安装哪些操作系统,只要满足了 ...
- PHP内核之旅-2.SAPI中的Cli
PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli 一.SAPI是什么? 1.1 理解SAPI (1)SAPI是PHP框架的接口层.有很多种服务器的SAPI的实 ...
- PHP内核之旅-3.变量
PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli PHP内核之旅-3.变量 一.弱类型语言 php是弱类型语言.一个变量可以表示任意数据类型. php强大的一 ...
- PHP内核之旅-6.垃圾回收机制
回收PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli PHP内核之旅-3.变量 PHP内核之旅-4.字符串 PHP内核之旅-5.强大的数组 PHP内核之旅-6 ...
- PHP内核之旅-5.强大的数组
PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli PHP内核之旅-3.变量 PHP内核之旅-4.字符串 PHP内核之旅-5.强大的数组 PHP内核之旅-6.垃 ...
- PHP内核之旅-4.可变长度的字符串
PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli PHP内核之旅-3.变量 PHP内核之旅-4.字符串 PHP内核之旅-5.强大的数组 PHP内核之旅-6.垃 ...
- 3.PHP内核探索:一次请求生命周期
我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的.PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口). PHP总共有三个模块: ...
随机推荐
- LeetCode题型分类及索引
目录 这是一个对LeetCode题目归类的索引,分类标准参考了July大神的<编程之法>以及LeetCode的tag项.分类可能还不太合理,逐步完善,请见谅~ 题主本人也在一点一点的刷题, ...
- MYSQL中group_concat有长度限制!默认1024
在mysql中,有个函数叫"group_concat",平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是10 ...
- OpenID Connect + OAuth2.0
一.问题的提出 现代应用程序或多或少都是如下这样的架构: 在这种情况下,前端.中间层和后端都需要进行验证和授权来保护资源,所以不能仅仅在业务逻辑层或者服务接口层来实现基础的安全功能.为了解决这样的问题 ...
- 访问器属性:setter()函数和getter()函数
1.干嘛用的? getter()函数:返回有效的值 setter()函数:调用它并传入数据,这个函数决定如何处理数据 2.具备哪些属性?如何定义? configurable(默认为true),enum ...
- mysql 查询select语句汇总
数据准备: 创建表: create table students( id int unsigned primary key auto_increment not null, name varchar( ...
- python基础——面向对象进阶
python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...
- mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...
- 浅析开源数据库MySQL架构
数据库是所有应用系统的核心,故保证数据库稳定.高效.安全地运行是所有企业日常工作的重中之重.数据库系统一旦出现问题无法提供服务,有可能导致整个系统都无法继续工作.所以,一个成功的数据库架构在高可用设计 ...
- Linux(二)CentOS的安装
centos6.8 链接:https://pan.baidu.com/s/1TjCYXzijMzfpiZ9Z-D1Qhg 密码:7mvn 2.1 新建虚拟机 1 2.2 选中稍后安装操作系统(先把虚拟 ...
- Java程序优化之替换swtich
关键字switch语句用于多条件判断,功能类似于if-else语句,两者性能也差不多,不能说switch会降低系统性能.在绝大部门情况下,switch语句还是有性能提升空间的. 但是在项目代码中,如果 ...