最近比较丧,本以为2020年会开启一个新的10年,没想到一场新冠疫情肆虐全球,让我在深深的恐惧里更加敬畏生命。

写了这么多年PHP,还不了解PHP生命周期,实在惭愧,补课。。。补课。。。

PHP的构成

PHP的源码主要有下面几个目录:

1
2
3
4
SAPI  //PHP应用接口层
main //PHP主要代码:输入输出,web通信,PHP框架初始化操作
Zend //PHP解析器的主要实现,即ZendVM,是PHP语言的核心实现
ext //PHP的扩展目录:curl,pdo等扩展

PHP源代码下载:https://github.com/php/php-src.git

生命周期

PHP的整个生命周期被划分为:

1
2
3
4
5
6
7
8
9
模块初始化阶段(module startup

请求初始化阶段(request startup)

执行脚本阶段 (execute script)

请求关闭阶段 (request shutdown)

模块关闭阶段 (module shutdown

不同SAPI的实现,各阶段执行情况有差异;cli模式下,每次执行一个脚本都会完整的经历这些阶段,而FastCgi模式下则在启动时执行一次模块初始化,然后各个请求只经历请求初始化,执行请求脚本,请求关闭几个阶段,在SAPI关闭时才经历模块关闭阶段。

PHP运行周期

PHP运行周期