服务器端编程-PHP life cycle

Zend Engine执行PHP脚本

php -f yii.php
1. 词法分析 生成token
2. 语法分析 opcache
3. 运行opcache
4. 创建HashTable 添加数据

启用opcache或者APC只能优化前两个步骤
LAMP请求每次结束都要释放HashTable,下一次请求再构建HashTable。

SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口, 就像PC一样,无论安装哪些操作系统,只要满足了PC的接口规范都可以在PC上正常运行, PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。

初始化过程

0. 在启动php时会有个模块之前的初始化,包括
    初始化若干全局变量。
    初始化若干常量(例如:PHP_VERSION)
    初始化Zend引擎和核心组件(这里的初始化操作包括内存管理初始化、 全局使用的函数指针初始化(如前面所说的zend_printf等),对PHP源文件进行词法分析、语法分析、 中间代码执行的函数指针的赋值,初始化若干HashTable(比如函数表,常量表等等),为ini文件解析做准备, 为PHP源文件解析做准备,注册内置函数(如strlen、define等),注册标准常量(如E_ALL、TRUE、NULL等)、注册GLOBALS全局变量等。)
    解析php.ini(php_init_config函数的作用是读取php.ini文件,设置配置参数,加载zend扩展并注册PHP扩展函数。
    全局操作函数的初始化。
    初始化静态构建的模块和共享模块(MINIT)。
    禁用函数和类。
    
1. 每个模块初始化(MINIT)
2. 模块激活(RINIT)
3. 处理请求
4. 模块清理(RSHUTDOWN)
5. 清理工作
6. 模块关闭(MSHUTDOWN)

单进程SAPI生命周期

服务器端编程-PHP life cycle_第1张图片
php-left-cycle.gif

FastCGI工作流程:

  1. FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程,并等待来自 Web Server 的连接。
  2. Web 服务器与 FastCGI 进程管理器进行 Socket 通信,通过 FastCGI 协议发送 CGI 环境变量和标准输入数据给 CGI 解释器进程。
  3. CGI 解释器进程完成处理后将标准输出和错误信息从同一连接返回 Web Server。
  4. CGI 解释器进程接着等待并处理来自 Web Server 的下一个连接。
服务器端编程-PHP life cycle_第2张图片
Paste_Image.png

你可能感兴趣的:(服务器端编程-PHP life cycle)