PHP 脚本:随心所欲的代码逐渐流行
作者信息:Sudhakar Ramakrishnan
初发日期:2004 09
关键字:PHP 脚本
摘要:
要使动态内容的 Web 站点保持运行,脚本语言 PHP 是种不错的方式 — 前提是您知道它能够做什么,以及不能做什么。下面让我们来深入地了解 PHP,了解脚本语言将如何发展,以及它们在不断变化的 Web 中逐渐增多的应用。
[img]http://www.oracle.com/technology/oramag/webcolumns/2003/opinion/images/ramakrishnan.jpg[/img]
记得 HTML 从1.0 版发展到 2.0 版的那些令人兴奋的日子吗,那时掌握一种新的 Web 语言就和查看 Web 站点之后的代码一样简单?记得轻松的学习基础 HTML 吗?记得能够随意地构建出一些代码,并在编写时快速地查看外观,而且如果它不能运行,能够容易地修改 HTML 代码吗?没有 IDE,没有对象和类。只需一个文本编辑器、一些标记和您自己的聪明才智。堪称快速和经济高效!
这些日子不会永远消逝。这种“保持简单”的精神在 PHP(近几年来得到广泛应用的一种脚本语言)中继续延续。这种语言在不断发展,并逐渐知道 PHP 能做什么以及不能做什么,并且使 Web 应用程序更加易于构建。
从默默无闻的新生事物到 Web 上的明星角色
就像二十世纪五十年代初涉影坛的好莱坞演员,PHP 真正的开始并不广为人知。有些人认为 PHP 代表“个人主页”。有些人认为 PHP 是其发明者姓名的首字母缩写。实际上,PHP 代表超文本预处理器 (Hypertext Pre Processor),它是由一个名叫 Rasmus Lerdorf 的人在 1994/95 年左右发明的。Lerdorf 提出了 PHP 框架,作为跟踪 Web 站点的访问者如何查看其在线简历的一种方式。他公开发布了最初的超文本预处理器源代码,以帮助其它的 Web 开发人员对在线内容执行类似的操作。
当时 Web 开发人员受到 HTML 中提供的表示特性的打击,开始发现这种新的 PHP 脚本语言在构建动态内容的 Web 站点时有多大的好处。PHP 代码可以直接嵌入到 HTML 代码中,而且这种年轻的脚本语言就像 HTML 一样易于掌握。
对开发人员而言,这意味着可以很快学会 PHP,可以快速构建动态内容的 Web 站点,对代码的修改也可以快速地完成。在开发人员编程时,可以立即查看结果,无需 IDE,也无须困扰于处理用户类型和整数类型以及对象和类 — 它们构成了在更复杂的语言(如 Java)中开发人员需要操心的日常脑力工作。PHP 在各方面保持简单,您不必成为熟练的编程人员就可以开始使用。
由于 PHP 的入门级这一特性,一个开放源代码社区围绕着该语言成长起来,以帮助 PHP 开发变得更加简单。该语言现在支持几种查询协议,有一个强健的传输协议,并提供了许多不同类型的模块库来帮助构建 PHP 应用程序。
[img]http://www.oracle.com/technology/oramag/webcolumns/2003/opinion/images/ramakrishnan_php_f2.gif[/img]
来源:http://www.securityspace.com/ ,由 E-Soft Inc. 提供。日期:2003 年 11 月
所有这些结果表明在最近 3 年里 PHP 的使用得到了爆炸性的增长。回顾 2000 年,根据监控和咨询组 Security Space Web Server 的报告,只有 100,000 个站点在使用 PHP。在 2003 年 8 月,Security Space 报告使用 PHP 的 Web 站点的数量接近 140 万。
[img]http://www.oracle.com/technology/oramag/webcolumns/2003/opinion/images/ramakrishnan_php_f3.gif[/img] 来源:Netcraft。经 PHP Group 和 PHP Project 许可的信息复制,2003 年 11 月
在 2003 年 6 月,在参加了 Security Space 调查的 Web 服务器中,超过一半(大约 52%)的服务器运行有某种类型的 PHP。因为 PHP 是开放源代码,因此它无疑对其它的开放源代码 Web 产品(如 Apache Web 服务器,它是完全和 PHP 一起成长起来的)有很大的吸引力。在 Netcraft 最近的领域调查中,Apache 拥有超过三分之二的 Web 服务器市场,而第二位的 Microsoft IIS 拥有大约 24% 的份额。
[img]http://www.oracle.com/technology/oramag/webcolumns/2003/opinion/images/ramakrishnan_php_f4.gif[/img]
来源:http://www.securityspace.com/ ,由 E-Soft Inc. 提供。
PHP 在 Web 开发中的声名鹊起不仅令人惊异 —它已变得辉煌夺目!
安全性问题
有些人在安全性问题上指责 PHP。从技术角度而言,可以通过将脚本引入 Web 站点(可能攻击访问者的计算机)的 URL 来利用脚本语言。然而,保障一个使用 PHP 站点的安全性与保障任意 Web 站点的安全性没什么区别,这些类型的使用通常与粗心的站点构建和保护有关,而不是 PHP 语言自身的内在弱点。在 PHP 社区内提供了大量的最佳应用,它们可以保持站点的安全性和可用性。
此外,还有大量的 SSL 站点已经在运行 PHP,这说明 PHP 开发人员在构建时考虑了安全性因素。
PHP、PERL、C++ 和 Yahoo!
另一种得到普及(虽然比不上 PHP 的增长)的脚本语言是更高级的实用摘录和报告语言 — PERL 语言。PERL 主要用于处理文件和执行文本操作。许多系统管理员将 PERL 用于系统实用程序和各种软件创建和诊断工具。Oracle 的数据库访问在 PERL 中非常强大,并且近来用 PERL 完成了相当多的图形程序设计。在 Web 环境下,PERL 已成为 Web 上的最稳定的脚本语言之一,并且现在已得到了十多年的广泛应用。
PERL 和 PHP 共同拥有的基础是它们快速的原型构建和“随心所欲进行编写”的框架。它们可以直接嵌入到 HTML 代码中,再次强调了快速部署的脚本语言的易于启用的特性。流行的 Apache Web 服务器现在自带了本地 PHP 支持(PHP 模块:mod_php)和一个称为 mod_perl 的 PERL 模块。将 PERL 和 PHP 一起使用可以实际地节省时间,因为二者能够很好地相互支持。
PHP 如何工作
[img]http://www.oracle.com/technology/oramag/webcolumns/2003/opinion/images/ramakrishnan_php_f1.gif[/img]
1. 产生对 PHP 脚本的 HTTP 请求
2. Apache 将请求传递给 PHP 引擎(mod_php,为 PHP 语言提供的 Apache 模块/命令行解释器,它与 Apache 集成在一起)
3. PHP 引擎分析扩展名为 .php 的脚本,并用特定的标记来启用 PHP 模式
4. PHP 引擎在服务器上执行脚本
5. 利用 PHP 扩展或 PEAR 数据库抽象库来进行数据库交互(或与 LDAP 源代码、cron 作业等进行交互)
6. 处理结果
7. 将数据转换成 HTML 代码
8. 将响应发送至客户端浏览器进行显示。
此外,PHP 的优势不仅仅局限于它的易于使用。其成功的关键是 PHP 能够与众多其它重要的 Web 协议很好地协同工作。在 PHP 内部提供了对 iMAP、SMP、SMTP、POP3 的广泛支持,并且许多类型的数据库正在增加 PHP 支持。
但且慢!难道除此之外就没有其它的语言能够做 PHP 和 PERL 能做的这些事情吗?不管怎样,Microsoft 活动服务器页面 (ASP) 框架声称能够处理完全相同的这些功能。我们还有 Java 的拥护者,他们将告诉您 Java ServerPages (JSP) 也行得通。但 Microsoft 是专利产品,并且不是跨平台的,而 JSP 意味着必须将一切编译成 servlet 并将那些 JSP 标记嵌入到表示层中。
这是问题的关键—没有一种语言能够完成所有这一切。PHP 非常适用于快速启动和运行以及处理动态内容,但如果您在寻找真正的商务逻辑功能,您将不得不到 PHP 之外去寻找。在最近举行的 PHP West 会议上,Yahoo! 的一位经理将 PHP 的局限称为“实施两次”的问题。随着 Yahoo! 开始将更多的商务逻辑添加到它的表示层中,将这个网站变成全球最大的门户之一,有一些原来用 PHP 构建的元素不能有效地运行了。这些元素不得不用其它的语言来重新编码,从而本质上是实施了两次。这并不意味着 Yahoo! 抛弃了快速启用的 PHP。目前,Yahoo! 混合使用 PHP 和 PERL,加上一些 3GL 代码(如 C++),以处理更重的商务逻辑负担。
这说明 PHP 适用于很多方面,但负担沉重的商务逻辑不是其中之一。此外,这种语言缺少模型-视图-控制框架,因此代码不能轻易地重用以及适用于不同的大范围环境。这种语言只是还没有发展到全面的企业级开发特性这一步。
但因为 PHP 的主要的优势是快速部署特性,无论如何 Web 站点本身不会始终遵循特定的框架。Web 站点将发展,并在将来将具有更多的功能。站点可能从“只是让某些功能启动”的紧急状况下开始,但随着自然的趋势,站点可能被要求具有越来越多的功能。这可 能很容易地引起 HTML 代码的膨胀,从而带来性能问题。Yahoo! 和其它许多 PHP 的拥护者将 PHP 用于主要关心外观和快速部署的特定情况,而用 C++ 和其它的语言来承担更复杂的任务,从而解决了上述问题。
Quo Vadimus?
我们将去往何方?PHP 当前正处于第 3 个发展周期,在 PHP West 会议上,人们对在 PHP5 中增加更多企业级功能的潜力兴奋不已。例如,提出的想法之一是引入类型和参数的概念。此外,访问级别限制(如公共、私有、保护)也正被考虑,同样还有引用 的概念—所有这些使 PHP 更加面向对象,在语法上与 Java 更相似。
我害怕的是将来的 PHP 版本将具有更复杂的、难度更高的编程语言的形式。它将提高入门的障碍,就像当 HTML 从简单的 1.0 和 2.0 版发展到 6.0 版时,我们在其中看到的缓慢建立的障碍一样。现在要掌握它,需要更高级的编程技能。
PHP 天生用来快速构建动态 Web 站点。学习 PHP 的门槛很低,它的表示特性很丰富,它与 Web 协议和后端数据库的兼容性很好,它的价格标签……嗯,不存在。开发人员希望的是 PHP 保持它的根本,并遵循这一多年以来的原则:使它保持简单和傻瓜型……
Sudhakar Ramakrishnan [[email="sudhakar.ramakrishnan@oracle.com"]sudhakar.ramakrishnan@oracle.com[/email]] 是 OTN 的一个高级技术编辑。在 NASA IV&V 软件研究实验室工作时,他与别人合作编写了第一个基于 Web 的进程改良工具。除了在 Sun 技术日做主题发言以外,Ramakrishnan 还在 JavaOne、国际 Oracle 用户群体大会、LinuxWorld、Oracle OpenWorld 以及 IEEE 大会上,就启用技术这一主题进行发言。
Oracle 和 PHP
自从最早出现 SQL 以来,Oracle 就一直拥护开放源代码语言 — 只要这些语言被证明是有效的。作为 Web 的最流行的语言之一,PHP 当然更具优势。Oracle 对开放源代码的承诺通过在 OTN 的开放源代码开发中心中为开发人员提供资源和最佳应用得到体现。此外,Oracle 设法开发了 Oracle 9iAS,它具有对 PHP 的特殊支持以及对其它的开放源代码语言和结构(如 PERL)的支持。