第一章
PHP基本介绍
本章重点
◆ 认识PHP
◆ PHP的历史
◆ PHP受欢迎的原因
◆ PHP所具备的竞争优势
首先在第一章中对PHP做个基本的介绍。本章着重于讨论有关PHP最常见的一些问题,例如,什么是PHP,它与类似的技术相比较性能如何……等等,本章大部份的篇幅都会花在列举PHP之所以受欢迎的原因上。
认识PHP
PHP是一种Web开发人员所馔写的Web开发程序语言。
PHP所代表的是「PHP:Hypertext Preprocessor」这个意思。实际是,它在一开始时原被称为「Personal Home Page Tools(个人首页工具)」;但是,当它的使用范围日渐广泛后,因而网络社群中大家推举出一个更新,更合适的名字(就像GNU这个缩写字代表的是「GNUᄄ@s Not Unix」)。我们可以为编写的PHP档案随便取档案的扩展名,但一般建议使用. PhpᄄAphp3和.phtml。目前使用的一般是PHP第四版,可以取扩展名为php4,当然也可以简短写成php。
PHP是属于伺服端的嵌入式HTML的scripting语言,可以用来内嵌在HTML里面或是单独以二进制文件执行(即使前者实在经常被使用)。相对应的同性质产品有微软的ASP、Macromedia的ColdFusion ,以及Sun的Java Server Pages(JSP).由于其功能与微软的产品,概念等非常相似,所以有时PHP被称为「the open source ASP」(开放原绐码版本的ASP),虽然这个公式已经被误导,因为PHP在ASP之前就存在了,但是在过去几年里内,PHP以及伺服端的Java越来越受瞩目,尽管ASP损失了一些使用率,但是这样的比较似乎不再适当。
下一章会更深入探讨伺服端scripting语言,现在读者可以把它看作是一种允许将伺服端函式添加到Web中的超级HTML标记。举例来说,我们可以用PHP组合产生一个复杂的Web网页,或是在顾客上网购物时用PHP程序触发一个自动执行的信用卡付款程序。
严格来说,PHP与Web版面配置,事件或外观设计等方面都有太大的关系。实际上,绝大多数PHP的功能对于终端使用者而言是不会有感觉的。当某个使用者观看一个PHP网页时,他并没有必要去分辨该页面是不是用HTML语法写的,因为PHP的最终结果也还是HTML。
Apache HTTP服务器是市场上占据主导地位的免费Web服务器,世界上大约有55%的WWW都是执行它,而PHP就是它的正式模块之一。也就是说,PHP scripting引擎能够内建于Web服务器中,因而有更快的数据处理速度。和Apache Server一样,PHP具有跨平台的功能,也就是说它本来是执行于UNIX环境,但也可以在Windows上执行。所有Apache Software Foundation(http://www.apache.org/)支持的软件开发项目,包括PHP,都是开放原始码的软件。
PHP的历
PHP 继承自一个老的工程,名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。它给这一套脚本取名为“Personal Home Page Tools”。随着更多功能需求的增加,Rasmus 写了一个更大的 C 语言的实现,它可以访问数据库,可以让用户开发简单的动态 Web 程序。Rasmus 发布了 PHP/FI 的源代码,以便每个人都可以使用它,同时大家也可以修正它的 Bug 并且改进它的源代码。
PHP/FI,一个专为个人主页/表单提供解释程序的程序,已经包含了今天 PHP 的一些基本功能。它有着 Perl 样式的变量,自动解释表单变量,并可以嵌入 HTML。语法本身与 Perl 很相似,但是它很有限,很简单,还稍微有些不协调。
到1997年,PHP/FI 2.0,也就是它的 C 语言实现的第二版在全世界已经有几千个用户(估计)和大约 50,000 个域名安装,大约是 Internet 所有域名的 1%。但是那时只有几个人在为该工程撰写少量当代码,它仍然只是一个人的工程。
PHP/FI 2.0 在经历了数个 beta 版本的发布后于 1997 年 11 月发布了官方正式版本。不久,PHP 3.0 的第一个 alpha 版本的发布,PHP 从此走向了成功。
PHP 3
PHP 3.0 是类似于当今 PHP 语法结构的第一个版本。Andi Gutmans 和 Zeev Suraski 在为一所大学的项目中开发电子商务程序时发现 PHP/FI 2.0 功能明显不足,于是他们重写了代码。这就是 PHP 3.0。经过Andi,Rasmus 和 Zeev 一系列的努力,考虑到 PHP/FI 已存在的用户群,他们决定联合发布 PHP 3.0 作为 PHP/FI 2.0 的官方后继版本。而 PHP/FI 2.0 的进一步开发几乎终止了。
PHP 3.0 的一个最强大的功能是它的可扩展性。除了给最终用户提供数据库、协议和 API 的基础结构,它的可扩展性还吸引了大量的开发人员加入并提交新的模块。后来证实,这是 PHP 3.0 取得巨大成功的关键。PHP 3.0 中的其它关键功能包括面向对象的支持和更强大和协调的语法结构。
这个全新的语言伴随着一个新的名称发布。它从 PHP/FI 2.0 的名称中移去了暗含“本语言只限于个人使用”的部分。它被命名为简单的缩写“PHP”。这是一种递归的缩写,它的全称是——PHP: Hypertext Preprocessor。
1998 年末,PHP 的安装人数几近 10,000,有大约 100,000 个网站报告他们使用了 PHP。在 PHP 3.0 的顶峰,Internet 上 10% 的 Web 服务器上都安装了它。
约九个月的公开测试后,官方于1998年6月正式发布 PHP 3.0。
PHP 4
1998 年的冬天,PHP 3.0 官方发布不久,Andi Gutmans 和 Zeev Suraski 开始重新编写 PHP 代码。设计目标是增强复杂程序运行时的性能和 PHP 自身代码的模块性。PHP 3.0 的新功能和广泛的第三方数据库、API的支持使得这样程序的编写成为可能,但是 PHP 3.0 没有高效处理如此复杂程序的能力。
新的被称为“Zend Engine”(这是 Zeev 和 Andi 的缩写)的引擎,成功的实现了设计目标,并在 1999 年中期首次引入 PHP。基于该引擎并结合了更多新功能的 PHP 4.0,在 PHP 3.0 发布两年后,于2000年5月发布了官方正式版本。除了更高的性能以外,PHP 4.0 还包含了其它一些关键功能,比如:支持更多的 Web 服务器;HTTP Sessions 支持;输出缓存(output buffering);更安全的处理用户输入的方法;一些新的语言结构。
PHP 4 是当前 PHP 的最新版本。修改和增强 Zend Engine 以使 PHP 5.0 整合新功能的工作已经开始。
今天,已经有 10,000 名开发人员(估计)和几百万网站报告已安装了 PHP,占整个 Internet 域名的 20%。
PHP 的开发小组有很多优秀的开发人员,同时还有大量的优秀人才在进行 PHP 相关工程的开发工作,如 PEAR 和 PHP 文档的工程。
PHP 5
PHP 的未来主要受其核心,Zend Engine 控制。PHP 5 将包含新一代的 Zend Engine 2.0。请访问其网站以获取更多关于该引擎的信息。
史
PHP受欢迎的理由
PHP之所以受欢迎的理由非常多,这里介绍几个主要原因。
PHP是免费的
就PHP本身可不花你一毛钱。把Apache/PHP/MySQL结合在一起而能执行于廉价的低阶硬件上这件事,是你决定采用IIS/ASP/SQL Server时想都不用想的。
为了进行比较,表1-1列出一些在美国同类产品大致的零售价格,所有的价格都是以单一对外Web服务器并且比照最适用的数据库与开发工具而论,$0表示为一个不需成本且实际上常被使用的选择,在现行的使用上,Microsoft并未上市,NET服务器套件下一代的Web服务器,但是我们可以保守推论价格会上升而非下跌。
表格1-1 零售价格比较 (美金)
开放源码软件: 便宜亦好货
很显然地,我们是生活在一个物质世界中,我们经常碰到类似「一分钱一分货」、「天下没有白吃的午餐」和「完美的东西只存在于传说之中」的格言。因此,大家难免会对免费软件的质量和生存产生怀疑。直到最近,那些不用花钱的软件(正式名称是共享软件或自由软件)一般仍然被归入下列三类:
小型的和非商业软件
完成一般性低阶工作的软件
为那些有着各种社会政治「问题」使用者编写的软件
现在应该彻底地改变这些陈腐的观念。毫无疑问,我们正置身于一个商业软件不断变化的世界中。现在,许多重要使用者软件都是免费发送的:e-mail 客户端软件、网页浏览器、游戏,甚至服务齐全的办公套件软件,只要它们的制作者一建立Web版本或设置好FTP服务器,就会立即以最快的速度发布。使用者软件的意义正在逐渐转移,就像哪朵花甜就能吸引蜜蜂授粉,换句话说,它被当成一种方法,帮助卖出更多服务器硬件和操作系统,提高结合性,成为广告管道,销售一些操作上的工具组件或销售股权。因此,软件的零售价格已经不再是用来评价软件口质或其使用者层面的可靠尺度。
在伺服端,开放原始码的产品变得更加强健;它们不但可以同最优秀的商业软件比美,而且在很多方面人们会感觉它们已经超过了商业软件。不要认为这只是我们的观点,尽管去咨询IBM公司,所有的硬件厂商,美国太空总署NASA,法国电讯公司FTE,西门子公司、Kinkoᄄ@s公司,英国女王,墨西哥教育体系机构。如还对此有所怀疑,可以从下述站了解更多的相关内容:
http://www.opensource.org
http://www.fsf.org
PHP的授权
免费的开放原码和免费软件由一系列的授权架构来提供保证,其中最著名的是GPL(GNU General Public License)或(copyleft)这两个。PHP过去常常是同时在GPL和它自己的授权下散布公开的,允许每一位使用者自己从中自由选择一个。然而这种情况有所改变了:该程序现在已经视为一个整体在它自己定义的极端自由放任主义的PHP4授权下公开散布:而Zend则是当作一个单独产品在Q Public License(是在将Zend从PHP中分出来定价并销售时)下公开散布。
在以下的Web网站中可以找到有关授权的详细说明:
http://www.php.net/license.html
http://www.troll.no/qpl/annotaed.html
绝大多数人是透过免费下载得PHP,但也可以把它当作一份Linux distribution的产品,一本技术著作或其它一些产品的一部份来购买。要后面这种情况下,有人可能会对PHP免费的说法产生怀疑。这可经从两方面来看,尽管不能要求对大多数开放原始码软件付费,却需要为该软件的寄送付费,哪怕是以最便宜的方式,例如将它存在磁盘中并(邮寄或用其它工具)传送给其它使用者。另外,有些工作或风险是由市场来完成和承担的,而这些工作又是开发小组不去做或承担的,这时使用者也需要付费。例如,为了保证收到的软件的每一个拷贝都是没有病毒或具有一定的质量,或是为了不冒险去使用带有病毒的CD-ROM,就需要付一定的费用。
一般来说,对于不同的情况,开放原始码的软件使用者能够自由选择:最佳的效益/价格比,不付费和没有保障。或在用高昂的价格但是佣有良好的技术支持,或者是介于两者之间等等。然后,目前还没有出现为PHP销售提供服务和技术支持的组织(尽管有人推测这将成为Zend组织会更有价值的卖点之一)。
其它的开放原始码的产品,如Linux,就是类似RedHat这样的公司来回答使用者的问题:这方面的商业运作对于PHP才刚刚萌芽。
PHP上手容易
相对于同一功能的其它操作方式来说,PHP非常容易学习。与Java Server Pages或基于C语言的不CGI不同,PHP不会要求使用者只中因为在进行一个小小的数据库存取呼叫动作,而要先学会一整门程序语言的学问。Perl常被人们半开玩笑地称为「唯写语言(Write-oniy language)」,与它不同的是PHP的语法很容易理解,并且人机界机非常友善。而不像ASP.NET, PHP已经很稳定而且可以解决你现今的问题。
另外,PHP还为使用者预先定义了许多非常有用的函式(例如开启Oracle数据库的连接,或是从IMAP服务器中取电子邮件的函式)。在学习PHP时还可以看到很多完整现成的范示script。实际上,要使用PHP时,完全可以透过修改这些已有的script程序,而不用把时间浪费在编写程序时所碰到的一些小小的语法错误上。
为了怕读者有所误解,必须说明:「容易」对不同的人及其不同的情况可能会有不同的解释,举命例来说,对于很多Web开发者而言,「容易」好像就意味着是图形接口,鼠标的拖放操作和所见即所得的环境。要想成为一名真正熟练的PHP使者,首先需要能够轻松自如地编辑HTML。我们可以先使用所见即所得的网页编辑工具来设计网站,美化页面及插入客户端的功能,之后再把PHP功能加入到页面的原始码中即可。利用某些方法甚至可以将有详细的介绍。无论如何,假如你不想碰程序代码部份,就想要充分掌握使用PHP的各项功能,这是不太可能的哦。
绝大多数PHP的进阶使用者(包括大多数的开发小组成员)是手工编写程序代码的死忠份子,他们对程序式设计工作有某种坚持,例如,他们认为手写程序代码非常美妙和整洁,而且具有与浏览器兼容最大兼容性,因此,手写程序代码是唯一可走的路,对此凶们往往不吝用激烈的言辞来表达。PHP的一些社群组都是透过电子邮件来提供协助,或是进行一些小的技术交易。如果你想要加入这些社群,必须能够具备快速解析纯文字原程序代码的难力。一些所见即所得式编辑器使用者有时会请求这些PHP社群的成员透过观看他们的网页来协助诊断错误,但很少人可以得到好评价。
上面我们说了一大堆PHP很简单的理由,其实它只是比HTML稍微复难一点,但又要比JavaScript或ASP简单一点,此外绝对没有JSP或ASP.NET复制就是了。
PHP为嵌式(embedded)
PHP是内嵌在HTML中的。换句话说,PHP的页面只是必要时「跳到」PHP模式的普通HTML的页面。下面列举一个例子说明:
范例1-1 greeting.php
当某个客户端对该页提出请求时,Web服务器就会对它进行处理。也就是说,它会在该页面中由上而下寻找试图解决的PHP部分。首先,剖析器将处理所有的已指定值的变量(用$来标示),并试着将它们插入后面的PHP 命令(在上述情况就是print()函式)。如果每一步都进行得很顺利,剖析器最终将把一个HTML页面传回到客户端的浏览器上,
如图1-1所示
如果从客户端浏览器上查看原始程序代码[从View(检视)菜单上选择Source(检视原始码)或PageSource(网页原始码)],就会看见下列程序代码:
这与你编写的HTML完全相同,是不是很简单呢?
PHP的HTML内嵌特性可以提供许多帮助:
◆ PHP能很快速地插入到由所见即所得式编辑工具所产生
◆ 的程序代码中。
◆ PHP将设计师和script编写者的工作分离开来。
◆ HTML的任何一行都不必用程序语言重写。
◆ PHP能够减少劳成本,提高效率。
无须编辑
或许所有的内嵌script语言最令人动心的就是「写下来并执行即可」,在被测试或使用以前不需要先编辑译成二进制代码。PHP是直译的语言(就像是目前绝大多数新式的计算机程序语言)。尽管Zend做了一些幕后工作,预先编译成一种中间格式,以便提高复杂script的执行速度。
如果碰到想要编译时又该怎么办呢?如果想要发布的是不可反组译的二进制代码,以便其它人虽然能够使用这些程序代码,但是不能看到原始程序的内容。在这种情况下,编译就显得很有必要了。Zend小组正在开发一个最佳化的编译器Zend Encoder ,将使PHP的「编译」变成可能,同时这也会促进复杂的大型PHP script的使用和发展。
PHP具有跨平台特性
PHP可执行于任何一种最流行的UNIX(包含Mac OS X )或Windows版本的操作系统上。目前世界上绝大部分的HTTP服务器都是架在上述两种操作系统之上。
PHP与目前处于领先地位的三种Web服务器是相容的:UNIX(包括Mac OSX)或Windows的Apache HTTP服务器,微软的IIS和Netscape Enterprise服务器(又称iPlanet服务器)。它还可用于几种鲜花人知的服务器上,其中包括Alex Belits的fhttpd,微软的Personal Web Server(PWS),AOLServer以及Omnicentrix的Omniserver应用服务器。不过Macintosh平台并不支扔PHP。表1-2显示的是操作系统与Web服务器组合的简单表格。
表1-2 操作系统与支持PHP的Web服务器
现在PHP可以在Macintosh上执行,所以PHP几乎可以跨全部的平台,你可以在任何单独OS端使用你喜欢的工具开发,然后将这些PHP script上载到UNIX或Windows服务器中。第三章将详述这部分处理地程。
PHP并不是标示语言
PHP是一种真正的程序语言。相较而言,ColdFusion就比较像HTML一样是用预先定义的Tag来标记。在PHP中,只要键入名称和定义就可以按自己的需要定义函式。在CouldFusion中,必须使用其它人开发的标记,或者进行自订扩充标记的开发过程。
一个PHP社群成员曾经说过:「CouldFusion让容易的事情变容易,但让中等难度的事情变变成不可能实现」。每个程序员都会认同,一旦有能力用大括号和圆圈,就绝对不会再回头使用标记。
PHP的稳定性(stabie)
在这里提到的[稳定性]有两种不同的含义:
1. 服务器并不需要经常重新启动。
2. 软件不用经常升级更动,并且发行版本之间不会不兼容。
令人高兴的是,这两点都适用于PHP。Apache Server一般公认中最稳定的主流Web服务器,拥有令人称羡的正常执行时间比率,虽然它不是最快的,对于管理员来说也不是最简单的,不过一旦安装及设定好它,Apache HTTP Server就绝少持掉。每次改变设定时,也不需要重新启动服务器(至少在UNIX这一方面是如此)。PHP继承了这种可靠性,再加上它自己的稳固和轻便,在1999年十月的Network Computing实验室中进行为期两个半月的实机测试中,Apache Server和PHP在环境稳定性方面轻松战胜IIS/Visual Studio组合和Netscape Enterprise Server/Java组合。
在功能特性稳定度方面,PHP也是很好的。开发专队对自己的项目很有自信,也有一个清楚的目标,因此会拒绝来自一些使用者的不当索求。他们的大部份努力都让产品水平提升,诸如让剖析器执行得更快速,可以和更多的主流数据库进行数据交换,或者能够添加更好的Session支持。从过去经验上来看,PHP的各版本之间很少有功能被剔除。
PHP非常快速
PHP在执行上十分快速,尤其是在UNIX平台上编译到Apache模块的情况下执行。
与CGI script相比,PHP4几乎在任何使用方面上都更快得多。有个笑话说,CGI是[Can′t Go Instantly(不能马上执行)]的缩写。尽管许多CGI script是以C语言编写的,这是最低阶段的语言之一,因此比大多数程序设计语言的速度快得多,但每个从HTTP服务器切断的请求都需要开始一个全新的处理程序,这个问题阻碍了CGI的应用。这种切断和产生所需的时间的资源相当多,限制了可执行的平行处理数量。其它CGI script语言,诸如Perl和Tcl,都相当缓慢。大多数Web网站出于效能和安全性的原因,都逐渐不再使用CGI了。
由于它是直译式执行,而不是经过编译的,因而性能上稍微受到一些影响,但视为Web服务器模块之一的PHP还是比较利多于弊,这样做还是值得的。当以这种方式编译时,PHP成为HTTP服务器的一部分。因为没有与单独应用程序服务器的来回传送(例如使用ColdFusion时的情况),因此还是能够最大限度地满足请求。
尽管没有正式的测试基准来对这两面进行比较,但有许多迹象以及小型的基准测试中言明了,PHP在大多数应用程序中至少和ASP一样快(例如,请连上Zend.com网站实际感受一下)。
PHP是开放的
我们已经讨论过开放原始码软件的成本上的优势。这些授权的另一主要结论是软件的完整原始码必须包含在任何发行的版本中。
实际上,PHP的 UNIX版本只以原始程序代码方式在发行,直到目前,开发团队拒绝了无数恳求,坚决不为任何UNIX平台发布官方版的二进制版本。起初,初学使用者(尤其是那些对于UNIX也是新手的使用者)可能会感觉原始程序代码就像用第三条腿般[那么好用],且大多数人仍期盼选用便捷的rpm方式。不过从实质和理想上的理由,采用含括满是[.c]和[.h]档案的档案夹 都是不可免的。
最直接的实质好处是,我们可以针对真正需要的内容来编译PHP使用,这种方法在速度的安全性方面都有优势。例如,可以选择挂上不同的数据库的接口,或是在 Apache更加安全或更新的版本问市时,根据需要在任何时候重新编译,另外还可以确定了自己需要XML支持时再将该功能编译进去。
将开放原始码软件与它的竞争者有所区隔的不只是价格,还包括了控制权,许多软件都是设定在某些条件下才会放弃其控制权,但是仔细看看有关的授权说明,一般都会
看到关于如何使用软件的[限制]。可能允许在家中执行它,但不能在办公室使用;可能允许在笔记本计算机上加载它,但假如用于商业目的则违反了规定。或者,最常见的情况是,可以将它用于任何目的,但使用者根本别想看到原始程序代码,更别提修改它了。甚至还有社群援权的规范,强制要求使用者为链接库贡献一份力量,但却还是要使用者为最终产品的使用而付费!
注意:
不要去想怎样违反软件援权,尤其是对这些无需付费的软件,并没什么好理由需要违反这一规则。此外,对于软件的开发人员,这种报答也太不公平了。
表1-3原始码/收费范围
类似PHP这样的开放原始码的软件并不打算限制使用目的,限定使用者范围或者提出其它条件。这些权利中最重要的就是允许使用者对原始程序进行修改并发布。在最极端的情况下,这种行为称作「程序代码分裂(cold forking)」。
这意味着,如果有某些人的开发方向与PHP开发专队矛盾了,他们可以把多年来幸勤工作得来的所有程序代码用来当成自己产品的基础;只是不能称之为PHP,且必须在自已的档中提到原来程序代码创作者,让他们得到应有的赞誉。在大多数情况下,这种另起炉灶的方法可能不是很好主意,但使用者有权利尝试,由于种种原因,已经有人试过很多次,其基本原则是,原始码发布的方式使得几乎不可能由某个人或组织凭借一个程序来和整个社群对抗,因为每个使用者都可以随意取走所有原始程序代码来使用。
开放原始码的新使用者应该要注意到,开发人员也在享用这种权利。任何时候,原创者Rasmus和公司都可以与现在社群不同,并把未来工作成果的目标放在基于PHP的商用产品或竞争争产品中。当然,对于那些想乍自己举起指挥棒的人来说,目前的原始程序代码仍是可用的,而且对于像PHP这样的大型产品,还是有相当多的志愿开发人员不断投入改进。
这样的结果很容易让人忽略了开放原始码软件的一个优势,那就是可以相当肯定该软件在几年内仍到处可见,不论它是什么样子呈现。在如今这些生命周期短得像朝阳一样的产品中,很难选取一种具有持久性的工具。使用过OS/2、Amiga、Next、Newton、Firefly、Netscape以及其它曾流行一时的技术的人们,都了解那种被拒绝的痛苦,如公司破产,决定停止对一种技术的支持,或者卖给了另一家公司并有了新方向……等等。在发现PHP之前我们这群人所采用的是另一种伺服端script工具(现在它已经没有生命力了),虽然目前已经忘记了曾有的感受,但还是有些失落感。开放原始码模式降低了几年内突发变故的可能性,让使用者的长期计划更加可行。
PHP整合能力甚佳
PHP能够很容易地与其它程序和协议进行交流。PHP开发团队愿意给予绝大多数使用者最大范围的弹性。
PHP的数据库连接能力很强,对目前约十五种最流行的数据库以及ODBC驱动程序皆有所支持。另外,PHP还支持多数主流的协议,例如POP3、IMAP 和LDAP等。PHP4还提供对于Java及分布式对象架构(COM和CORBA)的支持,第一次使得n-tier开发变成可能。
若是有PHP不支持的多数原因大都因为对方应用程序属于「封闭」原始程序代码的形式。例如, Microsoft不热衷于和PHP的开放原始码专案合作。那些在PHP邮寄清单(mailing list)讨论区上抱怨缺Mac OS 9或.NET支持的使用者可能是没有搞清楚问题缘由所在。
PHP快速的加入新工能
专门开发网页技术的使用者可能有时会因为产品标准官方用来提供迅速技术的新功能加入而感到无所适从,但在PHP方面这是没有问题的,因为它所仰赖的只是开发者,C编译器,以及加入重要新功能的梦想,这并非表示PHP团队会不经社群声音就任意接受将某功能加入发行版中,但是独立的开发者仍然可以将自己的扩充功能藉由稍后加入主要PHP套件内的方式来运作,例如,Dan Libby完美的xmlrpc-epi扩充组件就在PHP发行4.1版本的时候被采用,而它是在首先以独立套件的发行后数月才被加入的。
开发PHP也是相一当一致而持续进行的,虽然仍由一些主要的影响问题,例如PHP 3与PHP 4之间过渡的问题,这些主要都成因自解析器本身,程序员事实上在版本之间大多数的扩充组件并不会有太大问题,此外PHP专队根据开放原始码「尽早发行、常常发行」的原则,这使得开发者可以有很多机会可以变更并提出bug 建议,如此比较起.NET方式的话,会发现它让开发者等了Microsoft将近一年但是还没有更新IIS也甚至尚未发行主要版本的.NET服务器。
PHP正在流行并逐渐成长
自94年始,PHP的诞生到如今,PHP已经从一种针对网络开发的优秀工具变成了一款适合于企业配置的完全的平台,而且它正在变得越来越普及,并且拥有了一个巨大的资源基础,目前PHP正被1500多万个网站使用,PHP本身也迅速成为网络应用的最流行的语言。特别是在欧洲和北美地区,PHP已经被应用于包括金融、政府、交通、电信、媒介、娱乐等各大行业,完全脱离了一个简单网络语言开发工具的境界。
在国外,数以百万计的专业工程师将PHP作为主要开发语言,形成了不同地域的俱乐部或者类似的团体组织,经常一起探讨有关PHP的大家关心的问题。例如最近一段时间,无论在欧洲的比利时、荷兰、英国,还是北美的美国、加拿大等都有一些团体在积极的活动。我们中国作为最大的互联网国家,有着众多的PHP爱好者,可以说比任何一个国家的都多,希望我们大家联合起来,倡议组建一个中国规模最大的PHP中国。以此来推动中国的PHP发展,和为广泛的PHP爱好者提供一个交流的平台。
正如你可以看出的,从1998年十月到1999年十月这段时间,PHP的使用者在网域数目上表现了800%的成长率。随着Web网站而变得无处不在,并且其中大部分都不再仅是简单的静态HTML页,PHP有望迅速获得绝对数量的使用者。
尽管确定牢固地位有些困难,但PHP相对于类似产品来说的确处于强势。24%的Web服务器采用了微软的Active Server Pages技术,而接受调查的网域中有大约4%应用了ColdFusion.根据更大规模并且更精确的采样,所有Web服务器中有24%使用了PHP,所以可以称得上是最流行的伺服端网页程序语言。
Active Server Pages和ColdFusion很容易见到,因为许多大型电子商务网站都选择使用它们。但是有多数Web网站都是提供资讯形式,而非有收益或是国家政府的,因而没法子应付太高的开发费用。在这类的网站中,PHP比竞争对手享有更实质性的竞争优势。
PHP并不属于任何人
PC工业的进展大都可说是「专利权标准」的编年史:先尝试建立脚点,然后在本身利益以及对客户的亏欠中相互的碰撞,最后再以新的标准取代……
但是,过去几年中,Internet提供了自发性,基于标准,无关平台的兼容性……等特性的最大容度。例如, e-mail的应用是如此广泛,就是因为客观存在使用了一个清晰而固定的标准,不管什么平台的什么程序都必须遵从这个标准。在后来想在打破这一标准的新开发案子(例如,基于HTML格林的e-mail信纸),一般都认为是偏离标准。
此外,顾客(尤其是庞大系统的大客户们)倾向于花费庞大来遵循专有的标准,这只是因为市场的倾向却非保证,而现行的方式为使用XML与Web服务来驱动,这是因为多年来顾客并不满意Java RMI,CORBA,COM,以及甚至更早期的专有方法及资料格式。
目前,软体开发人员正尝试把专利权和开放标准融合在一起。公司一方面要确保收益的维持,同时也要采用开放的标准。有一些与专利权标准相关的主要法律冲突,这些还在解决当中。最终可能会对原始码基础部分进行统一更改,甚至还可能影响到所涉及公司其未来的生存。面对氖这些不确定性,能够预知未来解决此类问题的解决方案会吸引目前大量度的厂商。
PHP拥有最大的灵话性,正因为它本身属反对专利权形式的。它并不依附于任何服务器作业系统,这一点也不像Active Server Pages。它并不依附于任何握有专利权的跨平台标准或中介软体,这一点与Java Server Pages或ColdFusion不同。它也不依附于任何浏览器、程序语言或资料库。PHP并不是照本宣科只和开放原始码的软体合作,这种具备独立性而又能合作的实用态度有助于PHP在开发领域上更顺利发展。
PHP社群PHP是由世界和各地的使用者社群以合作方式关开发和支持的,的确是有些怪兽级的程序高手会有很多想法和热情,他们的狂热的确完成了大多数工伯,把最好的思路贡献出来,并与大多数使用者维持良好关系。
对于大多数初学者来说,主要好处在于免费、无国界并且无条件的技术支援。邮寄清单(mailing list)上的人们像7-11便利商店全年无休来回答问题、帮程序码除错,并倾听你的抱怨。这种支援更具人性化,并且更真实。PHP社群成员可能会要你阅读手册,把问题转给资料库中已回答的邮件清单,或者让你发发牢骚,但他们绝对不会要你把C槽砍掉或要求你付费。通常他们会先查看你的程序码,并告知你什么地方错了,或者,甚至可以帮助你从头开始设计一个应用程序。
当你对PHP更加热悉之后,可能希望自己也有所回馈和贡献。你可以追从记录bug,并的供建议给邮寄清单上的其它人、把你的程序范例传到公共资料库让别人取用、编写相关文件分享知识给别人、当然也可以编写C或C+ +的程序码;这些都可以回报社群的方式。
摘要
PHP不是解决每个Web开发问题的万能钥匙,但它是具有很多优势的。PHP是由Web开发人员建立,并且也由Web开发人员使用。还有很多热心社群在提供支持。它们功能十分强大,性能可靠而又十分便于使用。对于各种类型的后端资料,它都提供了最佳形式的连接。我们之前没有忘记提及它是免费的这一点?要想了解PHP,最好是在许多最常见Web开发专案中使用它。\n
PHP基本介绍
本章重点
◆ 认识PHP
◆ PHP的历史
◆ PHP受欢迎的原因
◆ PHP所具备的竞争优势
首先在第一章中对PHP做个基本的介绍。本章着重于讨论有关PHP最常见的一些问题,例如,什么是PHP,它与类似的技术相比较性能如何……等等,本章大部份的篇幅都会花在列举PHP之所以受欢迎的原因上。
认识PHP
PHP是一种Web开发人员所馔写的Web开发程序语言。
PHP所代表的是「PHP:Hypertext Preprocessor」这个意思。实际是,它在一开始时原被称为「Personal Home Page Tools(个人首页工具)」;但是,当它的使用范围日渐广泛后,因而网络社群中大家推举出一个更新,更合适的名字(就像GNU这个缩写字代表的是「GNUᄄ@s Not Unix」)。我们可以为编写的PHP档案随便取档案的扩展名,但一般建议使用. PhpᄄAphp3和.phtml。目前使用的一般是PHP第四版,可以取扩展名为php4,当然也可以简短写成php。
PHP是属于伺服端的嵌入式HTML的scripting语言,可以用来内嵌在HTML里面或是单独以二进制文件执行(即使前者实在经常被使用)。相对应的同性质产品有微软的ASP、Macromedia的ColdFusion ,以及Sun的Java Server Pages(JSP).由于其功能与微软的产品,概念等非常相似,所以有时PHP被称为「the open source ASP」(开放原绐码版本的ASP),虽然这个公式已经被误导,因为PHP在ASP之前就存在了,但是在过去几年里内,PHP以及伺服端的Java越来越受瞩目,尽管ASP损失了一些使用率,但是这样的比较似乎不再适当。
下一章会更深入探讨伺服端scripting语言,现在读者可以把它看作是一种允许将伺服端函式添加到Web中的超级HTML标记。举例来说,我们可以用PHP组合产生一个复杂的Web网页,或是在顾客上网购物时用PHP程序触发一个自动执行的信用卡付款程序。
严格来说,PHP与Web版面配置,事件或外观设计等方面都有太大的关系。实际上,绝大多数PHP的功能对于终端使用者而言是不会有感觉的。当某个使用者观看一个PHP网页时,他并没有必要去分辨该页面是不是用HTML语法写的,因为PHP的最终结果也还是HTML。
Apache HTTP服务器是市场上占据主导地位的免费Web服务器,世界上大约有55%的WWW都是执行它,而PHP就是它的正式模块之一。也就是说,PHP scripting引擎能够内建于Web服务器中,因而有更快的数据处理速度。和Apache Server一样,PHP具有跨平台的功能,也就是说它本来是执行于UNIX环境,但也可以在Windows上执行。所有Apache Software Foundation(http://www.apache.org/)支持的软件开发项目,包括PHP,都是开放原始码的软件。
PHP的历
PHP 继承自一个老的工程,名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。它给这一套脚本取名为“Personal Home Page Tools”。随着更多功能需求的增加,Rasmus 写了一个更大的 C 语言的实现,它可以访问数据库,可以让用户开发简单的动态 Web 程序。Rasmus 发布了 PHP/FI 的源代码,以便每个人都可以使用它,同时大家也可以修正它的 Bug 并且改进它的源代码。
PHP/FI,一个专为个人主页/表单提供解释程序的程序,已经包含了今天 PHP 的一些基本功能。它有着 Perl 样式的变量,自动解释表单变量,并可以嵌入 HTML。语法本身与 Perl 很相似,但是它很有限,很简单,还稍微有些不协调。
到1997年,PHP/FI 2.0,也就是它的 C 语言实现的第二版在全世界已经有几千个用户(估计)和大约 50,000 个域名安装,大约是 Internet 所有域名的 1%。但是那时只有几个人在为该工程撰写少量当代码,它仍然只是一个人的工程。
PHP/FI 2.0 在经历了数个 beta 版本的发布后于 1997 年 11 月发布了官方正式版本。不久,PHP 3.0 的第一个 alpha 版本的发布,PHP 从此走向了成功。
PHP 3
PHP 3.0 是类似于当今 PHP 语法结构的第一个版本。Andi Gutmans 和 Zeev Suraski 在为一所大学的项目中开发电子商务程序时发现 PHP/FI 2.0 功能明显不足,于是他们重写了代码。这就是 PHP 3.0。经过Andi,Rasmus 和 Zeev 一系列的努力,考虑到 PHP/FI 已存在的用户群,他们决定联合发布 PHP 3.0 作为 PHP/FI 2.0 的官方后继版本。而 PHP/FI 2.0 的进一步开发几乎终止了。
PHP 3.0 的一个最强大的功能是它的可扩展性。除了给最终用户提供数据库、协议和 API 的基础结构,它的可扩展性还吸引了大量的开发人员加入并提交新的模块。后来证实,这是 PHP 3.0 取得巨大成功的关键。PHP 3.0 中的其它关键功能包括面向对象的支持和更强大和协调的语法结构。
这个全新的语言伴随着一个新的名称发布。它从 PHP/FI 2.0 的名称中移去了暗含“本语言只限于个人使用”的部分。它被命名为简单的缩写“PHP”。这是一种递归的缩写,它的全称是——PHP: Hypertext Preprocessor。
1998 年末,PHP 的安装人数几近 10,000,有大约 100,000 个网站报告他们使用了 PHP。在 PHP 3.0 的顶峰,Internet 上 10% 的 Web 服务器上都安装了它。
约九个月的公开测试后,官方于1998年6月正式发布 PHP 3.0。
PHP 4
1998 年的冬天,PHP 3.0 官方发布不久,Andi Gutmans 和 Zeev Suraski 开始重新编写 PHP 代码。设计目标是增强复杂程序运行时的性能和 PHP 自身代码的模块性。PHP 3.0 的新功能和广泛的第三方数据库、API的支持使得这样程序的编写成为可能,但是 PHP 3.0 没有高效处理如此复杂程序的能力。
新的被称为“Zend Engine”(这是 Zeev 和 Andi 的缩写)的引擎,成功的实现了设计目标,并在 1999 年中期首次引入 PHP。基于该引擎并结合了更多新功能的 PHP 4.0,在 PHP 3.0 发布两年后,于2000年5月发布了官方正式版本。除了更高的性能以外,PHP 4.0 还包含了其它一些关键功能,比如:支持更多的 Web 服务器;HTTP Sessions 支持;输出缓存(output buffering);更安全的处理用户输入的方法;一些新的语言结构。
PHP 4 是当前 PHP 的最新版本。修改和增强 Zend Engine 以使 PHP 5.0 整合新功能的工作已经开始。
今天,已经有 10,000 名开发人员(估计)和几百万网站报告已安装了 PHP,占整个 Internet 域名的 20%。
PHP 的开发小组有很多优秀的开发人员,同时还有大量的优秀人才在进行 PHP 相关工程的开发工作,如 PEAR 和 PHP 文档的工程。
PHP 5
PHP 的未来主要受其核心,Zend Engine 控制。PHP 5 将包含新一代的 Zend Engine 2.0。请访问其网站以获取更多关于该引擎的信息。
史
PHP受欢迎的理由
PHP之所以受欢迎的理由非常多,这里介绍几个主要原因。
PHP是免费的
就PHP本身可不花你一毛钱。把Apache/PHP/MySQL结合在一起而能执行于廉价的低阶硬件上这件事,是你决定采用IIS/ASP/SQL Server时想都不用想的。
为了进行比较,表1-1列出一些在美国同类产品大致的零售价格,所有的价格都是以单一对外Web服务器并且比照最适用的数据库与开发工具而论,$0表示为一个不需成本且实际上常被使用的选择,在现行的使用上,Microsoft并未上市,NET服务器套件下一代的Web服务器,但是我们可以保守推论价格会上升而非下跌。
表格1-1 零售价格比较 (美金)
开放源码软件: 便宜亦好货
很显然地,我们是生活在一个物质世界中,我们经常碰到类似「一分钱一分货」、「天下没有白吃的午餐」和「完美的东西只存在于传说之中」的格言。因此,大家难免会对免费软件的质量和生存产生怀疑。直到最近,那些不用花钱的软件(正式名称是共享软件或自由软件)一般仍然被归入下列三类:
小型的和非商业软件
完成一般性低阶工作的软件
为那些有着各种社会政治「问题」使用者编写的软件
现在应该彻底地改变这些陈腐的观念。毫无疑问,我们正置身于一个商业软件不断变化的世界中。现在,许多重要使用者软件都是免费发送的:e-mail 客户端软件、网页浏览器、游戏,甚至服务齐全的办公套件软件,只要它们的制作者一建立Web版本或设置好FTP服务器,就会立即以最快的速度发布。使用者软件的意义正在逐渐转移,就像哪朵花甜就能吸引蜜蜂授粉,换句话说,它被当成一种方法,帮助卖出更多服务器硬件和操作系统,提高结合性,成为广告管道,销售一些操作上的工具组件或销售股权。因此,软件的零售价格已经不再是用来评价软件口质或其使用者层面的可靠尺度。
在伺服端,开放原始码的产品变得更加强健;它们不但可以同最优秀的商业软件比美,而且在很多方面人们会感觉它们已经超过了商业软件。不要认为这只是我们的观点,尽管去咨询IBM公司,所有的硬件厂商,美国太空总署NASA,法国电讯公司FTE,西门子公司、Kinkoᄄ@s公司,英国女王,墨西哥教育体系机构。如还对此有所怀疑,可以从下述站了解更多的相关内容:
http://www.opensource.org
http://www.fsf.org
PHP的授权
免费的开放原码和免费软件由一系列的授权架构来提供保证,其中最著名的是GPL(GNU General Public License)或(copyleft)这两个。PHP过去常常是同时在GPL和它自己的授权下散布公开的,允许每一位使用者自己从中自由选择一个。然而这种情况有所改变了:该程序现在已经视为一个整体在它自己定义的极端自由放任主义的PHP4授权下公开散布:而Zend则是当作一个单独产品在Q Public License(是在将Zend从PHP中分出来定价并销售时)下公开散布。
在以下的Web网站中可以找到有关授权的详细说明:
http://www.php.net/license.html
http://www.troll.no/qpl/annotaed.html
绝大多数人是透过免费下载得PHP,但也可以把它当作一份Linux distribution的产品,一本技术著作或其它一些产品的一部份来购买。要后面这种情况下,有人可能会对PHP免费的说法产生怀疑。这可经从两方面来看,尽管不能要求对大多数开放原始码软件付费,却需要为该软件的寄送付费,哪怕是以最便宜的方式,例如将它存在磁盘中并(邮寄或用其它工具)传送给其它使用者。另外,有些工作或风险是由市场来完成和承担的,而这些工作又是开发小组不去做或承担的,这时使用者也需要付费。例如,为了保证收到的软件的每一个拷贝都是没有病毒或具有一定的质量,或是为了不冒险去使用带有病毒的CD-ROM,就需要付一定的费用。
一般来说,对于不同的情况,开放原始码的软件使用者能够自由选择:最佳的效益/价格比,不付费和没有保障。或在用高昂的价格但是佣有良好的技术支持,或者是介于两者之间等等。然后,目前还没有出现为PHP销售提供服务和技术支持的组织(尽管有人推测这将成为Zend组织会更有价值的卖点之一)。
其它的开放原始码的产品,如Linux,就是类似RedHat这样的公司来回答使用者的问题:这方面的商业运作对于PHP才刚刚萌芽。
PHP上手容易
相对于同一功能的其它操作方式来说,PHP非常容易学习。与Java Server Pages或基于C语言的不CGI不同,PHP不会要求使用者只中因为在进行一个小小的数据库存取呼叫动作,而要先学会一整门程序语言的学问。Perl常被人们半开玩笑地称为「唯写语言(Write-oniy language)」,与它不同的是PHP的语法很容易理解,并且人机界机非常友善。而不像ASP.NET, PHP已经很稳定而且可以解决你现今的问题。
另外,PHP还为使用者预先定义了许多非常有用的函式(例如开启Oracle数据库的连接,或是从IMAP服务器中取电子邮件的函式)。在学习PHP时还可以看到很多完整现成的范示script。实际上,要使用PHP时,完全可以透过修改这些已有的script程序,而不用把时间浪费在编写程序时所碰到的一些小小的语法错误上。
为了怕读者有所误解,必须说明:「容易」对不同的人及其不同的情况可能会有不同的解释,举命例来说,对于很多Web开发者而言,「容易」好像就意味着是图形接口,鼠标的拖放操作和所见即所得的环境。要想成为一名真正熟练的PHP使者,首先需要能够轻松自如地编辑HTML。我们可以先使用所见即所得的网页编辑工具来设计网站,美化页面及插入客户端的功能,之后再把PHP功能加入到页面的原始码中即可。利用某些方法甚至可以将有详细的介绍。无论如何,假如你不想碰程序代码部份,就想要充分掌握使用PHP的各项功能,这是不太可能的哦。
绝大多数PHP的进阶使用者(包括大多数的开发小组成员)是手工编写程序代码的死忠份子,他们对程序式设计工作有某种坚持,例如,他们认为手写程序代码非常美妙和整洁,而且具有与浏览器兼容最大兼容性,因此,手写程序代码是唯一可走的路,对此凶们往往不吝用激烈的言辞来表达。PHP的一些社群组都是透过电子邮件来提供协助,或是进行一些小的技术交易。如果你想要加入这些社群,必须能够具备快速解析纯文字原程序代码的难力。一些所见即所得式编辑器使用者有时会请求这些PHP社群的成员透过观看他们的网页来协助诊断错误,但很少人可以得到好评价。
上面我们说了一大堆PHP很简单的理由,其实它只是比HTML稍微复难一点,但又要比JavaScript或ASP简单一点,此外绝对没有JSP或ASP.NET复制就是了。
PHP为嵌式(embedded)
PHP是内嵌在HTML中的。换句话说,PHP的页面只是必要时「跳到」PHP模式的普通HTML的页面。下面列举一个例子说明:
范例1-1 greeting.php
当某个客户端对该页提出请求时,Web服务器就会对它进行处理。也就是说,它会在该页面中由上而下寻找试图解决的PHP部分。首先,剖析器将处理所有的已指定值的变量(用$来标示),并试着将它们插入后面的PHP 命令(在上述情况就是print()函式)。如果每一步都进行得很顺利,剖析器最终将把一个HTML页面传回到客户端的浏览器上,
如图1-1所示
如果从客户端浏览器上查看原始程序代码[从View(检视)菜单上选择Source(检视原始码)或PageSource(网页原始码)],就会看见下列程序代码:
这与你编写的HTML完全相同,是不是很简单呢?
PHP的HTML内嵌特性可以提供许多帮助:
◆ PHP能很快速地插入到由所见即所得式编辑工具所产生
◆ 的程序代码中。
◆ PHP将设计师和script编写者的工作分离开来。
◆ HTML的任何一行都不必用程序语言重写。
◆ PHP能够减少劳成本,提高效率。
无须编辑
或许所有的内嵌script语言最令人动心的就是「写下来并执行即可」,在被测试或使用以前不需要先编辑译成二进制代码。PHP是直译的语言(就像是目前绝大多数新式的计算机程序语言)。尽管Zend做了一些幕后工作,预先编译成一种中间格式,以便提高复杂script的执行速度。
如果碰到想要编译时又该怎么办呢?如果想要发布的是不可反组译的二进制代码,以便其它人虽然能够使用这些程序代码,但是不能看到原始程序的内容。在这种情况下,编译就显得很有必要了。Zend小组正在开发一个最佳化的编译器Zend Encoder ,将使PHP的「编译」变成可能,同时这也会促进复杂的大型PHP script的使用和发展。
PHP具有跨平台特性
PHP可执行于任何一种最流行的UNIX(包含Mac OS X )或Windows版本的操作系统上。目前世界上绝大部分的HTTP服务器都是架在上述两种操作系统之上。
PHP与目前处于领先地位的三种Web服务器是相容的:UNIX(包括Mac OSX)或Windows的Apache HTTP服务器,微软的IIS和Netscape Enterprise服务器(又称iPlanet服务器)。它还可用于几种鲜花人知的服务器上,其中包括Alex Belits的fhttpd,微软的Personal Web Server(PWS),AOLServer以及Omnicentrix的Omniserver应用服务器。不过Macintosh平台并不支扔PHP。表1-2显示的是操作系统与Web服务器组合的简单表格。
表1-2 操作系统与支持PHP的Web服务器
现在PHP可以在Macintosh上执行,所以PHP几乎可以跨全部的平台,你可以在任何单独OS端使用你喜欢的工具开发,然后将这些PHP script上载到UNIX或Windows服务器中。第三章将详述这部分处理地程。
PHP并不是标示语言
PHP是一种真正的程序语言。相较而言,ColdFusion就比较像HTML一样是用预先定义的Tag来标记。在PHP中,只要键入名称和定义就可以按自己的需要定义函式。在CouldFusion中,必须使用其它人开发的标记,或者进行自订扩充标记的开发过程。
一个PHP社群成员曾经说过:「CouldFusion让容易的事情变容易,但让中等难度的事情变变成不可能实现」。每个程序员都会认同,一旦有能力用大括号和圆圈,就绝对不会再回头使用标记。
PHP的稳定性(stabie)
在这里提到的[稳定性]有两种不同的含义:
1. 服务器并不需要经常重新启动。
2. 软件不用经常升级更动,并且发行版本之间不会不兼容。
令人高兴的是,这两点都适用于PHP。Apache Server一般公认中最稳定的主流Web服务器,拥有令人称羡的正常执行时间比率,虽然它不是最快的,对于管理员来说也不是最简单的,不过一旦安装及设定好它,Apache HTTP Server就绝少持掉。每次改变设定时,也不需要重新启动服务器(至少在UNIX这一方面是如此)。PHP继承了这种可靠性,再加上它自己的稳固和轻便,在1999年十月的Network Computing实验室中进行为期两个半月的实机测试中,Apache Server和PHP在环境稳定性方面轻松战胜IIS/Visual Studio组合和Netscape Enterprise Server/Java组合。
在功能特性稳定度方面,PHP也是很好的。开发专队对自己的项目很有自信,也有一个清楚的目标,因此会拒绝来自一些使用者的不当索求。他们的大部份努力都让产品水平提升,诸如让剖析器执行得更快速,可以和更多的主流数据库进行数据交换,或者能够添加更好的Session支持。从过去经验上来看,PHP的各版本之间很少有功能被剔除。
PHP非常快速
PHP在执行上十分快速,尤其是在UNIX平台上编译到Apache模块的情况下执行。
与CGI script相比,PHP4几乎在任何使用方面上都更快得多。有个笑话说,CGI是[Can′t Go Instantly(不能马上执行)]的缩写。尽管许多CGI script是以C语言编写的,这是最低阶段的语言之一,因此比大多数程序设计语言的速度快得多,但每个从HTTP服务器切断的请求都需要开始一个全新的处理程序,这个问题阻碍了CGI的应用。这种切断和产生所需的时间的资源相当多,限制了可执行的平行处理数量。其它CGI script语言,诸如Perl和Tcl,都相当缓慢。大多数Web网站出于效能和安全性的原因,都逐渐不再使用CGI了。
由于它是直译式执行,而不是经过编译的,因而性能上稍微受到一些影响,但视为Web服务器模块之一的PHP还是比较利多于弊,这样做还是值得的。当以这种方式编译时,PHP成为HTTP服务器的一部分。因为没有与单独应用程序服务器的来回传送(例如使用ColdFusion时的情况),因此还是能够最大限度地满足请求。
尽管没有正式的测试基准来对这两面进行比较,但有许多迹象以及小型的基准测试中言明了,PHP在大多数应用程序中至少和ASP一样快(例如,请连上Zend.com网站实际感受一下)。
PHP是开放的
我们已经讨论过开放原始码软件的成本上的优势。这些授权的另一主要结论是软件的完整原始码必须包含在任何发行的版本中。
实际上,PHP的 UNIX版本只以原始程序代码方式在发行,直到目前,开发团队拒绝了无数恳求,坚决不为任何UNIX平台发布官方版的二进制版本。起初,初学使用者(尤其是那些对于UNIX也是新手的使用者)可能会感觉原始程序代码就像用第三条腿般[那么好用],且大多数人仍期盼选用便捷的rpm方式。不过从实质和理想上的理由,采用含括满是[.c]和[.h]档案的档案夹 都是不可免的。
最直接的实质好处是,我们可以针对真正需要的内容来编译PHP使用,这种方法在速度的安全性方面都有优势。例如,可以选择挂上不同的数据库的接口,或是在 Apache更加安全或更新的版本问市时,根据需要在任何时候重新编译,另外还可以确定了自己需要XML支持时再将该功能编译进去。
将开放原始码软件与它的竞争者有所区隔的不只是价格,还包括了控制权,许多软件都是设定在某些条件下才会放弃其控制权,但是仔细看看有关的授权说明,一般都会
看到关于如何使用软件的[限制]。可能允许在家中执行它,但不能在办公室使用;可能允许在笔记本计算机上加载它,但假如用于商业目的则违反了规定。或者,最常见的情况是,可以将它用于任何目的,但使用者根本别想看到原始程序代码,更别提修改它了。甚至还有社群援权的规范,强制要求使用者为链接库贡献一份力量,但却还是要使用者为最终产品的使用而付费!
注意:
不要去想怎样违反软件援权,尤其是对这些无需付费的软件,并没什么好理由需要违反这一规则。此外,对于软件的开发人员,这种报答也太不公平了。
表1-3原始码/收费范围
类似PHP这样的开放原始码的软件并不打算限制使用目的,限定使用者范围或者提出其它条件。这些权利中最重要的就是允许使用者对原始程序进行修改并发布。在最极端的情况下,这种行为称作「程序代码分裂(cold forking)」。
这意味着,如果有某些人的开发方向与PHP开发专队矛盾了,他们可以把多年来幸勤工作得来的所有程序代码用来当成自己产品的基础;只是不能称之为PHP,且必须在自已的档中提到原来程序代码创作者,让他们得到应有的赞誉。在大多数情况下,这种另起炉灶的方法可能不是很好主意,但使用者有权利尝试,由于种种原因,已经有人试过很多次,其基本原则是,原始码发布的方式使得几乎不可能由某个人或组织凭借一个程序来和整个社群对抗,因为每个使用者都可以随意取走所有原始程序代码来使用。
开放原始码的新使用者应该要注意到,开发人员也在享用这种权利。任何时候,原创者Rasmus和公司都可以与现在社群不同,并把未来工作成果的目标放在基于PHP的商用产品或竞争争产品中。当然,对于那些想乍自己举起指挥棒的人来说,目前的原始程序代码仍是可用的,而且对于像PHP这样的大型产品,还是有相当多的志愿开发人员不断投入改进。
这样的结果很容易让人忽略了开放原始码软件的一个优势,那就是可以相当肯定该软件在几年内仍到处可见,不论它是什么样子呈现。在如今这些生命周期短得像朝阳一样的产品中,很难选取一种具有持久性的工具。使用过OS/2、Amiga、Next、Newton、Firefly、Netscape以及其它曾流行一时的技术的人们,都了解那种被拒绝的痛苦,如公司破产,决定停止对一种技术的支持,或者卖给了另一家公司并有了新方向……等等。在发现PHP之前我们这群人所采用的是另一种伺服端script工具(现在它已经没有生命力了),虽然目前已经忘记了曾有的感受,但还是有些失落感。开放原始码模式降低了几年内突发变故的可能性,让使用者的长期计划更加可行。
PHP整合能力甚佳
PHP能够很容易地与其它程序和协议进行交流。PHP开发团队愿意给予绝大多数使用者最大范围的弹性。
PHP的数据库连接能力很强,对目前约十五种最流行的数据库以及ODBC驱动程序皆有所支持。另外,PHP还支持多数主流的协议,例如POP3、IMAP 和LDAP等。PHP4还提供对于Java及分布式对象架构(COM和CORBA)的支持,第一次使得n-tier开发变成可能。
若是有PHP不支持的多数原因大都因为对方应用程序属于「封闭」原始程序代码的形式。例如, Microsoft不热衷于和PHP的开放原始码专案合作。那些在PHP邮寄清单(mailing list)讨论区上抱怨缺Mac OS 9或.NET支持的使用者可能是没有搞清楚问题缘由所在。
PHP快速的加入新工能
专门开发网页技术的使用者可能有时会因为产品标准官方用来提供迅速技术的新功能加入而感到无所适从,但在PHP方面这是没有问题的,因为它所仰赖的只是开发者,C编译器,以及加入重要新功能的梦想,这并非表示PHP团队会不经社群声音就任意接受将某功能加入发行版中,但是独立的开发者仍然可以将自己的扩充功能藉由稍后加入主要PHP套件内的方式来运作,例如,Dan Libby完美的xmlrpc-epi扩充组件就在PHP发行4.1版本的时候被采用,而它是在首先以独立套件的发行后数月才被加入的。
开发PHP也是相一当一致而持续进行的,虽然仍由一些主要的影响问题,例如PHP 3与PHP 4之间过渡的问题,这些主要都成因自解析器本身,程序员事实上在版本之间大多数的扩充组件并不会有太大问题,此外PHP专队根据开放原始码「尽早发行、常常发行」的原则,这使得开发者可以有很多机会可以变更并提出bug 建议,如此比较起.NET方式的话,会发现它让开发者等了Microsoft将近一年但是还没有更新IIS也甚至尚未发行主要版本的.NET服务器。
PHP正在流行并逐渐成长
自94年始,PHP的诞生到如今,PHP已经从一种针对网络开发的优秀工具变成了一款适合于企业配置的完全的平台,而且它正在变得越来越普及,并且拥有了一个巨大的资源基础,目前PHP正被1500多万个网站使用,PHP本身也迅速成为网络应用的最流行的语言。特别是在欧洲和北美地区,PHP已经被应用于包括金融、政府、交通、电信、媒介、娱乐等各大行业,完全脱离了一个简单网络语言开发工具的境界。
在国外,数以百万计的专业工程师将PHP作为主要开发语言,形成了不同地域的俱乐部或者类似的团体组织,经常一起探讨有关PHP的大家关心的问题。例如最近一段时间,无论在欧洲的比利时、荷兰、英国,还是北美的美国、加拿大等都有一些团体在积极的活动。我们中国作为最大的互联网国家,有着众多的PHP爱好者,可以说比任何一个国家的都多,希望我们大家联合起来,倡议组建一个中国规模最大的PHP中国。以此来推动中国的PHP发展,和为广泛的PHP爱好者提供一个交流的平台。
正如你可以看出的,从1998年十月到1999年十月这段时间,PHP的使用者在网域数目上表现了800%的成长率。随着Web网站而变得无处不在,并且其中大部分都不再仅是简单的静态HTML页,PHP有望迅速获得绝对数量的使用者。
尽管确定牢固地位有些困难,但PHP相对于类似产品来说的确处于强势。24%的Web服务器采用了微软的Active Server Pages技术,而接受调查的网域中有大约4%应用了ColdFusion.根据更大规模并且更精确的采样,所有Web服务器中有24%使用了PHP,所以可以称得上是最流行的伺服端网页程序语言。
Active Server Pages和ColdFusion很容易见到,因为许多大型电子商务网站都选择使用它们。但是有多数Web网站都是提供资讯形式,而非有收益或是国家政府的,因而没法子应付太高的开发费用。在这类的网站中,PHP比竞争对手享有更实质性的竞争优势。
PHP并不属于任何人
PC工业的进展大都可说是「专利权标准」的编年史:先尝试建立脚点,然后在本身利益以及对客户的亏欠中相互的碰撞,最后再以新的标准取代……
但是,过去几年中,Internet提供了自发性,基于标准,无关平台的兼容性……等特性的最大容度。例如, e-mail的应用是如此广泛,就是因为客观存在使用了一个清晰而固定的标准,不管什么平台的什么程序都必须遵从这个标准。在后来想在打破这一标准的新开发案子(例如,基于HTML格林的e-mail信纸),一般都认为是偏离标准。
此外,顾客(尤其是庞大系统的大客户们)倾向于花费庞大来遵循专有的标准,这只是因为市场的倾向却非保证,而现行的方式为使用XML与Web服务来驱动,这是因为多年来顾客并不满意Java RMI,CORBA,COM,以及甚至更早期的专有方法及资料格式。
目前,软体开发人员正尝试把专利权和开放标准融合在一起。公司一方面要确保收益的维持,同时也要采用开放的标准。有一些与专利权标准相关的主要法律冲突,这些还在解决当中。最终可能会对原始码基础部分进行统一更改,甚至还可能影响到所涉及公司其未来的生存。面对氖这些不确定性,能够预知未来解决此类问题的解决方案会吸引目前大量度的厂商。
PHP拥有最大的灵话性,正因为它本身属反对专利权形式的。它并不依附于任何服务器作业系统,这一点也不像Active Server Pages。它并不依附于任何握有专利权的跨平台标准或中介软体,这一点与Java Server Pages或ColdFusion不同。它也不依附于任何浏览器、程序语言或资料库。PHP并不是照本宣科只和开放原始码的软体合作,这种具备独立性而又能合作的实用态度有助于PHP在开发领域上更顺利发展。
PHP社群PHP是由世界和各地的使用者社群以合作方式关开发和支持的,的确是有些怪兽级的程序高手会有很多想法和热情,他们的狂热的确完成了大多数工伯,把最好的思路贡献出来,并与大多数使用者维持良好关系。
对于大多数初学者来说,主要好处在于免费、无国界并且无条件的技术支援。邮寄清单(mailing list)上的人们像7-11便利商店全年无休来回答问题、帮程序码除错,并倾听你的抱怨。这种支援更具人性化,并且更真实。PHP社群成员可能会要你阅读手册,把问题转给资料库中已回答的邮件清单,或者让你发发牢骚,但他们绝对不会要你把C槽砍掉或要求你付费。通常他们会先查看你的程序码,并告知你什么地方错了,或者,甚至可以帮助你从头开始设计一个应用程序。
当你对PHP更加热悉之后,可能希望自己也有所回馈和贡献。你可以追从记录bug,并的供建议给邮寄清单上的其它人、把你的程序范例传到公共资料库让别人取用、编写相关文件分享知识给别人、当然也可以编写C或C+ +的程序码;这些都可以回报社群的方式。
摘要
PHP不是解决每个Web开发问题的万能钥匙,但它是具有很多优势的。PHP是由Web开发人员建立,并且也由Web开发人员使用。还有很多热心社群在提供支持。它们功能十分强大,性能可靠而又十分便于使用。对于各种类型的后端资料,它都提供了最佳形式的连接。我们之前没有忘记提及它是免费的这一点?要想了解PHP,最好是在许多最常见Web开发专案中使用它。\n