PHP

维基百科,自由的百科全书

跳转到: 导航, 搜索

跳过字词转换说明

PHP
PHP-logo.png
面向對象指令式編程
設計者
Rasmus Lerdorf
實作者
The PHP Group
最新发行时间 5.3.2 (2010年3月4日)
動態、弱型別
啟發語言
CPerlJavaC++Python
影響語言
Php4delphi
跨平台
PHP License
http://php.net/

PHPPHP:Hypertext Preprocessor)是一種在電腦上執行的腳本語言,主要用途是在于處理動態網頁,也包含了命令列執行介面(command line interface),或者產生圖形使用者介面(GUI)程式。[1]

PHP最早由Rasmus Lerdorf在1995年發明,而現在PHP的標準由PHP Group和開放原始碼社群維護。PHP以PHP License作為許可協議,不過因為這個協議限制了PHP名稱的使用,所以和開放原始碼許可協議GPL不相容。[2]

PHP的應用範圍相當廣泛,尤其是在網頁程式的開發上。一般來說PHP大多執行在網頁伺服器上,透過執行PHP程式碼來產生使用者瀏覽的網頁。PHP可以在多數的伺服器和作業系統上執行,而且使用PHP完全是免費的。根據2007年4月的統計資料,PHP已經被安裝在超過2000萬個網站和100萬台伺服器上[3]

目录

[编辑] 開發歷史

PHP的發明人Rasmus Lerdorf
Zend Technologies的創辦人之一 - Andi Gutmans
Zend Technologies的創辦人之一 - Zeev Suraski

PHP原本的簡稱為Personal Home Page[4],是Rasmus Lerdorf為了要維護個人網頁,而用c語言開發的一些CGI工具程式集,來取代原先使用的Perl程式。最初這些工具程式用來顯示Rasmus Lerdorf的個人履歷,以及統計網頁流量[5]。他將這些程式和一些表單直譯器整合起來,稱為PHP/FI。PHP/FI可以和資料庫連接,產生簡單的動態網頁程式。Rasmus Lerdorf在1995年6月8日將PHP/FI公開釋出,希望可以透過社群來加速程式開發與尋找錯誤[6]。這個釋出的版本命名為PHP 2,已經有今日PHP的一些雛型,像是類似Perl的變數命名方式、表單處理功能、以及嵌入到HTML中執行的能力。程式語法上也類似Perl,有較多的限制,不過更簡單、更有彈性。[5]

在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的開發。[5]

在2000年5月22日,以Zend Engine 1.0為基礎的PHP 4正式釋出,2004年7月13日則釋出了PHP 5,PHP 5則使用了第二代的Zend Engine[5]。PHP包含了許多新特色,像是強化的物件導向功能、引入PDO(PHP Data Objects,一個存取資料庫的延伸函式庫)、以及許多效能上的增強[8]。目前PHP 4已經不會繼續更新,以鼓勵用戶轉移到PHP 5。[9][10]

2008年PHP 5成為了PHP唯一維護中的穩定版本。將來的PHP 5.3將會加入Late static binding和一些其他的功能強化[11][12]

PHP 6的開發也正在進行中,主要的改進有移除register_globals[13]magic quotesSafe mode的功能。[9][14]

[编辑] 版本歷程

代表意義
紅色 舊版;官方停止支援
黃色 舊版;官方維護中
綠色 目前版本
藍色 未來版本
主要版本 次要版本 釋出日期 說明
1.0 1.0.0 1995年6月8日 正式名稱為"Personal Home Page Tools (PHP Tools)",第一次使用了"PHP"的名字。[5]
2.0 2.0.0 1996年4月16日 針對PHP 1.0的改進版,速度更快、體積更小,更容易產生動態網頁。[5]
3.0 3.0.0 1998年6月6日 開發方式改成多人共同參與。Zeev Suraski和Andi Gutmans為了這個版本重寫了剖析引擎。[5]
4.0 4.0.0 2000年5月22日 改成以Zend引擎作為剖析器,具有兩階段剖析/標籤剖析系統等先進功能。[15]
4.1.0 2001年12月10日 加入"超全域變數"(superglobals)功能,包含了$_GET$_POST$_SESSION[15]
4.2.0 2002年4月22日 預設取消register_globals功能。從網路接收的資料將不會設定成全域變數,增加程式安全性[15]
4.3.0 2002年12月27日 加入命令列執行檔,稱為CLI。[15]
4.4.0 2005年7月11日 Added man pages for phpize and php-config scripts.[15]
4.4.8 2008年1月3日 Several security enhancements and bug fixes. Was to be the end of life release for PHP 4. Security updates only until 2008-08-08, if necessary.[16]
4.4.9 2008年8月7日 More security enhancements and bug fixes. The last release of the PHP 4.4 series.[17][18]
5.0 5.0.0 2004年7月13日 Zend Engine II with a new object model.[19]
5.1.0 2005年11月24日 Performance improvements with introduction of compiler variables in re-engineered PHP Engine.[19]
5.2.0 2006年11月2日 Enabled the filter extension by default.[19]
5.2.8 2008年12月8日[20] emergent bug fix[20]
5.2.9 2009年2月26日[21] 解決了5.2.*的超過了50多個錯誤和多個安全問題,增加了穩定性。[21]
5.2.10 2009年6月18日[22] 这个版本修正了大量的bug和安全漏洞,并升级了时区数据库。[22]
5.3.0 2009年6月30日[23] 支持命名空间;使用XMLReader和XMLWriter增强XML支持;支持SOAP ,[24]延迟静态绑定,跳转标签(有限的goto), 闭包,Native PHP archives
6.0 6.0.0 ??? 支持Unicode;移除ereg扩展, 'register_globals', 'magic_quotes'和'safe_mode'; Alternative PHP Cache;Removal of mime_magic and rewrite of fileinfo() for better MIME support[25]

