官术网_书友最值得收藏!

第1章 PHP快速入門

1.1 初識PHP

圖1-1、圖1-2、圖1-3是一個正在建設中的B2B電子商務網站圖示。該網站會員可以發表各種供求信息、商務合作信息、疑難采購信息、上傳各種資質證書等多種商務功能,并能訂閱、收藏、搜索其他會員發表的相關供求信息,并根據會員不同等級來實現一些信息的查看權限、功能使用權限等,是一個功能強大的電子商務網站。這個網站是如何設計出來的呢?開發者經過綜合各種開發工具對比,最后選用了PHP作為開發工具。那么什么是PHP,PHP比其他開發工具又有哪些優勢呢?

圖1-1 一個設計中的B2B網站

圖1-2 該B2B網站的目錄頁

圖1-3 該B2B網站的會員功能頁

PHP,是英文超級文本預處理語言(Hypertext Preprocessor)的縮寫。它是一種嵌入在HTML代碼中,并由服務器解釋運行的腳本語言,服務器可以將PHP腳本程序代碼解釋成標準的HTML代碼,在客戶端的瀏覽器中顯示。它可以用于管理動態內容、支持數據庫、處理會話跟蹤,甚至構建整個電子商務站點。它支持許多流行的數據庫,包括MySQL、PostgreSQL、Oracle、Sybase、Informix和Microsoft SQL Server等。

總體來說,PHP非常適合Web上的工作,但它并不是唯一的開發工具;如Perl、Java、JavaScript、ASP、Python、CGI以及其他許多開發工具都可以生成動態的內容。PHP的優點是專為基于Web的問題而設計及開放源碼,內嵌了許多使用方便的強大功能。隨著對PHP的了解越來越深入,就越會體會到它的方便和強大。

作為開放源碼的語言,PHP是隨著越來越多的人意識到它的實用性從而逐漸發展起來的。Rasmus Lerdorf在1994年發布了PHP的第一個版本,從那時起,它就飛速發展,并在原始發行版上經過無數的改進和完善,現在已經發展到版本5。PHP版本6也已經在開發中。

PHP是一種嵌入式HTML腳本語言,它的大多數語法來源于C,也有一部分PHP特性借鑒于Java和Perl,因此PHP獨特的語法混合了C、Java、Perl以及PHP自創新的語法,這可以讓Web開發人員能夠快速高效地寫出動態生成的頁面,它比CGI或者Perl更快速的執行動態網頁。

與同樣是嵌入HTML文檔的腳本語言JavaScript相比,PHP在服務器端執行,充分利用了服務器的性能;PHP執行引擎還會將用戶經常訪問的PHP程序駐留在內存中,其他用戶再一次訪問這個程序時就不需要重新編譯程序了,只要直接執行內存中的代碼就可以了,這也是PHP高效率的體現之一。PHP具有非常強大的功能,所有的CGI或者JavaScript的功能PHP都能實現。

以上是一個簡單的回答,不過對于初學者來說可能不是非常清楚它的意思,請看如下例子。

下面用Hello,World!例程來做一個介紹性的示范。

        <html>
        <head>
              <title>Example</title>
          </head>
          <body>
              <?php
              echo "Hello,World!";
              ?>
          </body>
        </html>

這個例程會在瀏覽器上輸出:Hello,World! 這樣一行文本。

1.1.1 PHP的起源

PHP并沒有經歷多長時間的發展,但是到現在它卻成了一種非常先進、流行的技術,下面是PHP的簡要發展歷程。

1994年,Rasmus Lerdorf首次設計出了PHP程序設計語言。PHP繼承自一個老的工程,名叫PHP/FI。PHP/FI是一個專為個人主頁/表單提供解釋程序的程序,已經包含了今天PHP的一些基本功能。它有著Perl樣式的變量,自動解釋表單變量,并可以嵌入HTML。語法本身與Perl很相似,但是它很有限,很簡單,還稍微有些不協調,最初只是一套簡單的Perl版本,用來統計他自己網站的訪問者。Rasmus Lerdorf給這一套腳本取名為Personal Home Page Tools,簡稱即為PHP。后來又用C語言重新編寫,包括可以訪問數據庫,可以讓用戶開發簡單的動態Web程序。Rasmus Lerdorf發布了PHP/FI的源代碼,以便每個人都可以使用它,同時大家也可以修正它的Bug并且改進這些源代碼。

1995年6月,Rasmus Lerdorf在Usenet新聞組上發布了PHP 1.0聲明,對外發表PHP的第一個版本。

