我们今天所知的 PHP 实际上是名为 PHP/FI 的产品的后续产品。1994 年由 Rasmus Lerdorf 创建,PHP 的第一个版本是一组用 C 语言编写的简单的公共网关接口 (CGI) 二进制文件。最初用于追踪访问他在线简历的人数,他将这套脚本命名为“个人主页工具”,更常被称为“PHP 工具”。随着时间的推移,人们需要更多功能,Rasmus 重写了 PHP 工具,产生了一个更大、更丰富的实现。这个新模型能够进行数据库交互等等,提供了一个框架,用户可以在其上开发简单的动态 Web 应用程序,例如留言簿。1995 年 6 月,Rasmus » 发布了 PHP 工具的源代码,允许开发者随意使用它。这也允许——并鼓励——用户修复代码中的错误,并对其进行改进。
同年 9 月,Rasmus 扩展了 PHP,并短暂地放弃了 PHP 这个名称。现在将这些工具称为 FI(“表单解释器”的缩写),新实现包含了我们今天所知的 PHP 的一些基本功能。它具有类似 Perl 的变量、表单变量的自动解释以及嵌入式 HTML 语法。语法本身类似于 Perl,尽管它更有限、更简单且有点不一致。事实上,要将代码嵌入 HTML 文件中,开发者必须使用 HTML 注释。尽管这种方法并非完全受到好评,但 FI 仍然作为 CGI 工具越来越受欢迎——但还不是作为一种语言。然而,这种情况在接下来的一个月开始改变;1995 年 10 月,Rasmus 发布了代码的完整重写版本。它带回了 PHP 的名称,现在(短暂地)名为“个人主页构建工具包”,并且是第一个拥有当时被认为是高级脚本接口的版本。该语言的设计故意类似于 C 的结构,使熟悉 C、Perl 和类似语言的开发者易于上手。到目前为止,它仅限于 UNIX 和符合 POSIX 的系统,人们正在探索 Windows NT 实现的可能性。
代码进行了另一次彻底改版,1996 年 4 月,Rasmus 将过去的版本名称结合起来,推出了 PHP/FI。这个第二代实现开始真正将 PHP 从一套工具演变为一种独立的编程语言。它包括对 DBM、mSQL 和 Postgres95 数据库、Cookie、用户定义函数支持等的内置支持。6 月,PHP/FI 被赋予了 2.0 版本状态。然而,关于这一点一个有趣的事实是,只有一个完整的 PHP 2.0 版本。当它在 1997 年 11 月最终从测试版状态毕业时,底层的解析引擎已经正在被完全重写。
尽管它的开发周期很短,但在当时仍处于发展初期的 Web 开发领域,它仍然越来越受欢迎。在 1997 年和 1998 年,PHP/FI 在全世界拥有数千名用户。截至 1998 年 5 月的 Netcraft 调查显示,近 60,000 个域名报告其标头包含“PHP”,表明主机服务器确实安装了它。这个数字相当于当时互联网上所有域名的约 1%。尽管这些数字令人印象深刻,但 PHP/FI 的成熟注定受到限制;虽然有一些次要贡献者,但它仍然主要由个人开发。
示例 #1 PHP/FI 代码示例
<!--include /text/header.html--> <!--getenv HTTP_USER_AGENT--> <!--ifsubstr $exec_result Mozilla--> Hey, you are using Netscape!<p> <!--endif--> <!--sql database select * from table where user='$username'--> <!--ifless $numentries 1--> Sorry, that record does not exist<p> <!--endif exit--> Welcome <!--$user-->!<p> You have <!--$index:0--> credits left in your account.<p> <!--include /text/footer.html-->
PHP 3.0 是第一个与今天存在的 PHP 非常相似的版本。以色列特拉维夫的 Andi Gutmans 和 Zeev Suraski 发现 PHP/FI 2.0 仍然效率低下且缺乏他们为大学项目开发的电子商务应用程序所需的功能,因此他们在 1997 年开始对底层解析器进行另一次完全重写。他们在网上联系了 Rasmus,讨论了当前实现的各个方面以及他们对 PHP 的重新开发。为了改进引擎并开始在 PHP/FI 的现有用户群上构建,Andi、Rasmus 和 Zeev 决定合作开发一种新的独立编程语言。这种全新的语言以一个新名称发布,去除了 PHP/FI 2.0 名称中暗示的个人使用受限的含义。它被简单地重新命名为“PHP”,其含义成为一个递归首字母缩略词——PHP:超文本预处理器。
PHP 3.0 最大的优势之一是其强大的可扩展性功能。除了为最终用户提供用于多种数据库、协议和 API 的成熟接口外,扩展语言本身的简易性也吸引了数十位开发者提交各种模块。可以说,这是 PHP 3.0 取得巨大成功的关键。PHP 3.0 中引入的其他关键特性包括面向对象编程支持和功能更强大、更一致的语言语法。
1998 年 6 月,来自世界各地的许多新开发者加入了这项工作,新的 PHP 开发团队宣布 PHP 3.0 为 PHP/FI 2.0 的官方继任者。PHP/FI 2.0 的活跃开发在上一年的 11 月已经几乎停止,现在正式结束。经过大约九个月的公开测试,当正式发布 PHP 3.0 的公告发布时,它已经在世界各地超过 70,000 个域名上安装,并且不再局限于符合 POSIX 的操作系统。报告安装了 PHP 的域名中相对较小的一部分托管在运行 Windows 95、98 和 NT 以及 Macintosh 的服务器上。在鼎盛时期,PHP 3.0 安装在互联网上大约 10% 的 Web 服务器上。
1998 年冬天,PHP 3.0 正式发布后不久,Andi Gutmans 和 Zeev Suraski 就开始着手重写 PHP 的核心。设计目标是提高复杂应用程序的性能,并提高 PHP 代码库的模块化程度。PHP 3.0 的新功能和对各种第三方数据库和 API 的支持使得此类应用程序成为可能,但 PHP 3.0 的设计并非旨在有效处理此类复杂应用程序。
新的引擎被称为“Zend Engine”(由他们的名字 Zeev 和 Andi 组成),成功地实现了这些设计目标,并于 1999 年年中首次推出。基于此引擎的 PHP 4.0 以及各种附加的新功能,于 2000 年 5 月正式发布,距离其前身发布已近两年。除了性能的大幅提升外,PHP 4.0 还包括其他关键特性,例如对更多 Web 服务器的支持、HTTP 会话、输出缓冲、更安全的用户输入处理方式以及一些新的语言结构。
PHP 5 在经过长时间的开发和几个预发布版本后于 2004 年 7 月发布。它主要由其核心驱动,即 Zend Engine 2.0
,它具有新的对象模型和数十个其他新功能。
PHP 的开发团队包括数十名开发者,以及数十名从事 PHP 相关和支持项目的人员,例如 PEAR、PECL 和文档,以及遍布全球六大洲的超过一百个独立 Web 服务器的底层网络基础设施。虽然这只是一个基于往年统计数据的估计,但可以肯定的是,PHP 现在已安装在全球数千万甚至数亿个域名上。
PHP 6 的计划是在引擎和语言中提供对 Unicode 的深入支持。这项工作后来被放弃,但针对 PHP 6 的其他功能被并入 PHP 5.3(命名空间)和 PHP 5.4(trait,“简短”数组语法)。