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以提高性能。