PHP是一種廣泛使用的腳本語(yǔ)言,常用于Web開發(fā)。與之相伴的Apache服務(wù)器則被廣泛應(yīng)用于Web服務(wù)搭建領(lǐng)域。同時(shí),Apache的代理和反向代理能力被越來(lái)越多的用戶所青睞。那么,PHP運(yùn)行在Apache中有哪些方式呢?
最常見的方式是使用mod_php。這種方式將PHP解釋器整合到Apache進(jìn)程中,這樣PHP代碼就可以被直接解釋執(zhí)行了。這就意味著,一旦進(jìn)程啟動(dòng),PHP解釋器也就開始工作了。該模式的一個(gè)顯而易見的優(yōu)點(diǎn)是,對(duì)于一次請(qǐng)求來(lái)講,各種操作都是在一個(gè)進(jìn)程中完成的,這大大提高了效率。在實(shí)際應(yīng)用中,存放在php.ini文件中的PHP配置項(xiàng)也會(huì)對(duì)在Apache中運(yùn)行的PHP產(chǎn)生影響。
# 一個(gè)簡(jiǎn)單的mod_php配置案例 LoadModule php5_module modules/libphp5.soSetHandler php5-script
另外一種方式叫做CGI,它將Web服務(wù)器與處理PHP代碼的應(yīng)用程序割開來(lái)。對(duì)于每一次請(qǐng)求,Web服務(wù)器都需要啟動(dòng)一個(gè)新的進(jìn)程或線程,這個(gè)新進(jìn)程或線程啟動(dòng)PHP解釋器并執(zhí)行請(qǐng)求中的PHP代碼。然后,這個(gè)PHP解釋器會(huì)向Web服務(wù)器返回結(jié)果并終止。下一次請(qǐng)求又得再次重啟PHP解釋器。在這個(gè)模式下,Web服務(wù)器與處理PHP代碼的應(yīng)用程序是完全解耦的,這種方式需要在php.ini文件中明確注明PHP解釋器的路徑。
# 一個(gè)CGI模式的簡(jiǎn)單配置案例 LoadModule cgi_module modules/mod_cgi.soAllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted AddHandler cgi-script .cgi .pl
最后一種方式則是使用FastCGI。這是一種將CGI方式進(jìn)行改進(jìn)的方法,其核心思想是,將PHP解釋器綁定進(jìn)一個(gè)模型,也就是說(shuō),F(xiàn)astCGI能夠同時(shí)運(yùn)行多個(gè)PHP解釋器,而不需要為每次請(qǐng)求新建進(jìn)程。同時(shí),PHP解釋器本身也會(huì)隨時(shí)準(zhǔn)備好等待請(qǐng)求的到來(lái)。盡管這種方式相對(duì)復(fù)雜,但它在高流量應(yīng)用中的性能表現(xiàn)卻是最佳的。
# 一個(gè)簡(jiǎn)單的FastCGI模式的配置案例AddHandler fastcgi-script .fcgi FastCgiServer /path/to/php-cgi -idle-timeout 300 -processes 4 SuexecUserGroup user group
以上就是三種讓PHP運(yùn)行在Apache中的方式。雖然這些模式各有優(yōu)缺點(diǎn),但實(shí)際使用的時(shí)候,需要考慮到請(qǐng)求量、安全性、維護(hù)等方面的綜合影響,并根據(jù)實(shí)際情況進(jìn)行選擇。同時(shí),選擇適合自己應(yīng)用程序的方式也是一個(gè)綜合性的工程,需要多方面考慮。希望這篇文章能給大家提供一些參考。