简介
PHP(PHP:Hypertext Preprocessor)是一种在计算机上运行的脚本语言,主要是用途在于处理动态网页,也包含了命令行运行界面(Command Line Interface),或者产生图形用户界面(GUI)程序。
PHP 最早由 Rasmus Lerdorf 在1995年发明,而现在PHP的标准由PHP Group和开放源代码社群维护。PHP 以 PHP License 作为许可协议,不过因为这个协议限制了PHP名称的使用,所以和开放源代码许可协议GPL不兼容。
PHP 的应用范围相当广泛,尤其是在网页程序的开发上。一般来说 PHP 大多运行在网页服务器上,通过运行PHP代码来产生用户浏览的网页。PHP 可以在多数的服务器和操作系统上运行,而且使用 PHP 完全是免费的。根据2007年4月的统计数据,PHP 已经被安装在超过2000万个网站和100万台服务器上。
PHP是一个应用范围很广的语言,特别是在网络程序开发方面。一般来说 PHP 大多在服务器端运行,通过运行 PHP 的代码来产生网页提供浏览器读取,此外也可以用来开发命令行脚本程序和用户端的GUI应用程序。PHP可以在许多的不同种的服务器、操作系统、平台上运行,也可以和许多数据库系统结合。使用 PHP 不需要任何费用,官方组织 PHP Group 提供了完整的程序源代码,允许用户修改、编译、扩充来使用。
开发历史
PHP原本的简称为Personal Home Page,是Rasmus Lerdorf 为了要维护个人网页,而用C语言开发的一些CGI工具程序集,来取代原先使用的 Perl程序。最初这些工具程序用来显示Rasmus Lerdorf的个人履历,以及统计网页流量。他将这些程序和一些窗体解释器集成起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。Rasmus Lerdorf 在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包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个访问数据库的延伸函数库)、以及许多效能上的增强。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。
2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和 Safe mode的功能。
版本历程
主要版本 | 次要版本 | 发布日期 | 说明 |
1.0 | 1.0.0 | 1995年6月8日 | 正式名称为"Personal Home Page Tools (PHP Tools)",第一次使用了"PHP"的名字。 |
2.0 | 2.0.0 | 1996年4月16日 | 针对PHP 1.0的改进版,速度更快、体积更小,更容易产生动态网页。 |
3.0 | 3.0.0 | 1998年6月6日 | 开发方式改成多人共同参与。Zeev Suraski和Andi Gutmans 为了这个版本重写了解析引擎。 |
4.0 | 4.0.0 | 2000年5月22日 | 改成以Zend引擎作为解析器,具有两阶段解析/标签解析系统等先进功能。 |
4.1.0 | 2001年12月10日 | 加入"超全局变量"(superglobals)功能,包含了$_GET、$_POST、 $_SESSION等 。 | |
4.2.0 | 2002年4月22日 | 默认取消register_globals功能。从网络接收的数据将不会设置成全局变量,增加程序安全性。 | |
4.3.0 | 2002年12月27日 | 加入命令行运行档,称为CLI。 | |
4.4.0 | 2005年7月11日 | Added man pages for phpize and php-config scripts. | |
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. | |
4.4.9 | 2008年8月7日 | More security enhancements and bug fixes. The last release of the PHP 4.4 series. | |
5.0 | 5.0.0 | 2004年7月13日 | Zend Engine II with a new object model. |
5.1.0 | 2005年11月24日 | Performance improvements with introduction of compiler variables in re-engineered PHP Engine. | |
5.2.0 | 2006年11月2日 | Enabled the filter extension by default. | |
5.2.8 | 2008年12月8日 | emergent bug fix | |
5.2.9 | 2009年2月26日 | 解决了5.2.*的超过了50多个错误和多个安全问题,增加了稳定性。 | |
5.2.10 | 2009年6月18日 | 这个版本修正了大量的bug和安全漏洞,并升级了时区数据库。 | |
5.3.0 | 2009年6月30日 | 支持命名空间;使用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 |
PHP相关资源
函数库
内置多样化的函数是PHP主要的特点之一,这些开放代码的函数提供了各种不同的功能,例如文件处理、FTP、字符串处理、等等。这些函数的使用方法和C语言相近(例如printf),这也是PHP广为流行的原因之一。
除了内置的函数之外,PHP也提供了很多延伸函数库(extension),像是各种数据库连接函数、数据压缩函数、图形处理等等。有些延伸函数库需要从PECL(PHP Extension Community Library)取得。
源代码编码和加速
PHP源代码是可以直接读取的,即使放到服务器上运行也是一样。虽然让PHP多了弹性,但相对的会造成安全危机和性能下降的问题。
通过PHP编码器,可以保护PHP的源代码不被读取(对商业软件来说特别有需求),也可以提升运行的效能。有许多公司或团体开发PHP的编码器,将PHP程序编译成字节码(byte code),再通过服务器上安装对应的程序来运行PHP脚本。
除了通过编码器加速之外,PHP还可以通过动态的高速缓存机制来提升速度,加速工具有商业版的,例如Zend Platform,也有开放源代码的加速软件如eAccelerator、APC、XCache。
模板引擎
模板引擎让PHP应用程序可以做逻辑和使用界面上的分离,让程序开发更容易进行,目前比较受欢迎的模板引擎是PHP官方开发的Smarty。不过模板引擎有效能上的争议,因为PHP本身就是一个模板引擎,使用模板引擎反而变成“重新发明了轮子”(reinventing the wheel)。模板引擎最主要的好处就是让不懂PHP代码的人也可以参与使用界面的开发,因为模板引擎的语言远比PHP简单。