PHP簡介php
PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸取了C語言、Java和Perl的特色,利於學習,使用普遍,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它能夠比CGI或者Perl更快速地執行動態網頁。用PHP作出的動態頁面與其餘的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比徹底生成HTML標記的CGI要高許多;PHP還能夠執行編譯後代碼,編譯能夠達到加密和優化代碼運行,使代碼運行更快。程序員
PHP是通用服務器端腳本編程語言,其主要用於web開發以實現動態web頁面,它也是最先實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,所以,其也能夠在大多數系統上做爲一個獨立的shell來使用。Rasmus Lerdorf於1994年開始開發PHP,它是初是一組被Rasmus Lerdorf稱做「Personal Home Page Tool」的Perl腳本,這些腳本能夠用於顯示做者的簡歷並記錄用戶對其網站的訪問。後來,Rasmus Lerdorf使用C語言將這些Perl腳本重寫爲CGI程序,還爲其增長了運行Web forms的能力以及與數據庫交互的特性,並將其重命名爲「Personal Home Page/Forms Interpreter」或「PHP/FI」。此時,PHP/FI已經能夠用於開發簡單的動態web程序了,這便是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP發佈於comp.infosystems.www.authoring.cgi Usenet討論組,今後PHP開始走進人們的視野。1997年,其2.0版本發佈。web
1997年,兩名以色列程序員Zeev Suraski和Andi Gutmans重寫的PHP的分析器(parser)成爲PHP發展到3.0的基礎,並且今後將PHP重命名爲PHP: Hypertext Preprocessor。此後,這兩名程序員開始重寫整個PHP核心,並獨立出來於1999年發佈了Zend Engine 1.0,這也意味着PHP 4.0的誕生。2004年7月,Zend Engine 2.0發佈,由此也將PHP帶入了PHP5時代。PHP5包含了許多重要的新特性,如加強的面向對象編程的支持、支持PDO(PHP Data Objects)擴展機制以及一系列對PHP性能的改進。shell
PHP Zend Engine數據庫
Zend Engine是開源的、PHP腳本語言的解釋器,它最先是由以色列理工學院(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人名字的合稱。後來兩人聯合創立了Zend Technologies公司。apache
Zend Engine 1.0於1999年隨PHP 4發佈,由C語言開發且通過高度優化,並可以作爲PHP的後端模塊使用。Zend Engine爲PHP提供了內存和資源管理的功能以及其它的一些標準服務,其高性能、可靠性和可擴展性在促進PHP成爲一種流行的語言方面發揮了重要做用。編程
Zend Engine的出現將PHP代碼的處理過程分紅了兩個階段:後端
PHP剛開始用戶訪問都是直接由解釋器解釋,加入zend以後就成了用戶訪問時要先編譯在執行二進制格式結果是第一次訪問要編譯而第二次直接訪問二進制速度提高。首先是分析PHP代碼並將其轉換爲稱做Zend opcode的二進制格式(相似Java的字節碼)並將其存儲於內存中;第二階段是使用Zend Engine去執行這些轉換後的Opcode(Opcode只能在Zend引擎當中運行)。api
PHP架構圖服務器
SAPI提供了一個和外部通訊的接口,使得PHP能夠和其餘應用進行交互數據。php默認提供了不少種SAPI,常見的給apache的mod_php5,CGI,給IIS的ISAPI,還有Shell的CLI。對於一個基於apache的php應用,其運行流程能夠簡單歸結以下:
apache -> httpd -> mod_phpfastcgi -> sapi -> php
PHP的Opcode
Opcode是一種PHP腳本編譯後的中間語言,就像Java的ByteCode,或者.NET的MSL。當解釋器完成對腳本代碼的分析後,便將它們生成能夠直接運行的中間代碼,也稱爲操做碼(Operate Code,opcode)。Opcode cache的目地是避免重複編譯,減小CPU和內存開銷。若是動態內容的性能瓶頸不在於CPU和內存,而在於I/O操做,好比數據庫查詢帶來的磁盤I/O開銷,那麼opcode cache的性能提高是很是有限的。可是既然opcode cache能帶來CPU和內存開銷的下降,這總歸是好事。
PHP執行PHP腳本代碼通常會通過以下4個步驟(確切的來講,應該是PHP的語言引擎Zend):
Scanning(Lexing) ——將PHP代碼轉換爲語言片斷(Tokens) Parsing ——————將Tokens轉換成簡單而有意義的表達式 Compilation ———將表達式編譯成Opocdes Execution ————順次執行Opcodes,每次一條,從而實現PHP腳本的功能