You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache/Nginx如何将请求数据传递给PHP解释器?

Apache(或其他Web服务器)如何将请求数据传递给PHP解释器?

Web服务器和PHP解释器之间的通信主要依赖两种主流模式,核心都是通过环境变量和请求体数据流传递请求数据,PHP正是基于这些数据生成$_GET、$_POST、$_SERVER等超全局变量:

1. 传统CGI模式

  • Apache定位到目标.php文件后,会启动一个独立的php-cgi进程。
  • 它会把请求的元数据(比如请求方法REQUEST_METHOD、请求地址REQUEST_URI、请求头信息等)以环境变量的形式传递给这个进程。
  • 如果是POST、PUT这类带请求体的请求,Apache会把请求体的内容通过**标准输入(stdin)**传递给php-cgi。
  • PHP解释器读取这些环境变量和标准输入,解析后填充对应的超全局变量,执行脚本后再把输出通过**标准输出(stdout)**返回给Apache,最后由Apache把结果转发给客户端。
  • 这种模式的缺点是每次请求都要新建进程,性能开销较大,现在已经很少用。

2. 主流FastCGI/PHP-FPM模式

  • 这是目前生产环境的主流方案:PHP-FPM(FastCGI Process Manager)会预先启动一批常驻的PHP进程,形成进程池,不需要每次请求都新建进程。
  • Apache通过FastCGI协议和PHP-FPM进程池建立通信,同样把请求元数据通过环境变量传递,请求体数据则通过FastCGI协议的专用通道(本质还是类似标准输入的字节流)传递给PHP进程。
  • PHP进程接收数据后解析生成超全局变量,执行脚本完成后,把输出通过FastCGI协议返回给Apache,再由Apache响应给客户端。

其他Web服务器(比如Nginx)的逻辑和Apache基本一致,都是通过CGI或FastCGI协议传递环境变量和请求体数据,PHP解释器基于这些数据构建开发者常用的超全局变量集合。

内容的提问来源于stack exchange,提问作者jpegoraro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:17:37