1996年4月,Rasmus Lerdorf在Usenet新聞組上發布了PHP第二版聲明。相比PHP 1單純的標簽置換代碼,PHP第二版含有了可以處理更復雜的嵌入式標簽語言的解析程序。到了1996年底,有15000個網站使用PHP/FI。但是那時只有幾個人在為該工程撰寫少量代碼,它仍然只是一個人的工程。

1997年,Tel Aviv公司的Zeev Suraski和Andi Gutmans自愿重新編寫了底層的解析引擎,其他很多人也自愿加入了PHP的其他部分而工作,從此PHP成為了真正意義上的開源項目。

PHP/FI 2.0在經歷了數個beta版本的發布后于1997年11月發布了官方正式版本。不久,隨著PHP 3.0的第一個alpha版本的發布,PHP從此走向了成功。

PHP 3.0使用了新的名稱,它從PHP/FI 2.0的名稱中移去了暗含“本語言只限于個人使用”的部分,被命名為簡單的縮寫“PHP”,它的全稱是——Hypertext Preprocessor,約9個月的公開測試后,官方于1998年6月正式發布PHP 3.0。發布以后,它的用戶數量才真正開始了飛漲。

PHP 3.0是類似于當今PHP語法結構的第一個版本。Andi Gutmans和Zeev Suraski在為一所大學的項目中開發電子商務程序時發現PHP/FI 2.0功能明顯不足,于是他們重寫了代碼,這就是PHP 3.0。經過Andi,Rasmus和Zeev一系列的努力,考慮到PHP/FI已存在的用戶群,他們決定聯合發布PHP 3.0作為PHP/FI 2.0的官方后繼版本。

PHP 3.0的一個最強大的功能是它的可擴展性。除了給最終用戶提供數據庫、協議和API的基礎結構,它的可擴展性還吸引了大量的開發人員加入并提交新的模塊。后來證實,這是PHP 3.0取得巨大成功的關鍵。PHP 3.0中的其他關鍵功能包括面向對象的支持以及更強大、協調的語法結構。

PHP 3.0跟Apache服務器緊密結合的特性,加上它不斷的更新及加入新的功能;而且支持幾乎所有的主流與非主流數據庫,以及它高速的執行效率,1998年末,PHP的安裝人數就已上萬,有大約10萬個網站報告他們使用了PHP,到1999年中使用站點就躍升到了15萬個。加上它的源代碼完全公開,在Open Source意識抬頭的今天,它更是這方面的中流砥柱。它提供了豐富的函數,使得在程序設計方面有著更好的支持,并不斷地有新的函數庫加入,以及其他方面不停更新的活力,使得PHP無論在UNIX、Linux或是Windows的平臺上都可以有更多新的功能。在PHP 3.0的頂峰,Internet上約有10%的Web服務器上都在使用它。

PHP 3.0官方發布不久,Andi Gutmans和Zeev Suraski就開始重新編寫PHP引擎代碼。這次的設計目標是增強復雜程序運行時的性能和PHP自身代碼的模塊性。PHP 3.0的新功能和廣泛的第三方數據庫、API的支持使得這樣程序的編寫成為可能,但是PHP 3.0并沒有高效處理復雜程序的能力。

新的引擎被稱為“Zend Engine”(這是Zeev和Andi的縮寫),在成功實現設計目標后,于1999年首次引入PHP。基于該引擎并結合了更多新功能的官方正式版本PHP 4.0于PHP 3.0發布兩年后的2000年5月22日發布,除了更高的性能以外,PHP 4.0還包含了其他一些關鍵功能,比如:支持更多的Web服務器、HTTP Sessions支持、輸出緩存(output buffering)、更安全的處理用戶輸入的方法和一些新的語言結構。該版本的開發是由希望對PHP的體系結構做一些基本改變的開發者推動的,這些改變包括將語言和Web服務器之間的層次抽象化,并且加入了線程安全機制,加入了更先進的兩階段解析與執行標簽解析系統。

PHP 4.0是當前PHP的比較有影響的成熟版本,它是如此的成功,以至于現在仍有許多網站運行在PHP4平臺上,大量可供下載的PHP網站源代碼亦仍然是基于PHP 4.0編寫的,盡管PHP4的發展是如此迅猛,但較之于其他流行的開發語言還是缺乏一些關鍵的功能特性,比如,PHP4中的面向對象功能并不完善,也無法實現異常(Exception)的捕捉與處理,因此在一些特殊問題的處理上還是捉襟見肘的。

