08/03
2021

php程序是怎么运行起来的

国内头部的一些互联网公司,大多有相当一部分代码是php。即使现在都是在往go方向转,但如果要想胜任这个工作,还是需要对php有一定的了解的,这样才能将老代码进行理解,进而重构到go生态中。

php作为一个静态的解释型脚本语言,没有常驻后台的进程,我们写完php代码之后,推到线上直接就生效了,也不需要像其他语言,比如go、python、java、c等等去重启一下进程。

所以我一直都很困惑于当客户端/业务方的一个http请求到来时,服务端是如何进行处理的,怎么就将我们的php代码给运行起来了。于是,查了很多文献,都语焉不详,花费了好多时间才搞明白。

首先,一个请求到后端的时候,处理路径如下:

  1. web server接受请求,web server可以是apache、nginx、tomcat等
  2. web server将请求以fast-cgi协议描述的数据格式,将请求数据通过套接字发送到php-fpm
  3. php-fpm调度php脚本运行,获得运行结果
  4. php-fpm将运行结果再以fast-cgi协议的格式传送回web server
  5. web server响应客户端

一些关键的技术点,用来辅助理解一个http请求的处理路径。

  • php-fpm是fast-cgi协议的一个实现
  • php-fpm是用c语言写的
  • php解释器也是用c语言写的
  • php-fpm是常驻后台的进程
  • php-fpm在启动的时候会启动一个master,多个worker
  • Php-fpm在接收到web server通过套接字发过来的http请求后,分配到具体的worker进程处理。worker进程会调用php解释函数php_execute_script来执行(也是c语言)。所以可以说php-fpm内置了php解释器(当然应该是以so链接库的形式加载的)

以下为php的核心架构

php核心架构

参考文献:

本站总访问量 本站访客数人次 本文总阅读量