PHP是一种广泛使用的Web编程语言,从最初的基本CGI脚本到现在的PHP FPM进程管理器都有不断的发展。本文将重点介绍PHP CGI和PHP FPM的不同之处以及如何选择适合自己的选项。CGI(Common Gateway Interface)是一种将Web服务器与外部应用程序或脚本进行交互的标准化接口。在PHP中,通过将CGI模式与服务器集成,您可以编写PHP脚本来生成动态内容。但这种方式有缺点。当一个页面被请求时,CGI会调用PHP解释器来编译并运行脚本,这个过程会导致大量的CPU和内存资源的消耗。甚至在访问量很小时,您也会遇到瓶颈,服务器的速度会变慢。因此,当您对响应速度有更高要求时,PHP FPM就是一个更好的选择。PHP FPM(FastCGI Process Manager)是一种在Nginx和其他Web服务器中使用的PHP解释器。这个过程管理器可通过设置来管理进程,优化PHP运行的效率。通过PHP FPM管理器,您可以在多个进程(例如Web服务器或一组单独运行的Mac或PC)中运行PHP代码,从而提高计算能力和响应速度。一次请求结束后,PHP-FPM将清除每个进程,这有助于释放内存和其他计算资源。例如,假设我们有一个流行的博客网站,有数十万的访问量每天。由于我们的PHP应用程序需要生成大量的动态内容,所以CGI模式已经达到了其极限。我们决定将应用程序迁移到Nginx/Web服务器,同时使用PHP FPM提高性能。首先,我们需要去下载PHP FPM。在这个例子中,我们下载的PHP FPM版本是php-7.2.12.tar.gz。然后,我们需要编译和安装PHP FPM。进入PHP FPM下载目录,运行以下命令来解压:
tar xf php-7.2.12.tar.gz
接下来,我们需要创建一个名为“build”目录,并在其下编译PHP FPM。运行以下命令创建一个新目录:
mkdir build
安装php-devel软件包以确保能够编译PHP源代码:
yum install php-devel
进入build目录,运行以下命令编译源代码:
cd ./build && ../php-7.2.12/configure --enable-fpm && make && make install
接下来,我们需要配置PHP FPM。我们将使用默认配置文件,因此我们只需要确保文件存在:
cp /etc/php-fpm.conf.default /etc/php-fpm.conf
随后,我们可以使用以下命令运行PHP FPM服务器:
/usr/local/sbin/php-fpm -c /etc/php.ini -y /etc/php-fpm.conf
让我们也看看PHP CGI在上述情况中会发生什么。如果使用CGI,我们将使用PHP-CGI解释器来为每个请求处理动态内容。对于每个请求,Web服务器都将启动一个新的CGI进程,消耗额外的CPU和内存资源。例如,假设我们有一个流行的博客网站,有数十万的访问量每天。由于我们的PHP应用程序需要生成大量的动态内容,所以CGI模式已经达到了其极限。我们决定将应用程序迁移到Nginx/Web服务器,同时使用PHP FPM提高性能。然后,我们需要安装CGI模式。假设我们使用CentOS 7,我们可以使用以下命令安装CGI:
yum install php-cgi
进入Web服务器的配置文件,使用以下命令将CGI与Web服务器集成:
location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param script_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
与PHP FPM不同,CGI模式会在每个请求中生成新的进程,消耗更多的内存和CPU资源。此外,Web服务器使用和CGI进程通信的FastCGI协议,可以使初始化新的CGI进程所需的时间不可避免地增加。综上所述,优秀的PHP Web应用程序开发人员应该根据实际需求选择适合自己的选项,无论是CGI还是PHP FPM。对于响应速度不高的应用程序可以选择CGI,但对于需要快速响应的大型应用程序,或者高访问量的Web应用程序则可以选择PHP FPM以提高性能。