運(yùn)行模式
php有著5種運(yùn)行模式,常見(jiàn)的有4種:
cgi 協(xié)議模式
cgi模式 通用網(wǎng)關(guān)接口(Common Gateway Interface),它允許web服務(wù)器通過(guò)特定的協(xié)議與應(yīng)用程序通信,
調(diào)用原理大概為:
用戶請(qǐng)求->Web服務(wù)器接收請(qǐng)求->fork子進(jìn)程 調(diào)用程序/執(zhí)行程序->程序返回內(nèi)容/程序調(diào)用結(jié)束->web服務(wù)器接收內(nèi)容->返回給用戶
由于每次用戶請(qǐng)求,都得fork創(chuàng)建進(jìn)程調(diào)用一次程序,然后銷毀進(jìn)程,所以性能較低
fast-cgi 協(xié)議模式
fast-cgi是cgi模式的升級(jí)版,它像是一個(gè)常駐型的cgi,只要開(kāi)啟后,就可一直處理請(qǐng)求,不再需要結(jié)束進(jìn)程,
調(diào)用原理大概為:
web服務(wù)器fast-cgi進(jìn)程管理器初始化->預(yù)先f(wàn)ork n個(gè)進(jìn)程
用戶請(qǐng)求->web服務(wù)器接收請(qǐng)求->交給fast-cgi進(jìn)程管理器->fast-cgi進(jìn)程管理區(qū)接收,給其中一個(gè)空閑fast-cgi進(jìn)程處理->處理完成,fast-cgi進(jìn)程變?yōu)榭臻e狀態(tài),等待下次請(qǐng)求->web服務(wù)器接收內(nèi)容->返回給用戶
注意,fast-cgi和cgi都是一種協(xié)議,開(kāi)啟的進(jìn)程是單獨(dú)實(shí)現(xiàn)該協(xié)議的進(jìn)程
模塊模式
apache+php運(yùn)行時(shí),默認(rèn)使用的是模塊模式,它把php作為apache的模塊隨apache啟動(dòng)而啟動(dòng),接收到用戶請(qǐng)求時(shí)則直接通過(guò)調(diào)用mod_php模塊進(jìn)行處理,詳細(xì)內(nèi)容可自行百度
php-cli模式
php-cli模式屬于命令行模式,對(duì)于很多剛開(kāi)始學(xué)php就開(kāi)始wamp,wnmp的開(kāi)發(fā)者來(lái)說(shuō)是最陌生的一種運(yùn)行模式
該模式不需要借助其他程序,直接輸入php xx.php 就能執(zhí)行php代碼
命令行模式和常規(guī)web模式明顯不一樣的是:
- 沒(méi)有超時(shí)時(shí)間
- 默認(rèn)關(guān)閉buffer緩沖
- STDIN和STDOUT標(biāo)準(zhǔn)輸入/輸出/錯(cuò)誤 的使用
- echo var_dump,phpinfo等輸出直接輸出到控制臺(tái)
- 可使用的類/函數(shù) 不同
- php.ini配置的不同
想要了解詳細(xì)內(nèi)容可查看http://php.net/manual/zh/features.commandline.php
其他
本文將以上除了php-cli的模式,都定義為常規(guī)web訪問(wèn)模式