1、客户端发起URL请求。
2、服务器上的 Web Server 接受到客户断的请求,判断是PHP的请求,然后发起一个socket请求给PHP解释器(php-cgi),然后Web Server 把客户端的请求交给php-cgi来处理,然后 php-cgi 载入程序脚本去处理 客户请求,并生成相应html页面(大的字符串),最后 php-cgi 在把这个 html 页面返回给 Web Server 服务器。
3、Web Server 把 php-cgi 处理后的结果返回给客户端浏览器。
现在服务器一般都不是等到客户端请求了在去载入PHP解释器了,而是采用 PHPFastCGI 管理器(Spawn-FCGI,PHP-FPM),来管理FastCGI处理PHP的请求。
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自
FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启
动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。