概述
PHP的整个生命周期被划分为以下几个阶段:模块初始化阶段、请求初始化阶段、执行脚本阶段、请求关闭阶段、模块关闭阶段。php的cli模式下每次执行一个脚本都会完整的经历这些阶段,而FastCgi模式下则只会在启动时执行一次模块初始化阶段,然后接下来的各个请求只会执行请求初始化阶段、脚本执行阶段,请求关闭阶段。
流程图
1.模块初始化阶段
这个阶段主要进行PHP框架、zend引擎的初始化操作。这个阶段一般只在SAPI启动时执行一次,对于Fpm而言,就是在Fpm的master进程启动时执行。
- 激活SAPI:sapi_active(),初始化请求信息SG(request info)、设置读取POST请求的 handler等,在module startup阶段处理完后将调用sapi_deactivate()。
- 启动PHP输出:php_output_startup()
- 初始化垃圾回收器:gc_globals_ctor(),分配zend_gc_globals内存
- 启动Zend引擎:zend_startup()
- 注册PHP定义的常量:PHP_VERSION、PHP_ZTS、PHP_SAPI,等等
- 解析php.ini:解析完成后所有的php.ini配置保存在configuration_hash哈希表中
映射PHP、Zend核心的php.ini配置:根据解析出php.ini,获取对应的配置值,将最终