PHP（全稱：PHP：Hypertext Preprocessor，即「PHP：超文字預處理器」）是一種開源的通用電腦手稿語言，尤其適用於網路開發並可嵌入 HTML 中使用。PHP 的語法借鑑吸收 C 語言、Java 和 Perl 等流行電腦語言的特點，易於一般程式設計師學習。PHP 的主要目標是允許網路開發人員快速編寫動態頁面，但 PHP 也被用於其他很多領域。

PHP 最初是由勒多夫在 1995 年開始開發的；現在 PHP 的標準由 the PHP Group 維護。PHP 以 PHP License 作為許可協定，不過因為這個協定限制了 PHP 名稱的使用，所以和開放原始碼許可協定 GPL 不相容。

PHP 的應用範圍相當廣泛，尤其是在網頁程式的開發上。一般來說 PHP 大多執行在網頁伺服器上，通過執行 PHP 程式碼來產生使用者瀏覽的網頁。PHP 可以在多數的伺服器和作業系統上執行。根據 2013 年 4 月的統計資料，PHP 已經被安裝在超過 2 億 4400 萬個網站和 210 萬台伺服器上。

PHP 在 Windows 上有專門的官方移植編譯專案，並且分多個 VC 編譯器版本和執行緒安全特性來提供不同的版本支援。

根據 W3Techs 的報告，截至 2021 年 9 月：「有 78.9% 的網站使用 PHP。」



開發歷史

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

在 1997 年，任職於 Technion IIT 公司的兩個以色列程式設計師：Zeev Suraski 和 Andi Gutmans，重寫了 PHP 的剖析器，成為 PHP 3 的基礎，而 PHP 也在這個時候改稱為 _PHP: Hypertext Preprocessor_.。經過幾個月測試，開發團隊在 1997 年 11 月釋出了 PHP/FI 2，隨後就開始 PHP 3 的開放測試，最後在 1998 年 6 月正式釋出 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 釋出後開始改寫 PHP 的核心，這個在 1999 年釋出的剖析器稱為 Zend Engine，他們也在以色列的 Ramat Gan 成立了 Zend Technologies 來管理 PHP 的開發。

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

2008 年時，PHP 5 成為了 PHP 唯一維護中的穩定版本。

PHP 7 的首個版本於 2015 年 12 月 3 日開發完成，包含了大量效能上的改進，同時也帶來了一些新特性，最值得注意的是返回值類型聲明、純量類型聲明（可用於參數及返回值）。

版本歷程



吉祥物

PHP 計畫的吉祥物名叫「elePHPant」，PHP 的 logo 在一頭藍象的裡面，由文森・龐蒂爾 (Vincent Pontier) 在 1998 年設計。其設計概念是從側面看 PHP 像隻大象。當 elePHPant 被製作成毛絨玩具時，有時顏色會有不同。



應用

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



安全

據 National Vulnerability Database 資料顯示，與 PHP 有關的資料庫攻擊比例為：20% 2004, 28% 2005, 43% 2006, 36% 2007, 35% 2008 and 32% 2009。其中很多的漏洞都可以通過遠端操作完成，如：駭客可以通過網路連接攻擊伺服器，達到盜取或毀壞資料，傳送垃圾郵件或進行分散式阻斷服務攻擊。但是隨著更多的關注，PHP 也變得越來越安全了。

PHP 官網被駭入事件

2010 年 12 月 17 日，PHP 代碼「貢獻者名單」中被加入「Wolegequ Gelivable」字樣（中文含義「我勒個去 給力」），約半小時後被刪除。2011 年 3 月 19 日，PHP 官方釋出聲明指出，駭客可能是通過 wiki.php.net 作為入口攻擊了代碼系統。並且，官方已經檢查過自版本 5.3.5 以來釋出的代碼，並沒有發現惡意內容。但官方同時表示，尚未完全掌握駭客發動本次攻擊的具體細節。



語法

PHP 的語法參考了 Perl、C 語言，而且可以整合在 HTML 之中，以下是一個簡單的 Hello World 程式碼：

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

在 HTML 中嵌入 PHP 時，比如需要單獨輸出某個變數，除了正常採用 echo 方式外，也可以直接採用下列方式：

但是上述這種方式曾經引起爭議，有的人並不推薦這種方式的縮寫（其原因為：並不是所有伺服器都支援縮寫，但在後期之後此選項為預設開啟），也有人因為採用這種方法，造成與 XML 搞混的情況。

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

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

類型

PHP 主要有八種基本資料類型，其中包括：


* 四種變數類型
  
* 整數型（integer）
  
* 浮點數型（float）
  
* 布林型（boolean）
  
* 字串（string）

* 兩種複合類型
  
* 陣列（array）
  
* 物件（object）

* 兩種特殊類型
  
* NULL
  
* 資源 （resource）

變數

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

有效的變數名稱以字母或底線開頭，後接任意數目的字母、數字或底線，PHP 也支援使用多位元組文字作為變數名。

物件導向

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



PHP 相關資源

PHP 架構

使用 PHP 架構可以更快更簡單的部署專案並提高開發效率，但學習使用這些架構需要付出額外的學習成本。

最流行的 PHP 架構包括：Symfony, Zend Framework, Laravel、Phalcon、CodeIgniter、Yii、ThinkPHP 等等。

函式庫

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

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

以下是 PHP 程式語言提供的函式庫列表

原始碼編碼和加速

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

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

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

php 包管理器

Composer 是 php 社群用來管理依賴關係的工具，一般在 php 專案中通過 composer.json 聲明依賴的外部 php 庫，然後就可以使用 Composer 管理包依賴。



PHP 編譯器

PHP 一直被當作直譯器使用。PHP 編譯器則將 PHP 從直譯器中分離，為加快運行和改善與以其他程式語言編寫部份的互通性，例如 Phalanger 將 PHP 編譯成通用中間語言和 Hiphop for PHP 把 PHP 原始碼編譯成 C++ 等。Facebook 因應其網站大量的使用者，整合了 HPHPc、HPHPi、HPHPd 以及 HHVM 這四種指令碼引擎，開發出 HipHop for PHP，以加強網站效能。



發展

PHP 7


* 基於 PHPNG 專案（PHP Next-Gen），它能讓透明提升 PHP 程式效能，使 PHP7 的效能和 HHVM 相當

* JIT 引擎

* 抽象語法樹編譯 AST: Abstract Syntax Tree

* 非同步編程



彩蛋

PHP 含有多個彩蛋，可以透過在網域名稱的後面加上特殊字串顯示彩蛋。例如，`?=PHPE9568F36-D428-11d2-A769-00AA001ACF42` 則會出現 PHP 的 logo，PHP 版本的不同，logo 也會不同；不過該特性已經在 5.5 版本中被移除。



趣聞

PHP 程式語言的官方文件中曾寫過「PHP 是最好的 WEB 開發語言，那其他的語言如何呢？」，但是這句話被華語圈的程式設計師訛傳為「世界上最好的語言」並加以調侃。



註釋



參考文獻

參照

來源

網頁


* PHP 手冊（頁面存檔備份，存於網際網路檔案館）

* 函式參考（頁面存檔備份，存於網際網路檔案館）



外部連結


* 官方網站

* 開放式目錄計劃中和 PHP 相關的內容

* PHP wiki（頁面存檔備份，存於網際網路檔案館）

* PHP 參考手冊（頁面存檔備份，存於網際網路檔案館）

* CentOS 下安裝 PHP7（頁面存檔備份，存於網際網路檔案館）

* Rocky Linux 8 安裝多個 PHP 版本 （頁面存檔備份，存於網際網路檔案館）