選擇PHP構建網站

當建設一個網站的時候,絕大多數時候不僅需要它能夠提供靜態網頁訪問能力,還希望它能和瀏覽器用戶交互、訪問后台數據庫提供實時更新的信息等等,一句話,要提供動態網頁服務能力。這時,你是選擇傳統方式的CGI呢,還是選擇PHPASP等服務器端腳本呢?

一、從CGI到服務器端腳本

創建動態網頁的標准方式是CGI,這種方式允許Web服務器運行一個CGI程序來回應瀏覽器的請求。而除了要遵從簡單的CGI標准之外,CGI程序的開發與普通程序開發沒有什么區別。簡單的說,CGI標准可以歸結為三條:

  1. CGI程序從標准輸入和環境變量中取得瀏覽器請求及相關設置。
  2. CGI程序通過標准輸出向瀏覽器發回文檔結果。
  3. CGI程序在輸出文檔之前必須發送文檔的相關信息,其中至少包括文檔的MIME類型。

一些傳統程序員出身的Web開發者喜歡使用CGI及其擴展,例如FastCGImod_perl等,來建設網站。因為這種方式下,程序結構相當清晰,程序員可以用自己的方式來安排代碼,輸出不同的HTML文檔。然而,隨著要生成的動態網頁的數量和復雜程度的增加,這種方式就遇到了困難。

CGI程序包括兩個主要內容,一個是程序代碼,另一個是要輸出的HTML文檔內容,可以稱作HTML代碼。最早的Web開發者,既是程序員,又是網頁設計者,但是那時頁面都比較簡單,開發者最關心的是程序代碼的問題,頁面代碼基本上不需要太多的調整。而隨著包括DHTMLJavascript在內的技朮發展,使得頁面可以設計的非常復雜。這樣,每進行一次頁面代碼的調整,CGI程序就需要改動,以至于最后在CGI程序中調試HTML代碼的工作量超過了調試程序代碼的工作量。事實上,這說明在Web開發中,HTML代碼的重要性已經十分明顯,使得傳統的以程序代碼為中心的CGI程序不再是最適合的動態網頁處理方式了。

這樣,相當多的程序員對于這種調整HTML代碼的工作感到厭倦,尤其隨著Internet的商業化,編寫CGI程序和進行HTML頁面設計已經成為了兩種不同的職業。為了解決這個問題,程序員使用了模板文件的方法將程序代碼和HTML代碼分開。CGI程序讀取模板文件來獲得HTML代碼,從而使得在對頁面進行較小調整的時候,不需要改動CGI程序。

基本上每個程序員在自己的CGI程序中使用自定義的模板,然而,如果有一種通用的HTML模板,使用通用的程序進行預處理,這樣不就大大減少了程序設計的工作量嗎?最簡單的模板可以通過替換模板中預定義的變量來完成解釋工作,這種程序簡單而有效,因此就被集成在Web服務器中,以提供比CGI程序更高的效率,這就是最早的服務器端腳本。

這些早期的服務器端腳本,例如出現在ncsa httpdSSI,只包括變量的概念,但沒有控制語句的概念。后來,不同的程序開發者重新開發了支持控制語句,甚至支持子程序的腳本解釋處理程序,使得這些程序不再是為了特定的動態網頁服務,而是能夠進行編程,使得它能夠完成CGI程序能完成的所有工作,成為了一種新的編程語言。同樣是由于性能的緣故,這些程序被合并入Web服務器本身,使得服務器端腳本成為Web開發的一種新形式。

二、PHP介紹

當前,服務器端腳本已經是開發動態網頁的常用方式,雖然CGI仍然具備靈活的優勢,但在一般情況下,使用服務器端腳本更容易和方便。然而,與CGI不同的是,服務器端腳本沒有一個統一的標准,不同的服務器端腳本使用自己的語法。當前比較常用的有:Active Server PagesASP),ColdFusionJava ServletsPersonal Home PagePHP)等。這些技朮中,既包括有大公司支持的軟件,如ASP,也包括通過Internet進行合作開發的開放源代碼軟件,如PHP

PHP正是這樣一種服務器端腳本語言,它最開始是由Rasums Lerdorf編寫的,只是一個簡單的用Perl語言編寫的CGI程序,用于記錄訪問他自己的網頁的訪問者。以后它又被用C語言重新寫過,范圍擴大到訪問數據庫。在這期間,有許多人向Rasums Lerdorf要此程序的拷貝,以便自己使用,Rasums Lerdorf為此寫了一些介紹此程序的文檔,并發布了PHP v1.0。以后,越來越多的人使用PHP,并強烈要求增加一些其他的特性,如循環語句和數組變量等,這時其他的一些程序員也開始參與PHP源碼的編寫。PHP進行了重新編寫,PHP v3.0就出現了。當前,使用PHP的網站已經超過80萬,并且還在不斷的增加。

除了向瀏覽器發送動態網頁之外,PHP還能發送不同HTTP頭標識,使得能提供網頁重定位、與Web服務器的安全認証結合的能力、以及設置CookiePHP能提供與多種數據庫直接互聯的能力,包括MySQLSybaseInformixOracleMsSQL等,也能支持ODBC。并通過額外的庫能夠支持會話管理和XML處理(這些庫都是基本的庫,因此也是PHP用戶的基本配置)。從這里我們可以看出,PHP已經不再是簡單的服務器端腳本了,按照《PHP3瀏覽器應用編程》的作者David Medinets的話,PHP是一種應用服務器。因為它不僅僅包括一個完整的編程語言,而且它還包括完整的訪問數據庫的能力、支持Internet協議(如電子郵件和HTTP)的能力,這一整套技朮使得PHP能與ASPColdFusionWebSphere互較短長。

