PHP的整个生命周期可以大致分为五个步骤:
STEP1:模块初始化阶段(module init->php_module_startup)STEP2:请求初始化阶段(request init->php_request_startup)STEP3:脚本执行阶段(execute script->php_execute_script)STEP4:请求关闭阶段(request shutdown->php_request_shutdown)STEP5:模块关闭阶段(module shutdown->php_module_shutdown)
其中
STEP1和STEP5不是每种模式下都要重复执行的。在cli模式下,脚本执行会完整经历5个步骤。而在Fast-CGI模式下,STEP1只在启动时执行,每个请求处理时只经历STEP2、STEP3、STEP4,在最终SAPI关闭时会经历STEP5。
STEP1:模块初始化阶段(MINIT)。这个阶段主要是模块的初始化,具体包括PHP框架,Zend引擎的初始化。
- 调用
sapi_activate(),设置一堆SG(xxx),对sapi_globals中的成员变量做初始化。在php_module_startup()的结尾处会调用sapi_deactivate()(话说,没搞明白为啥要调用这个。。)- 调用
php_output_startup(),启动PHP的输出php_startup_ticks(),对tick_functions进行初始化- 针对是否
ZTS进行core_globals的相应设定- 调用
gc_globals_ctor(),初始化垃圾回收器,设定gc_globals- 设定
zuf,并调用zend_startup(&zuf, NULL)来启动Zend引擎,主要包括:
- 针对是否
ZTS设定一些全局参数zend_cpu_startup(),具体做啥的。。没看明白start_memory_manager(),初始化内存管理器- 设置一些
util函数句柄:utility_functions->xxx- 设置
Zend虚拟机的编译器和执行器:zend_compile_file、zend_execute_ex、zend_execute_internal,设置垃圾回收器:gc_collect_cycleszend_vm_init(),初始化Zend虚拟机- 分配:
GLOBAL_FUNCTION_TABLE(CG(function_table))、GLOBAL_CLASS_TABLE(CG(class_table))、GLOBAL_AUTO_GLOBALS_TABLE(未知)和GLOBAL_CONSTANTS_TABLE(EG(zend_constants))。若为ZTS,还需要设定

这篇博客详细介绍了PHP7内核中请求的生命周期,包括模块初始化、请求初始化、脚本执行、请求关闭和模块关闭五个阶段。在模块初始化阶段,主要涉及框架和引擎的初始化;请求初始化涉及内部字符串哈希表的初始化和输出启动;脚本执行阶段执行PHP代码;请求关闭阶段清理资源;模块关闭阶段则调用各个扩展的关闭函数。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



