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 的報告，截至 2023 年 7 月：有 774 的網站使用 PHP。。只有 14 的網站正在使用當前支援的 php8，又有 206 的網站正在使用不安全的 php5 版本。 開發歷史 PHP 原本的全稱為 Personal Home Page，是拉斯姆斯勒多夫為了要維護個人網頁，而用 C 語言開發的一些 CGI 工具程式集，來取代原先使用的 Perl 程式。最初這些工具程式用來顯示拉斯姆斯勒多夫的個人履歷，以及統計網頁流量。他將這些程式和一些表單直譯器整合起來，稱為 PHPFI。PHPFI 可以和資料庫連線，產生簡單的動態網頁程式。拉斯姆斯勒多夫在 1995 年 6 月 8 日將 PHPFI 公開釋出，希望可以透過社群來加速程式開發與尋找錯誤。這個釋出的版本命名為 PHP 2，已經有今日 PHP 的一些雛型，像是類似 Perl 的變數命名方式、表單處理功能、以及嵌入到 HTML 中執行的能力。程式語法上也類似 Perl，有較多的限制，不過更簡單、更有彈性。 在 1997 年，任職於 Technion IIT 公司的兩個以色列程式設計師：Zeev Suraski 和 Andi Gutmans，重寫了 PHP 的剖析器，成為 PHP 3 的基礎，而 PHP 也在這個時候改稱為 PHP Hypertext Preprocessor。經過幾個月測試，開發團隊在 1997 年 11 月釋出了 PHPFI 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 10 為基礎的 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 日開發完成，包含了大量效能上的改進，同時也帶來了一些新特性，最值得注意的是返回值型別宣告、標量型別宣告（可用於引數及返回值）。 2020 年 11 月 26 日 PHP 8 釋出，它包含了很多新功能與最佳化項， 包括命名引數、聯合型別、註解、構造器屬性提升、match 表示式、nullsafe 運算子、JIT，並改進了型別系統、錯誤處理、語法一致性。 2021 年 11 月 22 號 Phpstorm 的開發商 JetBrains 宣佈，與 Automattic、Laravel、Acquia 等多家公司共同成立 PHP 基金會。 2021 年 11 月 25 日 PHP 81 釋出，它包含了許多新功能，包括列舉、只讀屬性、Firstclass 可呼叫語法、纖程、交集型別和效能改進等。 2022 年 12 月 8 日 PHP 82 釋出，它包含了只讀類、null、false 和 true 作為獨立的型別、廢棄動態屬性、效能改進等。 2023 年 11 月 23 日 PHP 83 釋出，它包含了許多新功能，例如：類常量顯式型別、只讀屬性深複製，以及對隨機性功能的補充。一如既往，它還包括效能改進、錯誤修復和常規清理等。 版本歷程 代表意義 紅色 過期版本；官方停止支援 黃色 當前版本；官方僅提供安全問題修復 綠色 當前版本；官方提供安全問題和一般問題的修復 藍色 未來版本 版本 釋出日期 結束支援日期 說明 10 1995 年 6 月 8 日 正式名稱為 Personal Home Page Tools PHP Tools，第一次使用了 PHP 的名字。 20 1996 年 4 月 16 日 針對 PHP 10 的改進版，速度更快、體積更小，更容易產生動態網頁。 30 1998 年 6 月 6 日 2000 年 10 月 20 日 開發方式改成多人共同參與。Zeev Suraski 和 Andi Gutmans 為了這個版本重寫了剖析引擎。 40 2000 年 5 月 22 日 2001 年 6 月 23 日 改成以 Zend 引擎作為剖析器，具有兩階段剖析 標籤剖析系統等先進功能。 41 2001 年 12 月 10 日 2002 年 3 月 2 日 加入 超全域變數（superglobals）功能，包含了 _GET、_POST、_SESSION 等。 42 2002 年 4 月 22 日 2002 年 9 月 6 日 預設取消 register_globals 功能。從網路接收的資料將不會設定成全域變數，增加程式安全性。 43 2002 年 12 月 27 日 2005 年 3 月 31 日 加入命令列執行檔，稱為 CLI，用以補充 CGI 44 2005 年 7 月 11 日 2008 年 8 月 8 日 新增 phpize 及 phpconfig 的手冊頁。 50 2004 年 7 月 13 日 2005 年 9 月 5 日 推出有著新的物件模型的 Zend Engine II。 51 2005 年 11 月 24 日 2006 年 8 月 24 日 在往重新設計的 PHP 引擎引入編譯變數時做了效能提升。添加了 PHP 資料物件（PDO）作為訪問資料庫的統一介面。 52 2006 年 11 月 2 日 2011 年 1 月 6 日 預設開啟 過濾 的擴充功能。原生的 JSON 支援。 53 2009 年 6 月 30 日 2014 年 8 月 14 日 支援名稱空間；使用 XMLReader 和 XMLWriter 增強 XML 支援；支援 SOAP 延遲靜態繫結，跳轉標籤（有限的 goto） 閉包，Native PHP archives。 54 2015 年 9 月 3 日 支援 Trait、簡短陣列表示式。移除了 register_globals safe_mode allow_call_time_pass_reference session_register session_unregister magic_quotes 以及 session_is_registered 。加入了內建的 Web 伺服器。增強了效能，減小記憶體使用量。 55 2016 年 7 月 10 日 支援 generators，用於異常處理的 finally ，將 OpCache（基於 Zend Optimizer）加入官方釋出中。 56 2018 年 12 月 31 日 支援常量標量表達式、可變引數函式、指數運算子，增加 phpdbg SAPI、統一的預設字元集。 6x 取消掉的、從未正式釋出的 PHP 版本。 70 2015 年 12 月 3 日 2018 年 12 月 3 日 Zend Engine 3 效能提升並在 Windows 上支援 64bit 整數，統一的變數語法， 基於抽象語法樹編譯過程。 71 2016 年 12 月 1 日 2019 年 12 月 1 日 void 返回值型別，類常量可見性修飾符，多異常捕獲處理 72 2017 年 11 月 30 日 2020 年 11 月 30 日 新的物件型別，透過名稱載入擴充套件，重寫抽象方法，Sodium 為核心擴充套件 73 2018 年 12 月 6 日 2021 年 12 月 6 日 更靈活的 Heredoc 和 Nowdoc 語法，陣列解構支援引用賦值，Instanceof 運算子接受文字 74 2019 年 11 月 28 日 2022 年 11 月 28 日 屬性新增限定型別、箭頭函式、空合併運算子賦值、陣列展開操作 80 2020 年 11 月 26 日 2023 年 11 月 26 日 JIT 即時編譯，增加命名引數，註解實現，構造器屬性提升，聯合型別，Match 表示式，Nullsafe 運算子，字串與數字的比較更符合邏輯，內部函式型別錯誤的一致性。 81 2021 年 11 月 25 日 2025 年 12 月 31 日 八進位制整數文字表達字首，支援字串型別鍵的陣列解包，引數展開後命名引數，纖程，交集型別，Never 型別，Readonly 屬性，Final 類常量 82 2022 年 12 月 8 日 2026 年 12 月 31 日 SensitiveParameter 屬性，常量表達式中的列舉屬性，型別系統提升，只讀類 83 2023 年 11 月 23 日 2027 年 12 月 31 日 型別化類常量、動態獲取類常量、新增 Override 屬性、只讀屬性深複製、新增 json_validate 函式 84 2024 年 11 月 21 日 2028 年 12 月 31 日 吉祥物 PHP 計畫的吉祥物名叫「elePHPant」，PHP 的 logo 在一頭藍象的裡面，由文森龐蒂爾 Vincent Pontier 在 1998 年設計。其設計概念是從側面看 PHP 像隻大象。當 elePHPant 被製作成毛絨玩具時，有時顏色會有不同。 應用 PHP 是一個應用範圍很廣的語言，特別是在網路程式開發方面。一般來說 PHP 大多在伺服器端執行，透過執行 PHP 的程式碼來產生網頁提供瀏覽器讀取，此外也可以用來開發命令列指令碼程式和使用者端的 GUI 應用程式。PHP 可以在許多的不同種的伺服器、作業系統、平臺上執行，也可以和許多資料庫系統結合。使用 PHP 不需要任何費用，官方組織 PHP Group 提供了完整的 zhhans 程式原始碼；zhhant 程式原始碼；，允許使用者修改、編譯、擴充來使用。 安裝方式 在 Linux 環境下，一般自帶的軟體源包含 PHP，但是版本過舊，多數情況使用編譯安裝，並且一般使用一些開源指令碼幫助一鍵部署 LNMP、LAMP 環境。 在 macOS 環境下，支援 homebrew 安裝，也支援原始碼編譯。 在 Windows 環境下，一般直接下載官方編譯版本，或者使用 PHP 環境套件，其中包含 PHP、MySQL、Nginx、Apache，一鍵啟動。PHP 在 Windows 上的官方版本被推薦用於生產環境。如果有需要，你也可以從原始碼中構建 PHP。 使用方式 PHP 533 後內建 PHPfpm 模組，用於管理 PHP 程序池的軟體，用於接受 web 伺服器的請求。一般情況下，PHP 將會搭配 Http 伺服器和資料庫軟體同時使用。 在 Linux 平臺常見的方案有 LAMP、LNMP，在 Windows 平臺通常使用的 PHP 套件，如：XAMPP、PHPStudy，PHP 也支援的 Docker 環境下執行。 同時 PHP 也支援命令列，單獨以指令碼的方式執行，例如 php runphp。 流行度和使用統計 php 廣泛的應用於各種開源程式，包括 MediaWiki、WordPress、Joomla、Drupal 等。 截至在 2023 年 7 月，根據 w3techs 統計，全世界的網站 774 使用 php。 安全 據 National Vulnerability Database 資料顯示，與 PHP 有關的資料庫攻擊比例為：20 2004 28 2005 43 2006 36 2007 35 2008 and 32 2009。其中很多的漏洞都可以透過遠端操作完成，如：駭客可以透過網路連線攻擊伺服器，達到盜取或毀壞資料，傳送垃圾郵件或進行分散式阻斷服務攻擊。但是隨著更多的關注，PHP 也變得越來越安全了。現代 PHP 開發大部分使用例如 Laravel、Symfony 這樣的框架進行開發，框架自身提供了大量的安全防範措施，減少了 SQL 注入，XSS 攻擊等方式攻擊的可能性，極大的提供了 PHP 應用的安全性。 PHP 官網被駭入事件 2010 年 12 月 17 日，PHP 程式碼 貢獻者名單 中被加入 Wolegequ Gelivable 字樣（中文含義 我勒個去 給力），約半小時後被刪除。2011 年 3 月 19 日，PHP 官方釋出宣告指出，駭客可能是透過 wikiphpnet 作為入口攻擊了程式碼系統。並且，官方已經檢查過自版本 535 以來釋出的程式碼，並沒有發現惡意內容。但官方同時表示，尚未完全掌握駭客發動本次攻擊的具體細節。 語法 PHP 的語法參考了 Perl、C 語言，而且可以整合在 HTML 之中，以下是一個簡單的 Hello World 程式碼： Hello World PHP 剖析引擎只剖析 php 到？ 之間的程式碼，而不包含在 php 到？ 之間的內容則會直接送出，所以可以用以下的方式來將 PHP 程式碼嵌入在 HTML 之中： php PHPzhhans 程式碼；zhhant 程式碼： html 內容 php PHPzhhans 程式碼；zhhant 程式碼： 在 HTML 中嵌入 PHP 時，比如需要單獨輸出某個變數，除了正常採用 echo 方式外，也可以直接採用下列方式： title 但是上述這種方式曾經引起爭議，有的人並不推薦這種方式的縮寫 ，Why are echo short tags permanently enabled as of PHP 54（其原因為：並不是所有伺服器都支援縮寫，但在後期之後此選項為預設開啟），也有人因為採用這種方法，造成與 XML 搞混 ，Escaping on php shorthand enabled server when using require 的情況。 在判斷語句中的 HTML 程式碼並不會被直接送出： php if false HTML Code php PHP 可以用三種註解的形式：C 與 C 所使用的「」與「」，和 Perl 的「」。 php 多行註解的第一行 多行註解的另一行 單行註解 單行註解 型別 PHP 主要有八種基本資料型別 Types Introduction ，The PHP Group，其中包括： 四種變數型別 整數型（integer） 浮點數型（float） 布林型（boolean） 字串（string） 兩種複合型別 陣列（array） 物件（object） 兩種特殊型別 NULL 資源 （resource） 變數 PHP 中，變數以「」後接變數名稱來表示。 變數名稱區分大小寫。 有效的變數名稱以字母或底線開頭，後接任意數目的字母、數字或底線，PHP 也支援使用多位元組文字作為變數名。Language variables ，The PHP Group 物件導向 PHP 從 PHP 3 開始有了基本的物件導向（Object oriented）的特性，但直到 PHP 5 將物件導向部份重新改寫之後，PHP 的物件導向功能才比較完善。現在 PHP 可以說是一個有完整物件導向功能的語言。 PHP 相關資源 PHP 框架 使用 PHP 框架可以更快更簡單的部署專案並提高開發效率，但學習使用這些框架需要付出額外的學習成本。 最流行的 PHP 框架包括：Symfony Zend Framework Laravel、Phalcon、CodeIgniter、Yii、ThinkPHP 等等。 函式庫 內建多樣化的函式是 PHP 主要的特點之一，這些開放程式碼的函式提供了各種不同的功能，例如 zhhans 檔案；zhhant 檔案； 處理、FTP、zhhans 字串；zhhant 字串； 處理、等等。這些函式的使用方法和 C 語言相近（例如 printf），這也是 PHP 廣為流行的原因之一。 除了內建的函式之外，PHP 也提供了很多 zhcn 擴充套件；zhtw 延伸； 函式庫（extension），像是各種資料庫連線函式、資料壓縮函式、圖形處理等等。有些延伸函式庫需要從 PECL（PHP Extension Community Library）取得。 以下是 PHP 程式語言提供的函式庫列表 Apache BCMath Bzip2 Calendars CCVS COM ClibPDF cURL Cybercash DB2 dBase DBM dbx DB DOM XML NET FileMaker Pro FrontBase filePro FriBiDi FTP Gettext GD Graphics Library GNU MultiPrecision Library Hyperwave iconv IMAP，POP3 and NNTP Informix Ingres II InterBase IRC LDAP Lotus Notes mailparse MCAL Mcrypt MCVE Mhash MIME Functions MSSQL Ming mnoGoSearch mSQL MySQL Mowhawk muscat Ncurses ODBC Oracle OpenSSL Ovrimos SQL PDF PayFlow Pro PDO POSIX PostgreSQL Printer Pspell GNU Readline GNU Recode Regular expressions QTDom Semaphores SESAM Session Handling Shared memory SMTP SNMP Sockets SimpleXML SQLite Streams Sybase Token vpopmail WDDX Win32 API XML（Xpath） XMLRPC XSLT YAZ Yellow Pages 網路資訊服務（NIS） ZIP Zlib 原始碼編碼和加速 PHP 原始碼是可以直接讀取的，即使放到伺服器上執行也是一樣。雖然讓 PHP 多了彈性，但相對的會造成安全危機和效能下降的問題。 透過 PHP 編碼器，可以保護 PHP 的原始碼不被讀取（對商業軟體來說特別有需求），也可以提昇執行的效能。有許多公司或團體開發 PHP 的編碼器，將 PHP 程式編譯成位元組碼（byte code），再透過伺服器上安裝對應的程式來執行 PHP 指令碼。 除了透過編碼器加速之外，PHP 還可以透過動態的快取機制來提昇速度，加速工具有商業版的，例如，也有開放原始碼的加速軟體如 eAccelerator、APC、XCache。 PHP 包管理器 Composer 是 PHP 社群用來管理依賴關係的工具，一般在 PHP 專案中透過 composerjson 宣告依賴的外部 PHP 庫，透過 composerlock 鎖定具體的版本和檔案，然後就可以使用 Composer 管理包依賴。 截至到 2023 年 7 月，每個月 Composer 包安裝次數在 2000 萬左右，Composer 包的總量在 375 萬個，不同版本 400 萬個。 PHP 編譯器 PHP 一直被當作直譯器使用。PHP 編譯器則將 PHP 從直譯器中分離，為加快執行和改善與以其他程式語言編寫部份的互通性，例如 Phalanger 將 PHP 編譯成通用中間語言和 Hiphop for PHP 把 PHP 原始碼編譯成 C 等。Facebook 因應其網站大量的使用者，整合了 HPHPc、HPHPi、HPHPd 以及 HHVM 這四種指令碼引擎，開發出 HipHop for PHP，以加強網站效能。 在 PHP 550 及後續版本中引入了 OPcache 擴充套件，將編譯好的操作碼放入共享記憶體，提供給其他程序訪問。 在 PHP 8 引入了 JIT 支援，提高 PHP 執行效能。 發展 PHP 7 基於 PHPNG 專案（PHP NextGen），它能讓透明提升 PHP 程式效能，使 PHP7 的效能和 HHVM 相當 抽象語法樹編譯 AST Abstract Syntax Tree 非同步程式設計 PHP 8 命名引數、聯合型別、註解、構造器屬性提升、match 表示式、nullsafe 運算子、JIT，並改進了型別系統、錯誤處理、語法一致性。 列舉、只讀屬性、Firstclass 可呼叫語法、纖程、交集型別和效能改進 只讀類、null、false 和 true 作為獨立的型別、廢棄動態屬性、效能改進等。 彩蛋 PHP 含有多個彩蛋，可以透過在網域名稱的後面加上特殊字串顯示彩蛋。例如，PHPE9568F36D42811d2A76900AA001ACF42 則會出現 PHP 的 logo，PHP 版本的不同，logo 也會不同；不過該特性已經在 55 版本中被移除。 趣聞 PHP 程式語言的官方文件中曾寫過「PHP 是最好的 WEB 開發語言，那其他的語言如何呢？」原文：，，但是這句話被華語圈的程式設計師訛傳為「世界上最好的語言」並加以調侃。 註釋 參考文獻 引用 來源 網頁 PHP 手冊 函式參考 外部連結 PHP wiki PHP 參考手冊 CentOS 下安裝 PHP7 Rocky Linux 8 安裝多個 PHP 版本 CategoryLAMP Category 跨平臺軟體 Category 面向文字程式語言 Category 基於類的程式語言 Category1995 年建立的程式語言 Category 自由編譯器與直譯器