PHP7内核学习笔记 - 请求的生命周期

这篇博客详细介绍了PHP7内核中请求的生命周期,包括模块初始化、请求初始化、脚本执行、请求关闭和模块关闭五个阶段。在模块初始化阶段,主要涉及框架和引擎的初始化;请求初始化涉及内部字符串哈希表的初始化和输出启动;脚本执行阶段执行PHP代码;请求关闭阶段清理资源;模块关闭阶段则调用各个扩展的关闭函数。
摘要由CSDN通过智能技术生成

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

其中STEP1STEP5不是每种模式下都要重复执行的。在cli模式下,脚本执行会完整经历5个步骤。而在Fast-CGI模式下,STEP1只在启动时执行,每个请求处理时只经历STEP2STEP3STEP4,在最终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_filezend_execute_exzend_execute_internal,设置垃圾回收器:gc_collect_cycles
  • zend_vm_init(),初始化Zend虚拟机
  • 分配:GLOBAL_FUNCTION_TABLE(CG(function_table))GLOBAL_CLASS_TABLE(CG(class_table))GLOBAL_AUTO_GLOBALS_TABLE(未知)和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值