1、PHP的运行原理
典型题:Nginx PHP - FPM 的运行原理
CGI:本身早期的一些 Web Server 只能处理简单的 HTML静态文件,但是随着技术的发展,出现了动态语言(如PHP,Python)。在这当中,如果我们要去处理 PHP得交个PHP解析器来处理,但是PHP处理完毕后,又怎么跟我们的 Web Server 来进行通信呢?这是一个问题。为了解决不同的语言处理器 与 Web Server 的通信,出现了 CGI协议,只要按照 CGI协议 去编写程序,就能够实现语言解析器 与 Web Server 的通信。(如:PHP的CGI程序) 在此过程中,CGI就是PHP解析器 和 Web Server 当中的一个协议桥梁。
FastCGI :CGI虽然解决了PHP与 Web Server 通信的问题,但是它的效率很低,因为 Web Server 每收到一个请求,都会新开一个 CGI进程,然后请求结束的时候,再终止掉这个进程,这个时候如果说我们有一万个,或者十万个,或者一百万个这样的请求,我们就会新开 十万,一百万这样的进程,然后再去终止掉,本身来说,非常浪费我们的资源。此时 FastCGI 就出现了,它主要是 以 CGI的改良版本出现,每次处理完请求之后,不会终止掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求,这样的话,每次就不用重新开一个进程了,大大提升了我们的效率。
PHP-FPM : (FastCGI Process Manager : FastCGI的进程管理器) , FPM是 FastCGI的一个实现,并且提供了进程管理的功能。进程 包括 master进程 和 worker进程 两种进程, master进程 只有一个,负责监听端口,接收来自 Web Server的请求;而 Worker进程 则一般会有多个,具体的数量会在 FPM的配置中进行定义,每个进程的内部都会嵌入一个PHP解析器(那就是PHP代码真正执行的地方),也就是说,worker 来进行处理 PHP代码,而 master 主要是监听端口,跟 Web Server 来进行接收请求。本身来说,master监听端口默认情况下是 9000,通过 Nginx的反向代理 去代理 9000端口,所以在这儿我们可以完成 FPM的相关处理。
2、简述CGI、FastCGI 和 PHP-FPM 的区别。
CGI : 为了联系 Web Server 跟PHP解析器中的一个协议,它起一个桥梁的作用。
FastCGI : 是 CGI的改良版本。
PHP-FPM : FastCGI Process Manager,FastCGI进程管理器。
以上是PHP的运行原理的详细内容。更多信息请关注PHP中文网其他相关文章!