2004年7月13日,使用了全新第二代Zend引擎的PHP 5.0發布,標志著一個全新的PHP時代的到來。這個版本引入了對全新的PECL模塊的支持,最大特點是引入了面向對象的全部機制,并且保留了向下的兼容性,有的PHP4程序可以運行于PHP5的平臺上而不會出現較大問題。程序員不必再編寫缺乏功能性的類,并且能夠以多種方法實現類的保護。另外,在對象的集成等方面也不再存在問題,PHP5引進了類型提示和異常處理機制,能更有效地處理和避免錯誤的發生。

隨著數據庫的發展,PHP5還綁定了新的MySQLi擴展模塊,它提供了一些更加有效的方法和實用工具用于處理數據庫操作,還提供了數據庫引擎SQLite擴展,直接用這個擴展就可以創建和使用SQLite數據庫。PHP5添加了面向對象的PDO模塊,提供了另外一種數據庫操作的方案,統一了數據庫操作的API。PHP5這些方法大都以面向對象的方式實現,同時也極大地提高了基于數據庫的Web項目的執行速度。

另外,PHP5中還改進了創建動態圖片的功能,目前能夠支持多種圖片格式(如PNG、GIF、TTIF、JPGE等),內置了對GD2庫的支持,因此安裝GD2庫(主要指UNIX系統中)也不再是件難事,這使得處理圖像十分簡單和高效。

大多數Web程序開發者依然將XML作為一個簡單數據庫使用,PHP5中也采用了一系列簡單易用、功能強大的方法處理XML文檔。

PHP5.2.0增加了JSON函數,更好的支持ajax。

今天,已經有包括Yahoo.com和Amazon.com等在內的數百萬網站,以及眾多的開發人員和編程愛好者正在使用PHP。從最初的PHP/FI到現在的PHP5,PHP的發展是及其迅猛的,其未來的發展前景也必定令人矚目。

TIOBE世界編程語言排行榜展現了編程語言的流行趨勢,每個月都有最新的數據被更新,這份排行榜的數據取樣來源于互聯網上富有經驗的程序員、商業應用、著名的搜索引擎(諸如谷歌、MSN、雅虎)的關鍵字排名、Alexa上的排名等,其官方網站為www.tiobe.com/index.php/content/paperinfo/tpci/index.html,從其排名中可以發現,PHP已經長時間穩居該排行榜第3名。表1-1是其最新發布的2010年1月份前20名排名情況。

表1-1 TIOBE世界編程語言排行榜(2010年1月份)

1.1.2 PHP的特性

PHP的特性包括。

開放源代碼:所有的PHP源代碼都可以免費得到。

經濟:PHP是免費的。

便捷性:PHP十分便捷,學習簡單,易上手。

服務器端支持:跨平臺,性能優越,可以運行在UNIX、Linux、Windows等各種操作系統下。

嵌入HTML:因為PHP可以嵌入HTML語言,所以學習起來并不困難。

語法簡單:PHP堅持腳本語言為主,與Java和C++不同,如果有C語言的經驗,很容易上手。

效率高:PHP消耗相當少的系統資源。

圖像處理:用PHP可以方便的動態創建多種格式的圖像。

面向對像:在PHP4、PHP5中,面向對象方面都有了很大的改進,現在PHP完全可以用來開發大型商業程序。

1.1.3 PHP與ASP、JSP的比較

目前的Web應用開發上,ASP、PHP和JSP是三種最流行的腳本語言,那么他們之間有什么區別,怎么選擇一個合適的腳本語言工具呢?下面我們將三者之間做一個比較。

1. ASP

ASP是微軟(Microsoft)所開發的一種后臺腳本語言,它的語法和Visual BASIC類似,可以像SSI(Server Side Include)那樣把后臺腳本代碼內嵌到HTML頁面中。雖然ASP簡單易用,但是它自身存在著許多缺陷,如上傳文件功能的實現比較復雜等,最重要的則是其安全性問題,曾經多次爆出安全漏洞。目前在微軟的.net戰略中新推出的ASP.net借鑒了Java技術的優點,使用C# (C Sharp)語言作為ASP.net的推薦語言,同時改進了以前ASP的安全性差等缺點。但是,使用ASP/ASP.net仍有一定的局限性,因為從某種角度來說它們只能在微軟的Windows NT/2000/XP + IIS的服務器平臺上良好運行(雖然像ChilliSoft提供了在UNIX/Linux上運行ASP的解決方案,但是目前ASP在UNIX/Linux上的應用仍幾乎為零),所以平臺的局限性和ASP自身的安全性限制了ASP的廣泛應用。

