發展曆史
PHP是“PHP:Hypertext Preprocessor”的縮寫,即“超文本預處理器”。PHP是一種簡單、輕便的服務器端腳本語言。PHP最初是作為一個快速、實用的工具包出現的。1994年,為了在自己的網站上增加一個小巧而實用的訪客追蹤系統,Rasmus Lerdorf編寫了PHP的雛形程序。這是一個用Perl封裝的簡單工具。由于使用效果并不理想,Rasmus又用C語言重寫了這個工具。
後來,更多的人注意到這個輕巧而簡便的程序,并且要求增加更多的功能。Rasmus決定發布一個完整的版本,将其命名為Personal Home Page Tools。後來,Rasmus又發布了一個名為FI的可以做SQL查詢的工具。
版本2的發展
1996年Rasmus發布了PHP/FI2.0,這是一個基本完善的PHP程序包。它不僅可以訪問數據庫,而且可以嵌入HTML頁面。此時,PHP/FI2.0以及吸引了大量的程序開發人員。在衆多程序員之中,也包括了Zeev Suraski和Andi Gutmans,他們就是後來PHP3的始作者。由于不滿足于PHP/FI在大型項目中的表現,Zeev和Andi作了重大的改進。
版本3的發展
1998年末,PHP3的第一個官方正式版本發行,其特色是具有更好的執行效果以及更清晰的結構。除此之外,PHP3的強大的功能還在于它的可擴展性。除了給最終用戶提供數據庫、協議和API的基礎結構,它的可擴展性吸引了大量的開發人員加入并提交新的模塊。
這個全新的語言伴随着一個新的名稱發布。這個名稱更具廣泛意義,而不僅局限于“個人主頁工具”的概念。它被命名為簡單的縮寫“PHP”。這是一種遞歸的縮寫,它的全稱是——PHP:Hypertext Preprocessor。
不久,Zeev Suraski和Andi Gutmans投入到了全新的PHP的開發之中。設計目标是增強程序運行性能和PHP自身代碼的模塊性。
版本4的發展
新的PHP核心被成為“Zend”(以Zeev和Andi的名字命名)引擎,于2000年5月随着新版PHp4.0發布。PHP4的性能較PHP3有着顯著的提高。相同的腳本在PHP4中運行,最高可以有近10倍的性能提升。并且Zend提供了的腳本優化器,可以把源程序轉為二進制編譯代碼,提高性能的同時,也保護了程序源碼不被暴露。
在PHP4中增加了對各種Web服務器(如Apache、IIS/PWS及OmniHTTPd等)的支持。此外,PHP4還增加了一些新的語言特性,如豐富的數組操作函數、完整的會話機制、對輸出緩存的支持等。PHP4也對一些跨平台的技術提供了擴展支持,如對AdobePDF、SWF、Java、Microsoft.NET等技術的支持。
PHP4還增加了對類于對象的支持。盡管PHP4在這方面并不完善,但還是大大改善了對面向對象程序設計的支持。PHP4中的Pear庫(PHP Extension and Application Repository)就是面向對象的應用與實踐的最好例證。
版本5的發展
盡管PHP4的發展是如此迅猛,但較之于其他流行的開發語言還是缺乏一些關鍵的功能特性,比如,PHP4中的面向對象功能并不完善,也無法實現異常(Exception)的捕捉與處理。因此在一些特殊問題的處理上還是捉襟見肘的。
2004年7月,PHP5正式版本的發布,标志着一個全新的PHP時代的到來。它的核心是第二代Zend引擎,并引入了對全新的PECL模塊的支持。PHP5的最大特點是引入了面向對象的全部機制,并且保留了向下的兼容性。程序員不必再編寫缺乏功能性的類,并且能夠以多種方法實現類的保護。另外,在對象的集成等方面也不再存在問題。使用PHP5引進了類型提示和異常處理機制,能更有效的處理和避免錯誤的發生。
在不斷更新的同時,PHP5依然保留對舊有的PHP4程序可以運行于PHP5的平台上而不會出現較大問題。随着MySQL數據庫的發展,PHP5還綁定了新的MySQLi擴展模塊,它提供了一些更加有效的方法和實用工具用于處理數據庫操作。這些方法大都以面向對象的方式實現,同時也極大地提高了基于數據庫的Web項目的執行速度。
另外,PHP5中還改進了創建動态圖片的功能,目前能夠支持多種圖片格式(如PNG、GIF、TTIF、JPGE等)。PHP5以及内置了對GD2庫的支持,因此安裝GD2庫(主要指UNIX系統中)也不再是件難事,這使得處理圖像十分簡單和高效。
大多數Web程序開發者依然将XML作為一個徹底的簡單數據庫使用。PHP5中也采用了一系列簡單易用、功能強大的方法處理XML文檔。
今天,已經有包括Yahoo.com和Amazon.com等在内的數百萬網站,以及衆多的開發人員和編程愛好者正在使用PHP。從最初的PHP/FI到現在的PHP5,PHP的發展是及其迅猛的,其未來的發展前景也必定令人矚目。
PHP5發布3年後,PHP4仍然在為各大虛拟主機提供服務,大量主機hosting上還是永遠的php4。之所以造成這種情況,有着多方面的原因。
2007年7月5日,一個PHP開發者聯盟宣布,作為共同使PHP開發者社區完全遷移到PHP的5版本的努力的一部分,一些主要的開源PHP項目從2008年2月5日起在他們即将發布的軟件中将放棄支持PHP舊的版本。
作為配合GoPHP5.org努力的一部分,Symfony, typo3, phpMyAdmin, Drupal, Propel, 和Doctrine這些項目已經都宣布2008年2月5日以後他們的下一個版本将需要PHP5.2,而且已經向其它PHP項目和應用發出了公開邀請,包括開源的和非開源的,希望他們參與到這項努力中來。
許多基于PHP的網站應用現在既有運行PHP4的,也有運行PHP5的。PHP4在2000年發布,并且迅速鞏固了作為統治性的網絡開發語言的地位。PHP5發布于2004年,它在功能上有顯著的改進,但是主要由于許多新平台發布伴随着“雞和蛋”的問題,它發展很慢。
首先PHP開發者還沒摸透在沒有php4的情況下,用php5來跑從前的應用會不會有潛在的問題。大量主機上仍然安裝的是php4,這會使用戶避免選擇php5 only的web應用程序。也是因為這個原因,大量主機商還不能馬上升級到php5,因為他們不知道用戶将要跑php4或是php5的web應用。這樣一來,php的開發者越發不能擺脫php4,他們為了适應環境,寫出來的代碼可能都是php4/php5兼容的。
這對php開發者來說,是如同夢魇一般的一個死循環。一些open source的php開發團體為了擺脫這個困境,終于決定做出一些動作來打破僵局了!!他們在2008年2月份以後發布程序将僅僅官方的支持php5.2.0以後的版本(官方的支持意味着某些程序還是能保持php4的兼容性的,但是不承諾)!!這個活動被稱之為GoPHP5!!這些php開發團體已知的名單如下:
Drupal
Joomla
CakePHP
Symfony
Gallery
WordPress
自從推辦goPHP5,已經有超過100個軟件開發項目和超過200個網絡主機支援PHP5.2。相對從前,現在可以輕松地找到托管解決方案,軟件開發商亦可以使用PHP5具吸引力的新功能,而不需要擔心他們的用戶别無選項。
對于用戶來說,使用php4或者php5無關緊要,他需要的僅僅是他的程序可以run。那麼列表中擁有大量用戶基礎的php程序的轉向,将會是驅動主機商升級到php5的極大動力。
特點
PHP有着簡單易用和功能強大的特點,這完全要歸功于其開放的模塊化設計。在基于Zend引擎的支持和優化下,各種各樣的擴展模塊,其功能已經覆蓋幾乎所有的Web應用。
字符串與數組處理
字符串和數組是所有計算機編程語言中最基本的數據結構。在各種語言中,對這兩種數據結構的支持是完善的,PHP也是如此。作為一種面向Web開發的程序語言,PHP也有着自己的獨特性。
URL的處理:利用URL函數庫,PHP可以用簡單的方法對URL地址進行解碼或編碼。而在此之前,需要編寫一組代碼加以實現。
單詞拼寫的處理:利用單詞拼寫檢查庫PSpell,PHP可以想Word中的“單詞拼寫檢查”一樣,對文本中的錯誤拼寫進行指正。盡管這不常用,但對于某些場合(如輔助編輯進行校勘),這種處理是非常有益的。
正則表達式:正則表達式是一種強大的字符串分析工具。正則表達式早期僅用于UNIX系統程序,現在已經被絕大多數系統,程序所支持。随着正則表達式移植到交叉平台的程序語言的發展,其功能也日益完善。
數據的串行化:使用serialize()及unserialize()等函數,可以将數組、對象等數據進行序列化編碼,從而方便其在數據庫或會話周期中的存儲。另外,利用WDDX(Web分布式數據格式)串行化數據,可以在應用環境中交換更為複雜的數據結構。
目錄與文件的操作
文件系統是操作系統的主要組成部分,是數據存儲的基本單元。利用目錄和文件函數,PHP可以對本地文件系統進行直接操作,如對文件或目錄進行的創建、删除和讀取操作,也可以對其所有者權限、組别等信息進行查詢和變更操作。
當激活了php.ini文件中的“allow_url_fopen”選項後,利用簡單的fopen()或fwrite()等函數就可以對遠程文件進行操作。例如:程序可以讀取或下載遠程Web服務器的文件;對于具有适當權限的用戶,還可以登錄遠程FTP服務器進行數據的保存或下載操作,甚至可以使用syslog()函數進行分布式日志的管理和維護。
對不同類型文件的支持
PHP不僅僅局限于HTML和文本文件的處理,也可以符合特定格式的文件進行快速處理。例如對于CVS(逗号分隔文件)、INI(Windows配置文件)以及XML文件,PHP中都有專用的解析函數。除了上述文本文件,PHP還提供可以讀取ZIP文件的zlib壓縮文件庫。
PHP能夠非常簡便的輸出文本,如XHTML以及任何其他形式的XML文件。PHP還能動态的輸出圖像(GD2庫)、PDF文件(pdflib庫)甚至Flash動畫(LibSWF和Ming庫)。在Windows系統中,PHP能夠在服務器端開辟出一塊動态的緩存空間,從而直接打印這些文件(使用Printer擴展)。
簡便的數據庫操作
PHP最顯著的特征之一,是它支持很大範圍的數據庫系統。用戶會發現,利用PHP編寫基于數據庫支持的動态網頁簡單得難以置信。目前,PHP支持如表1-1所示的數據庫系統。
對各種協議的支持
通常,用戶在編程過程中還會涉及到各種不同接口之間的通信問題,如打開文件并讀取,或者建立一個套接字(Socket)連接發送數據。這些過程都是基于各種通信協議完成的。所謂通信協議,實際就是系統間發送和接受數據時所遵循的特定方法。
PHP支持諸如FTP、LDAP、IMAP、NNTP、POP3、HTTP、COM(Windows環境)等大量的通信協議。PHP還可以開放原始網絡端口,使得任何其他的協議能夠協同工作。PHP支持和所有Web開發語言之間的WDDX複雜數據交換。目前,PHP已經支持了對Java對象的使用,并且可以将它們自由的用作PHP對象。
發展趨勢
PHP作為最成熟的開源體系LAMP(Linux,Apache,MySQL,PHP)的重要一員,以其簡單性、開放性、低成本、安全性和适用性,受到越來越多的Web程序員的歡迎和喜愛。
PHP中提供了作為編碼語言所有的基本功能。此外,它還提供許多實用的功能,使得PHP比其他編程語言更适合動态網頁的開發。針對企業級Web應用,PHP也不斷地完善和增加新的功能。
PHP是源碼開放的,這意味着其代碼的核心部分可以被免費使用。所有源碼、文檔可以在PHP官方網站www.php.net上獲得。用戶可以自由複制、編譯、分發其拷貝。任何一個用PHP編寫的程序都屬于用戶自己,并且可以自行處理。
正式由于這種開源精神,才使PHP社區可以聚集衆多的愛好者,也使得PHP有如此迅猛的發展。PHP的更新速度,以及發現和修正錯誤的速度是非常迅速的。可以看到,幾乎每周都有一個新版本的PHP程序包發布。
目前,PHP的官方維護者和推動者Zend公司已經加快了PHP企業級應用的步伐。随着PHP5的應用不斷擴大,Zend公司還将推出一個标準的PHP開發框架Zend Framework。通過這一框架,PHP開發者可以快速地構建Web應用。
如同ASP具有Windows自己的開發平台一樣,Zend也為PHP設計了全新的開發環境Zend Studio。這是一款集程序調試、系統發布以及開發環境為一體的PHP開發軟件。這将大大簡化PHP開發過程,并且縮短相應的測試周期。另外,Zend還将與IBM公司合作推出集成Zend IDE特性的Eclipse軟件供大家使用。
PHP還具有優秀的平台兼容性。PHP源于UNIX系統平台,尤其是PHP、MySQL、Apache和Linux組合,備受PHP愛好者的歡迎。不僅如此,PHP在Windows系列操作系統上也有出色的表現。其良好的程序界面、語言易用性等特點吸引了微軟的開發人員。目前,有消息稱未來的Windows.NET開發環境将集成PHP,這也意味着PHP的用戶群将日益壯大。
PHP是廣泛及通用的腳本語言,它尤其适合于Web開發。PHP是世界上主要的網絡開發語言之一,運行在世界三分之一的服務器上。它是從Yahoo到Facebook等公司的平台選擇,也是共享主機上最廣泛的開發平台,為世界上數百萬的網站提供動力。
随着PHP5版本性能的提升,以及面向對象功能的完善,PHP也逐漸開始于面向企業級應用。PHP的發展前景将無限廣闊。