PHP学习宝典-第一章
|
第一章 PHP基本介绍 本章重点 ◆ 认识PHP ◆ PHP的历史 ◆ PHP受欢迎的原因 ◆ PHP所具备的竞争优势 首先在第一章中对PHP做个基本的介绍。本章着重于讨论有关PHP最常见的一些问题,例如,什么是PHP,它与类似的技术相比较性能如何……等等,本章大部份的篇幅都会花在列举PHP之所以受欢迎的原因上。 认识PHP PHP是一种Web开发人员所馔写的Web开发程序语言。 下一章会更深入探讨伺服端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是免费的 表格1-1 零售价格比较 (美金)
开放源码软件: 便宜亦好货 很显然地,我们是生活在一个物质世界中,我们经常碰到类似「一分钱一分货」、「天下没有白吃的午餐」和「完美的东西只存在于传说之中」的格言。因此,大家难免会对免费软件的质量和生存产生怀疑。直到最近,那些不用花钱的软件(正式名称是共享软件或自由软件)一般仍然被归入下列三类: http://www.opensource.org PHP的授权 http://www.php.net/license.html 绝大多数人是透过免费下载得PHP,但也可以把它当作一份Linux distribution的产品,一本技术着作或其它一些产品的一部份来购买。要后面这种情况下,有人可能会对PHP免费的说法产生怀疑。这可经从两方面来看,尽管不能要求对大多数开放原始码软件付费,却需要为该软件的寄送付费,哪怕是以最便宜的方式,例如将它存在磁盘中并(邮寄或用其它工具)传送给其它使用者。另外,有些工作或风险是由市场来完成和承担的,而这些工作又是开发小组不去做或承担的,这时使用者也需要付费。例如,为了保证收到的软件的每一个拷贝都是没有病毒或具有一定的质量,或是为了不冒险去使用带有病毒的CD-ROM,就需要付一定的费用。 一般来说,对于不同的情况,开放原始码的软件使用者能够自由选择:最佳的效益/价格比,不付费和没有保障。或在用高昂的价格但是佣有良好的技术支持,或者是介于两者之间等等。然后,目前还没有出现为PHP销售提供服务和技术支持的组织(尽管有人推测这将成为Zend组织会更有价值的卖点之一)。 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) 范例1-1 greeting.php
如图1-1所示
如果从客户端浏览器上查看原始程序代码[从View(检视)菜单上选择Source(检视原始码)或PageSource(网页原始码)],就会看见下列程序代码:
这与你编写的HTML完全相同,是不是很简单呢?
或许所有的内嵌script语言最令人动心的就是「写下来并执行即可」,在被测试或使用以前不需要先编辑译成二进制代码。PHP是直译的语言(就像是目前绝大多数新式的计算机程序语言)。尽管Zend做了一些幕后工作,预先编译成一种中间格式,以便提高复杂script的执行速度。
PHP可执行于任何一种最流行的UNIX(包含Mac OS X )或Windows版本的操作系统上。目前世界上绝大部分的HTTP服务器都是架在上述两种操作系统之上。
现在PHP可以在Macintosh上执行,所以PHP几乎可以跨全部的平台,你可以在任何单独OS端使用你喜欢的工具开发,然后将这些PHP script上载到UNIX或Windows服务器中。第三章将详述这部分处理地程。 PHP并不是标示语言 PHP是一种真正的程序语言。相较而言,ColdFusion就比较像HTML一样是用预先定义的Tag来标记。在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模块的情况下执行。 由于它是直译式执行,而不是经过编译的,因而性能上稍微受到一些影响,但视为Web服务器模块之一的PHP还是比较利多于弊,这样做还是值得的。当以这种方式编译时,PHP成为HTTP服务器的一部分。因为没有与单独应用程序服务器的来回传送(例如使用ColdFusion时的情况),因此还是能够最大限度地满足请求。
我们已经讨论过开放原始码软件的成本上的优势。这些授权的另一主要结论是软件的完整原始码必须包含在任何发行的版本中。 实际上,PHP的 UNIX版本只以原始程序代码方式在发行,直到目前,开发团队拒绝了无数恳求,坚决不为任何UNIX平台发布官方版的二进制版本。起初,初学使用者(尤其是那些对于UNIX也是新手的使用者)可能会感觉原始程序代码就像用第三条腿般[那么好用],且大多数人仍期盼选用便捷的rpm方式。不过从实质和理想上的理由,采用含括满是[.c]和[.h]档案的档案夹 都是不可免的。 最直接的实质好处是,我们可以针对真正需要的内容来编译PHP使用,这种方法在速度的安全性方面都有优势。例如,可以选择挂上不同的数据库的接口,或是在 Apache更加安全或更新的版本问市时,根据需要在任何时候重新编译,另外还可以确定了自己需要XML支持时再将该功能编译进去。 将开放原始码软件与它的竞争者有所区隔的不只是价格,还包括了控制权,许多软件都是设定在某些条件下才会放弃其控制权,但是仔细看看有关的授权说明,一般都会 注意: 表1-3原始码/收费范围 img src=/upimg/allimg/20060629/0950575.jpg> 类似PHP这样的开放原始码的软件并不打算限制使用目的,限定使用者范围或者提出其它条件。这些权利中最重要的就是允许使用者对原始程序进行修改并发布。在最极端的情况下,这种行为称作「程序代码分裂(cold forking)」。 这意味着,如果有某些人的开发方向与PHP开发专队矛盾了,他们可以把多年来幸勤工作得来的所有程序代码用来当成自己产品的基础;只是不能称之为PHP,且必须在自已的档中提到原来程序代码创作者,让他们得到应有的赞誉。在大多数情况下,这种另起炉灶的方法可能不是很好主意,但使用者有权利尝试,由于种种原因,已经有人试过很多次,其基本原则是,原始码发布的方式使得几乎不可能由某个人或组织凭借一个程序来和整个社群对抗,因为每个使用者都可以随意取走所有原始程序代码来使用。 开放原始码的新使用者应该要注意到,开发人员也在享用这种权利。任何时候,原创者Rasmus和公司都可以与现在社群不同,并把未来工作成果的目标放在基于PHP的商用产品或竞争争产品中。当然,对于那些想乍自己举起指挥棒的人来说,目前的原始程序代码仍是可用的,而且对于像PHP这样的大型产品,还是有相当多的志愿开发人员不断投入改进。 这样的结果很容易让人忽略了开放原始码软件的一个优势,那就是可以相当肯定该软件在几年内仍到处可见,不论它是什么样子呈现。在如今这些生命周期短得像朝阳一样的产品中,很难选取一种具有持久性的工具。使用过OS/2、Amiga、Next、Newton、Firefly、Netscape以及其它曾流行一时的技术的人们,都了解那种被拒绝的痛苦,如公司破产,决定停止对一种技术的支持,或者卖给了另一家公司并有了新方向……等等。在发现PHP之前我们这群人所采用的是另一种伺服端script工具(现在它已经没有生命力了),虽然目前已经忘记了曾有的感受,但还是有些失落感。开放原始码模式降低了几年内突发变故的可能性,让使用者的长期计划更加可行。
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方面这是没有问题的,因为它所仰赖的只是开发者,C编译器,以及加入重要新功能的梦想,这并非表示PHP团队会不经社群声音就任意接受将某功能加入发行版中,但是独立的开发者仍然可以将自己的扩充功能藉由稍后加入主要PHP套件内的方式来运作,例如,Dan Libby完美的xmlrpc-epi扩充组件就在PHP发行4.1版本的时候被采用,而它是在首先以独立套件的发行后数月才被加入的。 开发PHP也是相一当一致而持续进行的,虽然仍由一些主要的影响问题,例如PHP 3与PHP 4之间过渡的问题,这些主要都成因自解析器本身,程序员事实上在版本之间大多数的扩充组件并不会有太大问题,此外PHP专队根据开放原始码「尽早发行、常常发行」的原则,这使得开发者可以有很多机会可以变更并提出bug 建议,如此比较起.NET方式的话,会发现它让开发者等了Microsoft将近一年但是还没有更新IIS也甚至尚未发行主要版本的.NET服务器。 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比竞争对手享有更实质性的竞争优势。
PC工业的进展大都可说是「专利权标准」的编年史:先尝试建立脚点,然后在本身利益以及对客户的亏欠中相互的碰撞,最后再以新的标准取代…… 目前,软体开发人员正尝试把专利权和开放标准融合在一起。公司一方面要确保收益的维持,同时也要采用开放的标准。有一些与专利权标准相关的主要法律冲突,这些还在解决当中。最终可能会对原始码基础部分进行统一更改,甚至还可能影响到所涉及公司其未来的生存。面对氖这些不确定性,能够预知未来解决此类问题的解决方案会吸引目前大量度的厂商。 PHP拥有最大的灵话性,正因为它本身属反对专利权形式的。它并不依附于任何服务器作业系统,这一点也不像Active Server Pages。它并不依附于任何握有专利权的跨平台标准或中介软体,这一点与Java Server Pages或ColdFusion不同。它也不依附于任何浏览器、程序语言或资料库。PHP并不是照本宣科只和开放原始码的软体合作,这种具备独立性而又能合作的实用态度有助于PHP在开发领域上更顺利发展。 PHP社群PHP是由世界和各地的使用者社群以合作方式关开发和支持的,的确是有些怪兽级的程序高手会有很多想法和热情,他们的狂热的确完成了大多数工伯,把最好的思路贡献出来,并与大多数使用者维持良好关系。 对于大多数初学者来说,主要好处在于免费、无国界并且无条件的技术支援。邮寄清单(mailing list)上的人们像7-11便利商店全年无休来回答问题、帮程序码除错,并倾听你的抱怨。这种支援更具人性化,并且更真实。PHP社群成员可能会要你阅读手册,把问题转给资料库中已回答的邮件清单,或者让你发发牢骚,但他们绝对不会要你把C槽砍掉或要求你付费。通常他们会先查看你的程序码,并告知你什么地方错了,或者,甚至可以帮助你从头开始设计一个应用程序。 当你对PHP更加热悉之后,可能希望自己也有所回馈和贡献。你可以追从记录bug,并的供建议给邮寄清单上的其它人、把你的程序范例传到公共资料库让别人取用、编写相关文件分享知识给别人、当然也可以编写C或C+ +的程序码;这些都可以回报社群的方式。 摘要 源代码网供稿. |
