前言:
樓主只是剛剛接觸php內核學習這個純粹是個人興趣,寫博客也是為了記錄下來學到的東西以便之后需要時查看,如有寫的不好的地方還望各位大神不吝賜教。
PHP(外文名:PHP: Hypertext PReprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、java和Perl的特點,利于學習,使用廣泛,主要適用于Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。 ------摘自百度
通常情況下PHP有兩種被運行的模式:CGI:公共網關接口(Common Gateway Interface)、CLI:命令行界面(Command Line Interface),其他的方式如FastCGI這里先不討論。關于CGI和CLI的相關內容參考以下文章http://blog.csdn.net/wmlml/article/details/47346201。
在平常的Web環境中,我們并不需要單獨啟動PHP,它一般都會作為一個模塊自動加載到web-server里面去,如apache加載的php5.so。 只要我們啟動了web-server,被一起加載的php便會和服務器一起解析被請求的php腳本。當然,這不是絕對的,當我們以fastcgi(詳情參考http://www.cnblogs.com/lidabo/p/4212419.html)模式安裝php的時候,往往就需要手動在終端運行php -b 127.0.0.1:9999或其它 命令來啟動來啟動php后端服務。
其實無論哪種模式,PHP的工作原理都是一樣的, 都是作為一種SAPI在運行(Server application Programming Interface: the API used by PHP to interface with Web Servers)。當我們在終端敲入php這個命令時候,它使用的是"command line sapi"!它就像一個mini的web服務器一樣來支持php完成這個請求,請求完成后再重新把控制權交給終端。
簡單來說, SAPI就是PHP和外部環境的代理器。它把外部環境抽象后, 為內部的PHP提供一套固定的, 統一的接口, 使得PHP自身實現能夠不受錯綜復雜的外部環境影響,保持一定的獨立性
在PHP啟動時,通常會有兩種概念上的啟動,一是PHP作為Apavhe的一個模塊啟動,Apache會加載一些擴展、常量、類、資源等等,這些東西都統一的被加載進內存中,直到Apache卸載PHP這個模塊。所以通常使用php去編寫的一些web腳本之所以不用編譯除了和zend引擎的關系之外和PHP的第一次啟動也有很大的關系。第二次啟動是Apache分配過來一個頁面請求時PHP的啟動。
說完了啟動就不得不說終止了,兩次啟動也對應了兩次終止。當一個PHP腳本執行完畢時(也可能被die()exit())會有一次終止,與之對應的是上文的第二次啟動,此時的終止僅僅釋放了運行的PHP腳本中占用的內存資源,第一次啟動的被當作Apache模塊的內存并沒有釋放,直到我們告訴Apache對PHP進行stop命令時才會釋放這部分內存。
對于上述的兩次啟動和終止的過程并不僅僅是講到的那么簡單,其中涉及了很多PHP預定義好的函數與擴展。具體內容網上已有非常詳細和全面的介紹,本人這里不敢贅述。詳情參考http://www.laruence.com/2008/08/12/180.html,http://www.cunmou.com/phpbook/1.2.md。
新聞熱點
疑難解答
圖片精選