更改

跳到导航 跳到搜索
添加1,731字节 、 2019年10月22日 (二) 15:12
第218行: 第218行:     
https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/80637277
 
https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/80637277
 +
 +
== php生命周期 ==
 +
# 模块初始化阶段  ---   php_module_startup()
 +
这个阶段主要进行php框架、zend引擎的初始化操作。这个阶段一般是在SAPI启动时执行一次,对于FPM而言,就是在fpm的master进行启动时执行的。php加载每个扩展的代码并调用其模块初始化例程(MINIT),进行一些模块所需变量的申请,内存分配等。
 +
# 请求初始化阶段  ---   php_request_startup()
 +
当一个页面请求发生时,在请求处理前都会经历的一个阶段。对于fpm而言,是在worker进程accept一个请求并读取、解析完请求数据后的一个阶段。在这个阶段内,SAPI层将控制权交给PHP层,PHP初始化本次请求执行脚本所需的环境变量。
 +
# 执行脚本阶段     ---   php_execute_script()
 +
php代码解析执行的过程。Zend引擎接管控制权,将php脚本代码编译成opcodes并顺次执行
 +
# 请求关闭阶段     ---   php_request_shutdown()
 +
请求处理完后就进入了结束阶段,PHP就会启动清理程序。这个阶段,将flush输出内容、发送http响应内容等,然后它会按顺序调用各个模块的RSHUTDOWN方法。 RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。
 +
# 模块关闭阶段     ---   php_module_shutdown()
 +
该阶段在SAPI关闭时执行,与模块初始化阶段对应,这个阶段主要是进行资源的清理、php各模块的关闭操作,同时,将回调各扩展的module shutdown钩子函数。这是发生在所有请求都已经结束之后,例如关闭fpm的操作。(这个是对于CGI和CLI等SAPI,没有“下一个请求”,所以SAPI立刻开始关闭。)

导航菜单