[编辑] 應用

PHP是一個應用範圍很廣的語言,特別是在網路程式開發方面。一般來說PHP大多在伺服器端執行,透過執行PHP的程式碼來產生網頁提供瀏覽器讀取,此外也可以用來開發命令列腳本程式和使用者端的GUI應用程式。PHP可以在許多的不同種的伺服器、作業系統、平台上執行,也可以和許多資料庫系統結合。使用PHP不需要任何費用,官方組織PHP Group提供了完整的程式原始碼,允許使用者修改、編譯、擴充來使用。[26]

[编辑] 安全

National Vulnerability Database数据显示,与PHP有关的数据库攻击比例为:20% 2004, 28% 2005, 43% 2006, 36% 2007, and 35% 2008[27]。其中很多的漏洞都可以通过远程操作完成,如:黑客可以通过网络连接攻击服务器,达到盗取或毁坏数据,发送垃圾邮件或进行拒绝服务攻击

[编辑] 語法

PHP的語法參考了PerlC語言,而且可以整合在HTML之中,以下是一個簡單的Hello World程式:

 php
    echo 'Hello World!';
 ?>

PHP剖析引擎只剖析php?>之間的程式碼,而不包含在php?>之間的內容則會直接送出,所以可以用以下的方式來將PHP程式碼嵌入在HTML之中:

 php
 //-PHP程式碼
 ?>
 html內容
 php
 //-PHP程式碼
 ?>

但是在判斷語句中的HTML代碼並不會被直接送出:

 php
 if (false) {
 ?>
 HTML Code
 php
 }
 ?>

PHP可以用三種註解的形式:C與C++所使用的「/*...*/」與「//」,和Perl的「#」。

[编辑] 類型

PHP主要有以下四種标量類型:

兩種複合類型

兩種特殊類型

[编辑] 變數

PHP中,变量以「$」後接變數名稱來表示。變數名稱區分大小寫。

有效的變數名稱以字母或底線開頭,後接任意數目的字母、數字或底線,PHP也支持使用多字节文字作为变量名。[29]

[编辑] 物件導向

PHP從PHP 3開始有了基本的物件導向(Object oriented)的特性,但直到PHP 5將物件導向部份重新改寫之後,PHP的物件導向功能才比較完善。現在PHP可以說是一個有完整物件導向功能的語言。

[编辑] PHP相關資源

[编辑] 函式庫

主条目:PHP函式庫列表

內建多樣化的函數是PHP主要的特點之一,這些開放程式碼的函數提供了各種不同的功能,例如檔案處理、FTP、字串處理、等等。這些函數的使用方法和C語言相近(例如printf),這也是PHP廣為流行的原因之一。

除了內建的函數之外,PHP也提供了很多延伸函式庫(extension),像是各種資料庫連接函數、資料壓縮函數、圖形處理等等。有些延伸函式庫需要從PECLPHP Extension Community Library)取得。

[编辑] 原始碼編碼和加速

PHP原始碼是可以直接讀取的,即使放到伺服器上執行也是一樣。雖然讓PHP多了彈性,但相對的會造成安全危機和性能下降的問題。

透過PHP編碼器,可以保護PHP的原始碼不被讀取(對商業軟體來說特別有需求),也可以提昇執行的效能。有許多公司或團體開發PHP的編碼器,將PHP程式編譯成位元組碼(byte code),再透過伺服器上安裝對應的程式來執行PHP腳本。

