本文共 672 字,大约阅读时间需要 2 分钟。
模块初始化
PHP模块初始化过程主要由Apache和Nginx触发。服务器在启动时会调用`php_module_startup()`函数,进而激活各个模块的`MINIT`(Module Initialization)方法。此时,Zend引擎将被初始化,包括垃圾回收器的注册以及对`php.ini`配置文件中的扩展的解析。这一过程涵盖了静态编译扩展和动态加载扩展的注册。
请求初始化
当处理新的HTTP请求时,服务器会调用`php_request_startup()`函数。这一步骤旨在激活Zend引擎,并准备好SAPI(Server Application Programming Interface)。SAPI是PHP内核为外部系统提供的接口,允许外部系统通过调用PHP的服务,如执行编译脚本或执行脚本等。常见的SAPI实现包括Cli和Fpm两种模式。
脚本执行
PHP脚本的执行流程包括以下几个阶段:首先,PHP解析器会读取源代码并将其转换为语言片段(Token)。接着,这些Token会被转换为更高层次的表达式,然后进一步转换为Zend虚拟机可识别的OPCODE。PHP共定义了173个OPCODE,这些 opcode在`zend_vm_opcodes.h`文件中得到实现。所有PHP语法的执行都依赖于这些 opcode的处理机制。
转载地址:http://yctfk.baihongyu.com/