技術簡介
PHP代表:超文本預處理器(PHP: Hypertext Preprocessor)。PHP是完全免費的,不用花錢,可以從PHP官方站點自由下載。PHP遵守 GNU公共許可(GPL),在這一許可下誕生了許多流行的軟體諸如Linux和Emacs。可以不受限制的獲得源碼,甚至可以從中加進你自己需要的特色。PHP在大多數Unix平台,GUN/Linux和微軟Windows平台上均可以運行。怎樣在Windows環境的PC機器或Unix機器上安裝 PHP的資料可以在PHP官方站點上找到。安裝過程很簡單。
如果機器解決了2000問題,那么PHP也一樣沒有千年蟲問題!
先進之處
套用PHP有許多好處。當然已知的不利之處在於PHP由於是開放源碼項目,沒有什麼商業支持,並且由此而帶來的執行速度緩慢(直到PHP4之前)。但是PHP的郵件列表很是有用而且除非正在運行像Yahoo!或者Amazon這樣的極受歡迎的站點,不會感覺出PHP的速度與其他的有什麼不同。
發展歷史
PHP原始為 Personal Home Page的縮寫,現已經正式更名為 "PHP: Hypertext Preprocessor"的縮寫。注意不是“Hypertext Preprocessor”的縮寫,這種將名稱放到定義中的寫法被稱作遞歸縮寫。PHP於19
ISAPI篩選器94年由Rasmus Lerdorf創建,剛剛開始是Rasmus Lerdorf 為了要維護個人網頁而製作的一個簡單的用Perl語言編寫的程式。最初這些工具程式用來顯示 Rasmus Lerdorf 的個人履歷,以及統計網頁流量。後來又用C語言重新編寫,包括可以訪問資料庫。他將這些程式和一些表單直譯器整合起來,稱為 PHP/FI。PHP/FI 可以和資料庫連線,產生簡單的動態網頁程式。
在1995年早期以Personal Home Page Tools (PHP Tools) 開始對外發表第一個版本,Lerdorf寫了一些介紹此程式的文檔。並且發布了PHP1.0!在這早期的版本中,提供了訪客留言本、訪客計數器等簡單的功能。以後越來越多的網站使用了PHP,並且強烈要求增加一些特性。比如循環語句和數組變數等等;在新的成員加入開發行列之後,Rasmus Lerdorf 在1995年6月8日將 PHP/FI 公開發布,希望可以透過社群來加速程式開發與尋找錯誤。這個發布的版本命名為 PHP 2,已經有今日 PHP 的一些雛型,像是類似 Perl 的變數命名方式、表單處理功能、以及嵌入到 HTML 中執行的能力。程式語法上也類似 Perl,有較多的限制,不過更簡單、更有彈性。PHP/FI加入了對MySQL的支持,從此建立了PHP在動態網頁開發上的地位。到了1996年底,有15000個網站使用 PHP/FI。
在1997年,任職於 Technion IIT 公司的兩個以色列程式設計師:Zeev Suraski 和 Andi Gutmans,重寫了 PHP 的剖析器,成為 PHP 3 的基礎。而 PHP 也在這個時候改稱為PHP:Hypertext Preprocessor.[5]。經過幾個月測試,開發團隊在1997年11月發布了 PHP/FI 2。隨後就開始 PHP 3 的開放測試,最後在1998年6月正式發布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 發布後開始改寫PHP 的核心,這個在1999年發布的剖析器稱為 Zend Engine[7],他們也在以色列的 Ramat Gan 成立了 Zend Technologies 來管理 PHP 的開發。
在2000年5月22日,以Zend Engine 1.0為基礎的PHP 4正式發布,2004年7月13日則發布了PHP 5,PHP 5則使用了第二代的Zend Engine[5]。PHP包含了許多新特色,像是強化的面向對象功能、引入PDO(PHP Data Objects,一個存取資料庫的延伸函式館)、以及許多效能上的增強。至2013年PHP 4已經不會繼續更新,以鼓勵用戶轉移到PHP 5。
2008年PHP 5成為了PHP唯一的有在開發的PHP版本。將來的PHP 5.3將會加入Late static binding和一些其他的功能強化。PHP 6 的開發也正在進行中,主要的改進有移除register_globals、magic quotes 和 Safe mode的功能。
PHP最新穩定版本:5.3.21(2013.1.17)
PHP最新發布版本:5.4.11(2013.1.17)
學習過程
與Java和Perl不同,你不必把頭埋進100多頁的文檔中努力學習才可以寫出一個象樣的程式。只要了解一些基本的語法和語言特色,你就可以開始你的PHP編碼之旅了。之後你在編碼過程中如果遇到了什麼麻煩,還可以再去翻閱相關文檔。
PHP的語法與C,Perl,ASP或者JSP類似。對於那些對上述之一的語言較熟悉的人來說,PHP太簡單了。相反的,如果你對PHP了解較多,那么你對於其他幾種語言的學習都很簡單了。
只需要30分鐘就可以將PHP的核心語言特點全部掌握,可能已經非常了解HTML,甚至已經知道怎樣用編輯設計軟體或者手工來製作好看的WEB站點。由於PHP代碼能夠無障礙的添加進你的站點,在設計和維護站點的同時,可以很輕鬆的加入PHP使得你的站點更加具有動態特性。
數據連線
PHP可以編譯成具有與許多資料庫相連線的函式。PHP與MySQL是絕佳的組合。自己編寫外圍的函式取間接存取資料庫。通過這樣的途徑當你更換使用的資料庫時,可以輕鬆的更改編碼以適應這樣的變化。PHPLIB就是最常用的可以提供一般事務需要的一系列基庫。
可擴展性
就像前面說的那樣,PHP已經進入了一個高速發展的時期。對於一個非程式設計師來說為PHP擴展附加功能可能會比較難,但是對於一個PHP程式設計師來說並不困難。
面向對象
PHP提供了類和對象。基於web的編程工作非常需要面向對象編程能力。PHP支持構造器、提取類等。
可伸縮性
傳統上網頁的互動作用是通過CGI來實現的。CGI程式的伸縮性不很理想,因為它為每一個正在運行的CGI程式開一個獨立進程。解決方法就是將經常用來編寫CGI程式的語言的解釋器編譯進你的web伺服器(比如mod_perl,JSP)。PHP就可以以這種方式安裝,雖然很少有人願意這樣以CGI方式安裝它。內嵌的PHP可以具有更高的可伸縮性。
更多特點
PHP的開發者們為了更適合web編程,開發了許多外圍的流行基庫,這些庫包含了更易用的層。利用PHP連線包括Oracle,MS- Access,Mysql在內的大部分資料庫。可以在蒼蠅上畫圖,編寫程式下載或者顯示e-mail。甚至可以完成網路相關的功能。最好的是,可以選擇你的PHP安裝版本需要哪些功能。引用Nissan的Xterra的話來說就是PHP可以做到你想讓它做到的一切而且無所不能!
亂碼解決
PHP中文亂碼是軟體編程新手在進行PHP開發中的常見問題之一,中文亂碼現像有時發生在網頁本身,有些產生在於MYSQL互動的過程中,有時與作業系統有關,下面進行總結:
最好最快的解決辦法就是使頁面申明的編碼與資料庫內部編碼一致,如果頁面申請的編碼與資料庫內部的編碼不一致時,那就設定連線編碼。Mysql_query(“setnames gb2312”) 或者 Mysql_query(“setnames utf8”)。
1、 php檔案本身的編碼與網頁的編碼應匹配,如果欲使用gb2312編碼,那么php要輸出頭
header(“Content-type:text/html;charset=gb2312”)。靜態頁面添加<meta http-equiv=”Content-type”content=”text/html; charset=gb2312”>,所有檔案的編碼格式為ANSI,可用記事本打開,另外儲存為選擇編碼為ANSI,覆蓋源檔案。
2、 如果欲使用uft-8編碼,那么php要輸出頭header(“Content-type:text/html; charset=utf-8”),靜態頁面添加<meta http-equiv=”Content-type”content=”text/html; charset=utf-8”>,所有檔案的編碼格式為utf-8.保存為utf-8可能會有點麻煩,一般utf-8開頭會有BOM,如果使用 Session就會出現問題,可用editplus軟體來保存。在這個軟體中,選擇工具?參數選擇?檔案?UTF-8簽名,選擇總是刪除,再保存就可以去掉BOM信息了。
3、PHP本身不是Unicode的,所有substr之類的函式得改成mb_substr(需要裝mbstring擴展);或者用iconv轉碼。在需要做資料庫操作的PHP程式前加mysql_query(“set names 編碼”),編碼和PHP編碼一致,如果PHP編碼是gb2312那么mysql編碼也就是gb2312,如果是uft-8,那么mysql中就是utf8.這樣改過後就不會出現亂碼了。
4、header和meta之間區別。首先,header是php的內置函式,而meta是html的信息。其次,apache在給瀏覽傳遞網頁編碼內容時,如果發現php檔案使用header設定網頁顯示編碼則將不會再解析meta設定的編碼。最後,如果你寫的代碼是這樣,php檔案header(“Content-type:text/html; charset=gbk2312”),靜態頁面添加<meta http-equiv=”Content-type”content=”text/html; charset=utf-8”>,瀏覽會默認顯示為gbk2312而不是utf-8。這些規則是apache和php之間的協定。
競爭對手
ASP,mod_perl,JSP
當然不清楚ASP/JSP能做些什麼。不過明確的是編寫那樣的代碼有多簡單,購買它們會有多昂貴以及它們需要多么昂貴和強大的硬體。
JSP基於Java,因此Java程式設計師可以輕鬆開始編碼。ASP只是一個一般的引擎,具有支持多種語言的能力,不過默認的並且是最常用的還是VBScript,C#
mod_perl與Perl一樣強大,只是更快一些。
對比
.NET:4分
PHP:5分
JSP:2分
資源包括能獲取到的學習資料、開放源碼,以及各種外掛程式和庫。PHP在這方面遙遙領先,粗略看來,各種網站的知名開源產品,大都使用PHP實現,如部落格wordpress、論壇discuz、Wiki知識庫MediaWiki等。 相應的各種外掛程式、庫、開原始碼的數量和質量更是其它語言無法相比。.NET資源也比較豐富,選用.NET幸福的是有MS這么一個強大後台做有力的技術支持,CSDN 的資料不但多,質量更是上乘;JSP由於其門檻高的緣故,致使在這方面的資料也比較少。PHP學習算是基於.net和JSP之間,語法與C語言一脈相承,上手也算容易