靜態網站是指全部由HTML(標準通用標記語言的子集)代碼格式頁面組成的網站,所有的內容包含在網頁文件中。網頁上也可以出現各種視覺動態效果,如GIF動畫、FLASH動畫、滾動字幕等,而網站主要是靜態化的頁面和代碼組成,一般文件名均以htm、html、shtml等爲後綴。
動態網站是指通過網頁程序語言編寫,當客戶請求時執行網頁程序腳本,將程序執行的結果返回給客戶端。PHP、JSP、ASP等等都是比較常見的動態網頁程序。
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。 --百度百科
PHP的Zend引擎將整個PHP執行分爲兩個階段:
1.分析PHP代碼將其轉換爲Zend Opcode格式,並存儲在內存中 |
2.之後執行這些轉換後的opcode(opcode是一種將PHP腳本編譯後的中間語言,可以加快php的執行速度) |
Zend引擎執行PHP代碼的具體流程如下:
1.掃描--將PHP代碼轉換爲語言片段(Tokens) 2.分析--將Tokens轉換成簡單而有意義的表達式 3.編譯--將表達式編譯成opcode 4.執行--順次執行opcode,每次一條 |
PHP結合Apache的方式有三種:
作爲模塊:PHP作爲Apache的模塊,當有php頁面的請求時,Apache加載php模塊,加載資源並執行php程序,將執行結果返還給客戶端。
CGI方式(注:CGI是一個協議,可以實現web服務程序和解釋器通信):PHP作爲一個獨立的功能程序,當有php頁面的請求時,Apache通過CGI方式啓動一個PHP進程,PHP進程獲取資源並執行後,將執行結果返回給Apache,Apache返回給客戶端,之後Apache銷燬該進程。
FastCGI(注:FastCGI是CGI協議的一個擴展,可以實現將PHP作爲一個獨立進程,由PHP自身實現進程的創建和銷燬):PHP作爲一個獨立程序,根據配置文件事前啓動N個作業進程用來等待處理用戶請求(類似於Apache的Prefork模型,規定默認啓動進程數、最大啓動進程數、最小啓動進程數等等),當有php頁面的請求時,Apache通過代理方式使用FastCGI協議將請求發送給PHP進程,並指定php網頁文件所在位置(URL),PHP進程接收後爲其分配一個作業進程並執行腳本。FastCGI好處在於可以使PHP服務作爲一個獨立服務器,通過Socket與httpd通信,可以使服務分離,可擴展性更強,並且無需像CGI一樣需要Apache來控制PHP的啓動,提高了Apache的工作效率。