PHP
维基百科,自由的百科全书
PHP | |
开发者 | PHP 組織 |
---|---|
最新穩定版 | 5.2.0 / 2006年11月2日 / |
操作系统 | 跨平台 |
类型 | 腳本語言 |
许可协议 | PHP License 3.01 |
www.php.net |
PHP 是一种流行的开放源代码的腳本语言。PHP早期的缩写是“Personal HomePage”,现在官方正式名稱为“PHP: Hypertext Preprocessor”的递归缩写。
PHP主要用於服务器端应用程序及動態網頁上,但是也可以用在命令列上執行,或是開發獨立的-{zh-cn:窗口程序;zh-tw:視窗程式;zh-hk:視窗程式;zh-sg:窗口程序}-介面(GUI)
目录 |
[编辑] 開發歷史
1994年,加拿大籍的程式設計師Rasmus Lerdorf開發了一組以C語言為基礎的CGI程式,目的是要取代一些用來維護他個人網站的Perl程式,不久之後,他把這些CGI程式公佈並取名為"Personal Home Page Tools",這也是PHP名稱的由來。Rasmus Lerdorf一直維護PHP語言直到PHP第二版,使用的解析引擎為PHP/FI。
[编辑] PHP 3
1997年,Tel Aviv 公司的Zeev Suraski 和 Andi Gutmans 改寫了原本的解析引擎PHP/FI,並把PHP重新命名為"PHP: Hypertext Preprocessor"。在1998年公佈了PHP 3提供大眾下載測試,1999年兩人在以色列成立了Zend Technologies公司來投入PHP的開發工作,並且開始製作下一代的解析引擎 - Zend引擎。
[编辑] PHP 4
2000年5月22日,以Zend引擎 1.0為解析引擎的PHP 4.0 发布。這也是PHP開始大受歡迎的版本,目前PHP 4還有在做安全性的更新,最新的版本是2006年九月發佈的PHP 4.4.4版。
[编辑] PHP 5
2004年7月13日,以Zend引擎II为基礎的PHP 5.0 发布,同時也加入了許多新特性:
- 更完整的面向对象支持:基本上到PHP 5之後PHP才算是比較完整的面向对象語言。
- 透過新的Zend引擎,提昇了PHP執行的速度。
- 對MySQL資料庫有更完整的支持。
- 更佳的XML支持。
- 內建SQLite資料庫(但在PHP 5.1取消了內建,改用扩展函数庫的方式)。
- 整合了SOAP的支持。
- 提供許多程序語言有的例外處理功能。
- 實驗性的介紹新的資料庫存取介面PDO(PHP Data Objects),在PHP5.1則開始預設安裝PDO。
最新的版本是2006年11月发布的5.2.0
[编辑] 應用
PHP主要應用在網頁伺服器,處理使用者的輸入來產生網頁。但是命令列腳本或是視窗程式介面(GUI)的開發也是PHP的主要應用範圍
[编辑] 伺服器端腳本語言
PHP最初就是設計成伺服器端腳本語言,因此這也是PHP應用最廣的部份。在此領域有許多其他的競爭者,例如ASP.NET、ColdFusion、JSP、Perl、Ruby on Rails等等。
在網路工業領域,PHP是LAMP架構的其中一部分,所謂的LAMP是指Linux、Apache、MySQL、以及PHP所組成的網路環境,提供了許多安全、可靠的網頁應用程式。PHP目前已經是全世界最受歡迎的伺服器端腳本語言,跨平台的特性更是讓PHP廣為流傳,目前共有1800萬台伺服器安裝有PHP。
[编辑] 命令列腳本
PHP也可以用命令列上執行來使用,例如分析紀錄檔、系統管理工作等。這些工作過去都是由一些其他的腳本語言例如Perl, Python, awk等來執行,PHP的在命令列上的使用則逐漸增加。
[编辑] 視窗程式介面(GUI)
透過和GUI函式庫GTK+的結合,PHP也可以應用在視窗程式介面(GUI)的開發上,目前的應用還不普遍。
[编辑] 語法
PHP的語法參考了Perl、C語言,而且可以整合在HTML之中,以下是一個簡單的Hello World程式:
<?php echo 'Hello World!'; ?>
PHP剖析引擎只剖析<?php到?>之間的程式碼,而不包含在<?php到?>之間的內容則會直接送出,所以可以用以下的方式來將PHP程式碼嵌入在HTML之中:
<?php //PHP程式碼 ?> html內容 <?php //PHP程式碼 ?>
PHP可以用三種註解的形式:C語言的/*...*/、C++和Perl的//、#。
[编辑] 變數類型
PHP主要有以下四種變數類型:
- 數字類型
- 布林值
- 字串
- NULL
- 資源
- 陣列
[编辑] 物件導向
PHP從PHP 3開始有了基本的物件導向,但直到PHP 5將物件導向部份重新改寫之後,PHP的物件導向功能才比較完善
[编辑] PHP相關資源
[编辑] 函式庫
- 主條目:PHP函式庫列表
內建多樣化的函數是PHP主要的特點之一,這些開放程式碼的函數提供了各種不同的功能,例如檔案處理、FTP、字串處理、等等。這些函數的使用方法和C語言相近(例如printf),這也是PHP廣為流行的原因之一。
除了內建的函數之外,PHP也提供了很多延伸函式庫(extension),像是各種資料庫連接函數、資料壓縮函數、圖形處理等等。有些延伸函式庫需要從PECL(PHP Extension Community Library)取得。
[编辑] 原始碼編碼和加速
PHP原始碼是可以直接讀取的,即使放到伺服器上執行也是一樣。雖然讓PHP多了彈性,但相對的會造成安全危機和性能下降的問題。
因此透過PHP編碼器,可以保護PHP的原始碼不被讀取(對商業軟體來說特別有需求),也可以提昇執行的效能。有許多公司或團體開發PHP的編碼器,將PHP程式編譯成位元組碼,再透過伺服器上安裝對應的程式來執行PHP腳本。
除了透過編碼器加速之外,PHP還可以透過動態的快取機制來提昇速度,加速工具有商業版的(例如Zend Platform),也有開放原始碼的(例如eAccelerator, APC)。
[编辑] 樣板引擎
Smarty
- Smarty是一个php模板引擎.
- 更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法,可以描述为应用程序员和美工扮演了不同的角色,因为在大多数情况下 ,他们不可能是同一个人.例如,你正在创建一个用于浏览新闻的网页,新闻标题,标签栏,作者和内容等都是内容要素,他们并不包含应该怎样去呈现.在Smarty的程序里,这些被忽略了.模板设计者们编辑模板,组合使用html标签和模板标签去格式化这些要素的输出(html表格,背景色,字体大小,样式表,等等).有一天程序员想要改变文章检索的方式(也就是程序逻辑的改变).这个改变不影响模板设计者,内容仍将准确的输出到模板.同样的,哪天美工吃多了想要完全重做界面,也不会影响到程序逻辑.
- 程序员可以改变逻辑而不需要重新构建模板,模板设计者可以改变模板而不影响到逻辑
[编辑] PEAR
[编辑] PECL
[编辑] 對PHP的批評
- PHP沒有原生支援Unicode或是多位元字集(例如中文、日文、韓文等需要用兩個以上為原來表示的字集),導致用PHP寫的軟體在國際語言化上遇到相當多的困難。
- PHP沒有名稱空間(Namespace)的設計,降低了PHP語言設計上的彈性。預計在PHP 6會加入名稱空間的特性。
- PHP的函數命名規則非常的混亂,而且許多函數往往作用類似,只是傳遞的參數不同就要分成不同的函數,導致編寫PHP程式時需要做相當多的手冊查詢工作,降低開發的效率。
- PHP的魔術引號(magic quotes)功能可以自動處理使用者輸入字串中的跳脫字元,有效避免SQL隱碼攻擊(SQL injection),但是因為不是每個使用者的輸入都會寫入到資料庫,處理這些沒有寫入資料庫的字串便浪費了效能。此外不是每個PHP環境都會開啟魔術引號,程式設計時需要便需要對不同的伺服器環境做因應,造成程式設計上的麻煩。魔術引號功能預計將會於PHP 6時取消。
- 有些PHP延伸函式庫不是執行緒安全(threadsafe),導致PHP安裝在多執行緒的伺服器例如Apache 2上會發生不穩定的狀況。