PHP-FPM(FastCGI Process Manager)处理请求的流程大致遵循以下步骤,其中您提到的几个关键函数和阶段是PHP-FPM生命周期中的重要组成部分。下面是对您提到步骤的解释及它们如何在PHP-FPM中执行的概述:
1. **php_module_startup**:
- 这个阶段发生在PHP-FPM服务启动时,而非每次请求处理时。`php_module_startup`函数负责初始化整个PHP环境,包括加载配置、初始化内核、注册内部函数和类、加载扩展等。它为处理后续的HTTP请求准备环境。
2. **fcgi_accept_request**:
- 当一个HTTP请求到达时,FastCGI协议层(在PHP-FPM中实现)会调用`fcgi_accept_request`来接收这个请求。这个步骤包括读取来自Web服务器(如Nginx或Apache)的FastCGI请求包,解析请求头和请求体。
3. **php_request_startup**:
- 接收到请求后,`php_request_startup`被调用,它初始化请求上下文,包括初始化全局变量、加载配置、启动错误处理等,为执行脚本做准备。
4. **fpm_request_executing**:
- 此阶段表示PHP-FPM正在分配或复用一个worker进程来执行请求。实际上,这一步骤涉及到FPM管理进程与worker进程之间的通信,确保请求被正确分配。
5. **php_execute_script**:
- 在worker进程中,`php_execute_script`函数被调用以执行实际的PHP脚本。这包括解析PHP代码、执行函数调用、处理变量和对象等。这是请求处理的核心部分。
6. **fpm_request_end**:
- 请求处理完毕后,`fpm_request_end`标记请求处理的结束,准备清理资源。这可能涉及清理局部变量、关闭打开的文件句柄等。
7. **php_request_shutdown**:
- `php_request_shutdown`被调用来执行请求结束时的清理工作,包括执行注册的shutdown函数、清理内存、关闭日志等。这标志着单个请求的生命周期结束。
8. **php_module_shutdown**:
- 当PHP-FPM服务被正常关闭时,`php_module_shutdown`会被调用,执行整个PHP环境的清理和资源释放。这包括卸载扩展、释放全局内存、关闭日志文件等。注意,这并非每次请求结束时执行,而是整个服务生命周期结束时的动作。
整个过程中,PHP-FPM通过master-worker模型管理多个worker进程,每个worker进程可以独立处理请求,提高了并发处理能力。上述步骤构成了PHP-FPM处理HTTP请求的标准流程。
标签:php,请求,FPM,worker,request,Process,Manager,PHP From: https://www.cnblogs.com/maidongdong/p/18187646