要運行PHP,通常使用LinuxFreeBSD作為操作系統,使用Apache作為Web服務器。當然使用其他操作系統也同樣可行,這是因為PHP是一種跨平台的軟件,這當然得益于它是開放源代碼的軟件。但是如果不使用Apache服務器,那么PHP就只能以CGI的方式運行,這樣就不能利用將PHP編譯進Apache帶來的性能優勢。當從www.php.net中下載了最新版本的PHP并安裝配置完畢之后,就可以使用編輯器或網頁制作軟件來編寫PHP代碼了。如果你能使用CPerl進行編程,就會發現PHP編程并不復雜,作為程序語言的PHPC簡單,比Perl易懂。下面是一個最簡單的嵌入PHP程序的頁面。

<HTML>

<HEAD><TITLE>Test</TITLE></HEAD>

<BODY>

<?PHP $string = 'world!'; ?>

<H1>Hello,<?php echo $string ?></H1>

</BODY>

</HTML>

HTML網頁中嵌入的PHP代碼,需要以<?php標記開始,以便讓PHP知道程序代碼開始,而要以?>標記結束。上面這個頁面將顯示Hello,world!的結果。這里可以看出,PHP程序語法與CPerl非常類似。事實上,PHP來源于CPerl,支持CPerl大部分語法和操作符,因此使用PHPCPerl程序員都是非常簡單的事情。

三、選擇PHP的原因

雖然PHP已經十分流行,但在國內了解它的人卻很少,這當然是因為它不是商業軟件,缺乏市場運作。即使在聽說過PHP的人們中,不少人也抱有這樣的看法,PHP既沒有商業公司的支持,又缺乏商業的圖形化開發工具,PHP能夠和ASP等商業軟件一樣有前途嗎?的確,ASP由于有微軟公司的支持,使得它迅速變得十分流行,現在書店中充斥著ASP的相關書籍,而很少能找到介紹PHP的著作,正說明了國內的這種流行趨勢。然而,過去一年中整個互聯網中PHP使用者穩步增長的事實,卻與這些觀點截然相反。我認為那些不看重PHP的人至少忽略了以下几個原因:

  1. PHP已經証明是非常實用的軟件,性能、可靠性、穩定性非常高,借一個來自武俠小說的比喻,PHP就如同來自江湖下層一步步成名的草莽英雄,而商業軟件則如同出身高貴的少年俠士,其成名的原因與其師傅和門派密切相關。PHP具備各種數據類型并支持復雜的文本處理,它甚至支持面向對象,能配置為處理XML等等,更為重要的是PHP的這些功能都是非常實用的,要知道PHP的開發者都是根據自己的需要自愿進行的開發,它具備的功能一定是有著實際用途的。雖不能說PHP比同類產品強,但其實力不容忽視。
  2. PHP是跨平台的產品,它能運行在多種Unix,以及Windows NT上,并能訪問多種不同的數據庫,對很多人來講,這一點非常重要。商業產品通常要求非常苛刻,只能和特定的操作系統和數據庫相互協作。而人們喜歡使用自己已經熟悉的操作系統、Web服務器和數據庫,如LinuxApacheMySQL
  3. PHP是開放源代碼的軟件,很多人對此不以為然,然而他們忽視了占Web服務器市場58%Apache服務器,忽視了LinuxFreeBSD等開放源代碼的操作系統,這些開放源代碼的軟件結合在一起,就形成了一個非常有效的解決方案。
  4. 即便不考慮源代碼的因素,PHP不需要任何費用的特點也是商業軟件無法相比的,雖然ASP也是免費的,然而很多人忽視了運行Windows NTMS SQL的費用,而PHPLinux/FreeBSDApacheMySQL相互合作,几乎不需要任何軟件費用,當前如果不考慮盜版,究竟有多少人還會堅持ASP呢?
  5. PHP有良好的技朮支持,可以通過電子郵件、論壇、網頁、IRC等方式獲得技朮支持。這聽起來有些好笑,難道這比商業軟件的技朮支持更有效嗎?事實上依我個人使用商業軟件和開放源代碼軟件的經驗,這種技朮支持形式相當不錯,設想一下,你能夠得到來自ASP開發組的技朮服務嗎?我想更常見的結果是在一通800電話之后,得到的只是一堆無用的建議,最后你終于厭倦了轉來轉去的電話。即便是現場服務,也許是某個工程師在一遍又一遍的重裝系統,直到系統偶然的運行正常為止,這樣也好,系統管理員至少可以裝作什么都不懂的樣子稍事休息一下。而開放源代碼使你能提出更接近故障本質的現象,不但遇到過同樣現象的使用者會提供幫助,PHP的開發者也能提供幫助。有什么技朮支持比几十萬個使用者,其中大多數都是使用PHP的老手,提供的幫助更有效呢。

無論如何,商業支持并不是一個軟件流行的必要條件,反過來倒是可能的,最近的例子Linux不就是由于流行而得到了商業支持的嗎?例如最新版本的網頁制作工具DreamWaver 3.0,也開始支持PHP的標記,允許進行PHP的編寫了,這不正是一個好的開端嗎?越來越多的國內Web開發者也開始將目光投向PHP,其中大多數選擇了Unix (Linux,FreeBSD, Solaris, AIX, HP-UX等等)作為Web站點的操作系統。國內的出版界也會陸續出版一些PHP的著作,但對于所有的PHP使用者,我想PHP的老家www.php.net都是一個必須經常瀏覽的地方,從這里查看PHP的最新信息和下載它的最新版本。