除了透過編碼器加速之外,PHP還可以透過動態的快取機制來提昇速度,加速工具有商業版的,例如Zend Platform,也有開放原始碼的加速軟體如eAcceleratorAPCXCache

[编辑] 樣板引擎

樣板引擎讓PHP應用程式可以做邏輯和使用介面上的分離,讓程式開發更容易進行,目前比較受歡迎的樣板引擎是PHP官方開發的Smarty。不過樣板引擎有效能上的爭議,因為PHP本身就是一個樣板引擎,使用樣板引擎反而變成「重新發明了輪子」(reinventing the wheel)。樣板引擎最主要的好處就是讓不懂PHP程式碼的人也可以參與使用介面的開發,因為樣板引擎的語言遠比PHP簡單。

[编辑] 未來發展

[编辑] PHP 6

  • 支持Unicode
  • 移除ereg扩展, 'register_globals', 'magic_quotes'和'safe_mode'; Alternative PHP Cache;Removal of mime_magic and rewrite of fileinfo() for better MIME support[30]
  • var成為public的別名,在類中的var聲明變成了public。
  • 去除了register_long_array, PHP5默認是關閉的, PHP6則乾脆移除。
  • 其它改进

[编辑] 參考資料

  1. ^ IntroductionPHP Manual.於2006年11月15日查閱.
  2. ^ GPL-Incompatible, Free Software Licenses.Various Licenses and Comments about Them.Free Software Foundation.於2008年2月22日查閱.
  3. ^ Usage Stats for April 2007.於2008年7月7日查閱.
  4. ^ php.net/history
  5. ^ 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 History of PHP and related projectsThe PHP Group.於2008年2月25日查閱.
  6. ^ Lerdorf, Rasmus (1995-06-08). "Announce: Personal Home Page Tools (PHP Tools)". comp.infosystems.www.authoring.cgi. (Web link). .於2006-09-17查閱。
  7. ^ Zend Engine version 2.0: Feature Overview and Design.Zend Technologies Ltd..於2006年9月17日查閱.
  8. ^ Trachtenberg, Adam(2004年7月15日).Why PHP 5 Rocks!O'Reilly.於2008年2月22日查閱.
  9. ^ 9.0 9.1 php.net 2007 news archiveThe PHP Group(2007年7月13日).於2008年2月22日查閱.
  10. ^ Kerner, Sean Michael(2008年2月1日).PHP 4 is Dead—Long Live PHP 5.InternetNews.於2008年3月16日查閱.
  11. ^ Late Static Binding in PHP.Digital Sandwich(2006年2月23日).於2008年3月25日查閱.
  12. ^ Static KeywordThe PHP Group.於2008年3月25日查閱.
  13. ^ Using Register Globals.PHP.於2008年4月4日查閱.
  14. ^ Prepare for PHP 6.CorePHP(2005年11月23日).於2008年3月24日查閱.
  15. ^ 15.0 15.1 15.2 15.3 15.4 PHP: PHP 4 ChangeLogThe PHP Group(2008年1月3日).於2008年2月22日查閱.
  16. ^ PHP: PHP 4.4.8 Release Announcement
  17. ^ PHP: Downloads
  18. ^ PHP: PHP 4.4.9 Release Announcement
  19. ^ 19.0 19.1 19.2 PHP: PHP 5 ChangeLogThe PHP Group(2007年11月8日).於2008年2月22日查閱.
  20. ^ 20.0 20.1 PHP: News Archive - 2008
  21. ^ 21.0 21.1 PHP: News Archive - 2009
  22. ^ 22.0 22.1 [1]
  23. ^ [2]
  24. ^ Zend Weekly Summaries Issue #359
  25. ^ Personal homepage of Jeroen van der Meer
  26. ^ Embedding PHP in HTMLO'Reilly(2001年5月3日).於2008年2月25日查閱.
  27. ^ PHP-related vulnerabilities on the National Vulnerability Database(2008年3月1日).
  28. ^ Types IntroductionThe PHP Group
  29. ^ Language variablesThe PHP Group
  30. ^ Personal homepage of Jeroen van der Meer

[编辑] 外部鏈接

Wikibooks-logo.svg
您可以在維基教科書中查找此百科条目的相關電子教程:


Original-Page: PHP - 维基百科,自由的百科全书
 Web-Blaster V2.21 Close Webblaster Floater
The page now displayed was connected to the database of the Assoziations-Blaster (Deutsche Version) through filtering it with the Web-Blaster.

The whole process takes place in real time and no data from other servers is saved anywhere.

In order to see this page without the filter and loaded from its original server, the Webblaster must be turned off.

Turn Off Webblaster