ASP在執行的時候,是由IIS調用程序引擎,解釋執行嵌在HTML中的ASP代碼,最終將結果和原來的HTML一同送往客戶端。

ASP簡單易上手,通常使用ODBC連接數據庫,只能運行在微軟的IIS環境中。

2. PHP

PHP是一種HTML內嵌式的語言(就像上面講的ASP那樣),而PHP獨特的語法混合了C、Java、Perl以及PHP式的新語法,它可以比CGI或者Perl更快速地執行動態網頁。

PHP的源代碼完全公開,在Open Source意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數庫加入,以及不停地更新,使得PHP無論在UNIX或是Win32的平臺上都可以有更多新的功能。它提供豐富的函數,使得在程序設計方面有著更好的資源,它可以在Windows以及UNIX/Linux等幾乎所有的平臺上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比較傳統CGI或者ASP等技術有了更好的表現。

平臺無關性是PHP的最大優點,但是在優點的背后,還是有一些小小的缺點。在PHP的早期版本中如果不使用ODBC,而用其自帶的數據庫函數(這樣的效率要比使用ODBC高)來連接數據庫的話,使用不同的數據庫,PHP的函數名不能統一,這樣,使得程序在不同數據庫環境中的移植變得有些麻煩。然而從它的版本5開始引入了PDO類,提供了使用相同方法來連接、調用各種數據庫的功能。作為目前應用最為廣泛的一種后臺語言,PHP的優點還是異常明顯的。

3. JSP

JSP和Servlet要放在一起介紹,是因為它們都是Sun公司的J2EE(Java 2 platform Enterprise Edition)應用體系中的一部分。

Servlet的形式和前面講的CGI差不多,它是HTML代碼和后臺程序分開的。它們的啟動原理也差不多,都是服務器接到客戶端的請求后,進行應答。不同的是,CGI對每個客戶請求都打開一個進程(Process),而Servlet卻在響應第一個請求的時候被載入,一旦Servlet被載入,便處于已執行狀態。對于以后其他用戶的請求,它并不打開進程,而是打開一個線程(Thread),將結果發送給客戶。由于線程與線程之間可以通過生成自己的父線程(Parent Thread)來實現資源共享,這樣就減輕了服務器的負擔,所以,Java Servlet可以用來做大規模的應用服務。

雖然在形式上JSP和ASP或PHP看上去很相似——都可以被內嵌在HTML代碼中。但是,它的執行方式和ASP或PHP完全不同。在JSP被執行的時候,JSP文件被JSP解釋器(JSP Parser)轉換成Servlet代碼,然后Servlet代碼被Java編譯器編譯成.class字節文件,這樣就由生成的Servlet來對客戶端應答。所以,JSP可以看做是Servlet的腳本語言(Script Language)版。

由于JSP/Servlet都是基于Java的,所以它們也有Java語言的最大優點——平臺無關性,也就是所謂的“一次編寫,隨處運行(WORA - Write Once, Run Anywhere)”。除了這個優點,JSP/Servlet的效率以及安全性也是相當驚人的。因此,JSP/Servlet雖然在國內目前的應用并不廣泛,但是其前途不可限量。

在調試JSP代碼時,如果程序出錯,JSP服務器會返回出錯信息,并在瀏覽器中顯示。這時,由于JSP是先被轉換成Servlet后再運行的,所以,瀏覽器中所顯示的代碼出錯的行數并不是JSP源代碼的行數,而是指轉換后的Servlet程序代碼的行數。這給調試代碼帶來一定困難。所以,在排除錯誤時,可以采取分段排除的方法(在可能出錯的代碼前后輸出一些字符串,用字符串是否被輸出來確定代碼段從哪里開始出錯),逐步縮小出錯代碼段的范圍,最終確定錯誤代碼的位置。

4. ASP、PHP和JSP比較

下面表1-2將對三者之間做一個比較。

表1-2 ASP、PHP和JSP比較

主站蜘蛛池模板: 香港| 绥芬河市| 台山市| 沙河市| 凤城市| 朝阳县| 灌南县| 拜泉县| 西平县| 汶上县| 长治县| 班玛县| 汝州市| 临漳县| 韶关市| 雅江县| 青岛市| 和田市| 万安县| 东宁县| 新化县| 苗栗市| 菏泽市| 旺苍县| 陇西县| 克山县| 讷河市| 汪清县| 教育| 东港市| 遂平县| 大埔县| 宁河县| 文成县| 邢台市| 德昌县| 湖南省| 米泉市| 常德市| 汝阳县| 盱眙县|