译者注:这是一篇德国人写的关于PHP的“长篇大论”,作者在文中把PHP吹的神乎其神,大有一统江湖的架势。且不去管它观点是否正确,这么一篇经典的 “吹牛奇文”对我们这些诚惶诚恐的PHP程序员来说,到是非常得一看的。还是闲话少说,让我们开始欣赏这
译者注:这是一篇德国人写的关于PHP的“长篇大论”,作者在文中把PHP吹的神乎其神,大有一统江湖的架势。且不去管它观点是否正确,这么一篇经典的 “吹牛奇文”对我们这些诚惶诚恐的PHP程序员来说,到是非常值得一看的。还是闲话少说,让我们开始欣赏这篇奇文吧!
对于电子商务项目,你一般需要综合使用PHP(70%),HTML/DHTML/XML(25%)和5%的Javascript(客户端验证)。
2.PHP可运行在Microsoft Windwos上!!
PHP最初是运行在UNIX平台上的,但是它的移植性很好,也可运行在Windows和IIS Web服务器之上。今天,已有了一大批基于Windows 2000/NT/95/98的PHP用户,你可以找到大量运行于Windows平台之上的PHP工具。
许多PHP程序员喜欢在Windows上开发他们的程序,完成后再配置在大型的Linux服务器上,如运行Linux的IBM小型机、Compaq DEC Alpha 以及 Sun sparc。
PHP最大的优势在于,它也可以运行在UNIX/Linux之上,UNIX上的开发者可以为MS Windows下的PHP用户服务,而Windows下开发的PHP代码也可以不经过任何改变,就用于UNIX/Linux上。
PHP自身完全是由C语言写成的,因此可广泛运行于各种平台之上,如BeOS,UNIX, MS Windows, Apple Macintosh,IBM OS/2 以及其它更多的操作系统。
PHP 运行速度非常快,要比Java快出许多。对于Web开发而言,不如忘了Java/JSP吧!PHP,PHP,到处都将是PHP! PHP也也将变成一种多用途的面向对象的脚本语言。
3.PHP下载
·PHP主站点:http://www.php.net
·PHP资源:http://ils.unc.edu/web-db/php/links.html
·PHP代码交换:http://px.sklar.com
·Vex Net:http://www.vex.net/php
在许多国家都有镜像站点,网址是www.COUNTRYCODE.php.net,其中COUNTRYCODE可以是us,fe,,sk等等。
· http://www.fe.de.php.net
· http://www.sk.php.net
·http://php.iquest.net/
·答疑邮件地址: rasmus@lerdorf.on.ca
3.1 PHP在Microsoft Windows 95/98/NT/2000上的安装
PHP在Microsoft Windows平台上极受欢迎,而且另人惊奇的是,它比Microsoft自己的Web脚本语言还要流行。原因在于PHP是面向对象的脚本语言,而ASP 却不是。PHP具有大量可重用的类(对象),在Windows平台上,PHP要比ASP快许多,而且比ASP具有更多的功能和特色。PHP比ASP更健壮,更可靠,更具威力。由于PHP可运行于MS
Windows,Linux, Mac OS和所有的UNIX,所以它具有一个庞大的用户群。而其最大的优势在于,你可以在Windows上开发程序,然后配置在UNIX/Linux上,反之亦然。
Windows98/NT/2000下的PHP用户比其它操作系统都要多,那是因为在Windows98/NT/2000上安装PHP很简单。PHP有可执行的安装程序,你只要双击exe文件,2分钟内就可以自动安装好。可从如下站下载可执行的PHP安装程序:
·Windows下的PHP可执行安装程序:http://php.weblogs.com/easywindows
·Windows平台下的PHP资料:http://php.weblogs.com
·PHP在Windows下的安装与配置:
http://www.php.net/manual/install-windows95-nt.php
· PHP Triad可以在Windows平台上安装完整的PHP服务环境:
http://www.phpgeek.com
3.2在Windows 95/98/NT/2000上快速安装Apache Web服务器(10秒钟)
在Windows上运行PHP,你需要一个Web服务器,你可以使用微软的IIS,也可以使用免费的Apache 。因为可以通过Apache的安装文件setup.exe进行安装,可以为你节省许多时间。
PHPTtriad是一个包括Apache、PHP、MySQL的软件包,可从http://www.phpgeek.com/phptriad.php 或其镜像站点http://sourceforge.net/projects/phptriad
下载。我强烈推荐使用PHPTtriad,它在Windows用户中极受欢迎(已被下载了几百万次)。
Apache 二进制程序: -http://httpd.apache.org/dist/httpd/binaries/win32
3.3 微软的SQL服务器
SQL服务器可以安装在不需要运行Windows的机器上,而你也需要一个SQL服务器来作Web开发。我推荐你在很老的PC上(如 Pentium或486)安装Redhat Linux和PostgreSQL RPMs。你数据库并不需要任何Windows图形界面,可以在控制台直接启动PostgreSQL。PostgreSQL
的速度大概是Oracle和MS SQL server的3倍。
PHP的PostgreSQL支持库是由Adam Sussman编写的,他的邮件地址是:asussman@vidya.com
支持Windows NT/2000的PostgreSQL可从http://www.askesis.nl下载。
可从http://www.geocities.com/alavoor/HOWTO/pgsql/PostgreSQL-HOWTO.html 获取PostgreSQL的使用指南。
3.4 PHP在UNIX和其它操作系统上的安装
参见PHP主站点www.php.net上的安装指南和说明,或所下载的软件包中的INSTALL文件。
4.快速进阶
用PHP的面向对象机制实现一个项目的步骤如下:
·首先,你需要连接一个数据库SQL服务器——有下面两个选择:
ADODB (Active Data Objects Data Base),即动态数据对象数据库(http://php.weblogs.com/adodb)
Metabase(Database independent access and management),即数据库独立访问和管理(http://phpclasses.upperdesign.com/browse.htm/package/20)
·第二,你需要一些通用的PHP类来创建表单、表格和其它HTML对象。这些都可以从PHP classes网站上获取(http://phpclasses.upperdesign.com)。可以参考一下该网站的下载排行榜。也可以从网站http://www.milkywaygalaxy.freeservers.com/上获取表单类、模板类等。
·第三,通过对这些通用类的继承,来设计和创建自己的PHP类。
·第四,使用模板类来分离显示样式和业务逻辑,可参见http://www.phpclasses.com
·第五,使用IDE工具进行开发(参见PHP IDE一节)。
·最后,最好把你代码封装成类,这样可以实现代码的易维护性和可重用性。
5.PHP的主要特性
·支持标准CGI,FastCGI和Apache模块——作为一个标准的CGI程序,PHP可以安装在运行任何Web服务器的任何UNIX机器上。 PHP支持新的FastCGI标准,通过这一机制,PHP获得了速度上的提高。当配置成Apache模块时,PHP便成了功能极为强大的,运行速度如闪电般快的新的选择。
·访问日志——通过PHP的日志访问功能,用户可以维护他们的点击次数和日志。该功能提供了实时的访问监测,而不以任何方式使用系统的中心访问日志文件。日志浏览脚本为个人用户拥有的一组页面提供快速的访问摘要。除此之外,该程序包还可以通过配置为每一个页面生成一个页脚(footer)来显示访问信息。可参考文章后面的例子。
·访问控制——个内建的基于Web的配置“筛”,可实现对访问控制的配置。这样,才有可能为所有或部分Web页面创建一套规则,使得拥有这些页面的特定的人可以对他的网页设置各种限制,如,什么人可以访问这些页面以及这些页面以怎样的一种方式被访问。对页面的设置有许多方式,如密码保护、完全限制、登录失效、或者更多的以客户的域、浏览器、e-mail地址甚至涉及的其它文档为设置依据。
·支持PostgresSQL——PostgresSQL是一个先进但是免费的RDBMS(关系数据库管理系统)。PHP支持在.html文件中直接嵌入PostgresSQL的“SQL 查询语句”。
·支持RFC-1867文件上传——文件上传是Netscape2.0新增的一项功能。用户可以将文件上传到Web服务器。PHP提供了实际的MIME解码功能,使得文件上传成为可能。PHP还提供额外的框架,可对收到的上传文件进行一些有用的处理。
·基于HTTP的身份验证控制——PHP可以用来为Apache服务器创建自定义的基于HTTP的身份验证机制。
·变量、数组,联合数组(associative arrays)——PHP支持typed(这个单词不知道怎么译,望高手指点)变量,数组,甚至Perl风格的联合数组。而这些都可以通过GET或POST方法的表单从一个页面传递到另一个页面。
·条件语句、While循环——PHP是一种类似C语言的功能完整的脚本语言。你可以使用if/then/elseif/else/endif条件语句,以及While循环和Switch/case语句来安排HTML页面显示的
逻辑流程。
·扩展的正规表达式——正规表达式频繁地应用于模式匹配、模式替换以及一般的字符串操作。PHP支持所有常用的正规表达式操作。
·原始的HTTP Header控制——根据某种条件,让Web页面能够发送自定义的原始HTTP头对一些高级的网站设计来说是非常必要的。一个常见的用法就是发送一个 Location:URL头,把客户端的请求重定向到另外一个URL上。也可以用来关闭缓存或操作页面最新更新的HTTP头。
·动态创建GIF图片——PHP已经支持Thomas Boutell的GD图片库,可以实现GIF图片的动态创建。
·支持ISP“安全模式”——PHP支持独特的“安全模式”,从而使得多个用户运行同一台服务器上的PHP脚本变得更加安全。
·新发布的PHP中又增加了许多新的功能。可访问PHP的主站点http://www.php.net。
·PHP是免费的!——这是最后一个重要特色。PHP的程序包是完全免费的。它遵守GNU/GPL。你可以把这个软件用于实现商业或者其它任何目的。
5.1 PHP相对于Java的优势
PHP是一种已经确定下来的,用于创建动态网页的服务器端的脚本语言。作为一种为Web而特别设计的语言,PHP带来了许多商业机构渴望的特性。
·极短学习周期
·快速的开发时间
·非常高的性能
这对于缺乏熟练编程人员,时间又非常紧迫的公司来讲,具有非常重要的意义。PHP可以在所有主要的操作平台(UNIX,Windows,甚至是大型机)上运行,而且生来就支持各种流行的数据库。所有这一切决定它是一种进行Web开发的非常理想的选择:曾有运用PHP技术的网上商店称,他们只需雇佣业余的程序员,几天内就能够开发出可重用的代码。那些熟悉诸如C,C++或Java等语言的程序员们,也总是发现他们能够在几个小时之内就能够进行PHP
编程。
PHP是针对Web开发而设计的,这一事实使它成为一种独具特色的开发工具,就象Intranet Design杂志评价的那样:
“PHP是构建在Web开发人员现实需求之上的....不同于其它笨重的,高负荷的方法,PHP非常轻便,是为Web开发度身定做的。它可以比其它同类技术更快,更容易的解决复杂的问题。”
Java作为一种新的编程语言,最初用于运行嵌在浏览器中的客户端应用程序。在过去短短几年中,“applet”所暴露的问题迫使SUN和其它 Java开发人员为该语言寻找新的出路。其中最为突出的就是服务器端编程,它允许Web站点连接数据库并产生其它服务器端的应用程序,即 “servlets”。SUN最终推出了Java Server Pages(JSP)作为编写servlets的手段。与PHP一样,JSP在不同平台间也具有高可移植性(尽管PHP支持任何32位以及32位以上的平台,而JSP只能在安装了Java虚拟机的平台上运行)。然后,一个没有编程背景的新手会发现,使用servlets编程是一件极为困难的事,原因在于该语言的复杂性以及JSP系统复杂的设计方式。
JSP的性能也存在许多待改进的地方:ZDnet的在线刊物eWeek最近的一项调查发现,PHP的运行速度差不多是JSP的3.7倍。可以说,JSP是Web环境中非常差的一种解决方案,这是因为它每秒钟只能处理很少的事务,而且响应速度相当的慢。
ZDnet的eWeek杂志还提到:
“JSP是一项相对较新的技术,从开发工具、资源、人才方面来看,还未具有完全的市场成熟度。”......由于JSP是基于Java的,而 Java由是一种强类型的语言,所以我们不得不声明变量的类型,并在需要的地方手工转换类型。这使得JSP成为业余程序员最难于学习的一种脚本语言。
PHP与Java协同工作
JSP仅仅是一种能够访问Java对象的语言罢了,认识到这一点很重要。而PHP也可以整合Java,这意味着,PHP可以象JSP一样,成为一种能够调用Java逻辑的脚本语言。但与JSP不同的是,PHP还可以调用其它组件模型,如Microsoft的COM,而且增加对新的对象模型的支持也极为容易。可见,PHP的扩展能力是无穷的。而另一方面,JSP完全依赖于Java。
IBM程序员Sam Ruby联合使用PHP和Java。通过PHP对Java的良好支持,使得Java对象如同常规的PHP对象一样,透明地被创建和使用。
AutionWatch网站使得各种规模的商业团体都可以从其动态竞价环境中获益。它每月的访问人数在二百六十万以上;已有三十多万个注册用户;每个月进行一百二十万次拍卖。 他们曾尝试使用Java,但还是选择了PHP,就因为它更容易使用,开发速度更快。若想知道的更多,请联系Ben Margolin,他是AuctionWatch网站销售服务部的主任(ben@auctionwatch.com)。
编程顾问Reuven Lerner曾在各种语言之间作过比较。他对PHP的看法概括如下:
“这是门容易学习的语言。美工和Web设计师可能会说他们并非程序员,但事实上,他们在大型项目中,越来越多的使用了JavaScript, VBScript以及其它一些简单的编程语言。与Perl相比,PHP更加正规和明确;对一个新手来说,PHP比Java更容易掌握。确实,PHP有点象 JavaScript(如果存在服务器端版本的话)。任何人,不管有无编程经验,都可以在很短的时间里学会并使用PHP。这一点也许VBScript可以做到,但Perl和Java肯定不行.....PHP绝对是一个非凡的,强大的系统。无怪乎能够成为创建Web站点的流行语言.....我认为,PHP将成为Java和JSP强有力的竞争对手,我会在某些客户和公司内部项目中极力推荐PHP。”
PHP:一直在前进
JSP有Sun作为其后盾,因此不断获得媒体的关注。但有趣的是,尽管没有任何宣传攻势,PHP的流行度仍然以8-11%的速度在增长,远远大于服务器端应用程序4%的月增长率。有六百五十万个站点使用了PHP(参见Netcraft 2001年5月的调查报告)。39%的Apache服务器上配置了PHP;而Perl占了11%的市场分额,名列第四。Apache保持着59%的Web
服务器市场占有率;Microsoft次之,仅28%(参见E-Soft Inc./SecuritySpace 2001年5月的调查报告)。
使用PHP的著名公司有:Unilever、Philips、NTT、Cisco、 Japan Airlines、 Air Canada、 Lufthansa、 GE Marketplace、 Wallstreet:Online Germany、 AuctionWatch、 VillageVoic、 Dialpad以及BMC。
1.Intranet Design杂志:一个IT经理对PHP的看法,2000年6月4日。
http://linuxtoday.com/news_story.php3?ltsn=2000-06-04-002-04-NW-HL-SW
2.eWEEK:四中脚本语言的速度开发,2000年10月30日。
http://www.zdnet.com/eweek/stories/general/0,11011,2646052,00.html
6.PHP的简要历史 "; ?> "; ";
PHP最初作为一种用Perl写成的简单小巧的CGI工具,被称为“个人主页工具(Personal Home Page Tools)”,后来改称为“个人主页构建工具箱(Personal Home Page Construction Kit)”。
也曾叫做“专业主页工具(Professional Home Pages)”,现在最新的名称是
“PHP超文本预处理器(PHP Hypertext Pre-Processor)”
另外还有一种工具,可以非常简单的把SQL查询语句嵌入Web页面当中。这种工具基本上可以看作是解析SQL查询语句,并在此基础上非常容易的创建表单和表格的另一种CGI工具。这种工具叫做FI(Form Interpreter,表单解释器)。
PHP/FI2.0彻底重写了这两个包,并合并成一个单独的程序。最终发展成一种嵌在HTML文件当中的简单的程序语言。PHP通过直接在HTML文件中放置简单的脚本
使得不再需要创建大量微小的Perl CGI程序。因为免去了多次调用Perl程序的负荷,所以大大提高了你的Web页面的总体性能。大大提高了你的Web页面的总体性能。而且通过把构成Web页面的所有组件放在一个单独的HTML文件中,使得大型站点的管理变的更为容易。由于包括了对各种数据库的支持,可以非常容易的开发基于数据库的Web页面。 许多人都认为,这种方式比创建分离的HTML和CGI文件更为简单。
现在,PHP/FI又被重新命名为PHP。
7.一个简单的例子
假设你有这样一个表单:
你的display.html文件可以这样来显示表单所提交的内容:
echo "HI $name, you are $age years old!
这是那么地容易! PHP自动为每一个表单输入域创建了变量。你可以直接在
ACTION指向的文件中使用这些变量。
一旦搞清楚了变量使用方法,那么下一步你便可以在页面中编写一些逻辑流程了。 例如,你想根据不同的用户输入来显示不同的消息,就可以使用if/else语句。 把上面的例子改一改,我们就可以根据用户输入的年龄做不同的显示了:
if($age>50);
echo "Hi $name, you are ancient!
elseif($age>30);
echo "Hi $name, you are very old!
else;
echo "Hi $name.";
endif;
?>
PHP提供了一套非常强大的脚本语言,它能做的要比上面这个简单的例子要多的多。可参见PHP脚本语言部分,获取更多信息。
你也可以用PHP来配置页面的访问权限。这是通过一个内建的配置界面来实现的。比方说,你可以指定来自特定的域的用户才能访问你的页面。或者,你也可以创建一个规则,用密码保护特定的页面。 可参见访问控制部分,以获取详细内容。
PHP还能够从任何RFC-1867兼容的Web浏览器上载文件。 这一功能使得用户可以上传文本和二进制文件。通过PHP的访问控制和逻辑函数,你可以对谁可以上传文件以及文件上传后执行什么操作等实现完全的控制。可参见文件上传部分,以获取详细内容。
PHP有PostgreSQL数据库的支持包。它支持在HTML文件中嵌入SQL查询语句。
8. SOAPX4和PhpXMLP
SOAP是一种基于XML的协议,用于在两个进程间传送消息和进行RPC式的通讯。万维网联盟的XML协议(XP)工作小组正在开发SOAP标准,这一标准将被称为XP。
SOAPX4(Simple Object Access Protocol,简单对象访问协议)是PHP实现:
http://dietrich.ganx4.com/soapx4.
以及http://sourceforge.net/projects/phpxmlp。
8.1 XML/XSLT发布引擎
Krysalis是一套基于PHP技术的XML/XSLT发布引擎,其设计思想来自于Cocoon。
InterAKT公司开发Krysalis为得是实现下一代Web服务的功能,即信息,应用程序逻辑和表示层的完全分离。
Krysalis是一种开放源码的以XML/XSLT为核心的PHP开发平台,它利用了PHAkt的大部份代码,创建了Krysalis标记库(taglib)。
其主要功能有:
·动态的XML支持。
·动态生成PDF文档。
·用正规表达式描述站点地图。
·PXP页面缓存。
·多个转换管道。
·针对不同数据的多个连接类型(ADODB)。
请访问Krysalis的站点获取更多信息http://www.interakt.ro/products/krysalis
9.PHP类库
PHP是一个面向对象的脚本语言。因此PHP代码是“类,类,类,还是类”。在你编写PHP代码时,你必需编写可重用的类,这些类也可以使用现有的类。网上有着大量编写好的类,拿来就可以使用。这其中有用来访问数据库的类,生成XML文档和HTML表单的类,还有用来创建表格和其它HTML对象的类。如果你编写了什么通用的类,那么请你把它放到网上去。到2005年,网上将会有超过1亿个可重用的PHP类。PHP类的优势在于它们提供了数据隐藏、继承、封装、可靠性、可重用性以及多态性等功能和特性。下面给出了最重要的PHP站点:
9.1 PHP类与PHP扩展和应用程序库
可访问下列Web站点获取大量立马就可以用的PHP类库
·PHP classes: http://phpclasses.upperdesign.com.
·PEAR(PHP扩展和应用程序库)是一个PHP扩展程序的代码库,与Perl的CPAN相似:http://pear.php.net
·ADODB (Active Data Objects Data Base,动态数据对象数据库) http://php.weblogs.com/ADODB : PHP的数据库访问函数并不统一。每个数据库扩展都使用不同并且不兼容的API函数。这就需要创建一个数据库类来隐藏不同数据库间的差异(即对不同数据库间的差异进行封装)。 从而,我们可以很容易的实现数据库的切换。ADODB目前可以支持MySQL、PostgreSQL、Interbase、
Oracle、 MS SQL 7、 Foxpro、 Access、 ADO、 Sybase和一般的ODBC。可参考ADODB的手册。PhpLens就是基于ADODB的。
·Metabase (数据库独立访问和管理)
http://phpclasses.upperdesign.com/browse.html/package/20
·PHP Hot scripts: http://www.hotscripts.com/PHP
·非常受欢迎的PHP资源站点:http://php.resourceindex.com
·PHP项目站点:http://php.net/projects.php
·PHP Lib Netuse: http://phplib.netuse.de
·PHP小工具: http://www.northern.ca/projects/phpwidgets
·PHP4通用框架: http://sourceforge.net/projects/gpfr
·Source Forge的PHP库:http://phplib.sourceforge.net
·Source Forge的PHP程序片段: http://sourceforge.net/snippet
·E-gineer的PHP库 http://e-gineer.com/articles/php-hacker
·PHP常见问题解答: http://php.faqts.com
·PHP库 http://px.sklar.com
·PHP工厂: http://alfalinux.sourceforge.net/phpfact.php3
·PHP Builder:http://phpbuilder.com/snippet
·PHP developer: http://www.phpdeveloper.org
·PHP新手: http://www.newbienetwork.net
· PHP walrus:http://www.evilwalrus.com
9.2 其它PHP工具
其它的PHP工具有:
·用户登录样本: http://www.devshed.com/Server_Side/PHP/Commerce1
·phpPDFtable是一个PHP类,方便PDF报表的创建。需安装PHP4.x(PHP3.x应该也可以)和pdflib: http://sourceforge.net/projects/phppdftable
·数据管理员提供了一个基于PHP的数据管理界面。它并不仅限于一个或两个数据库。并且封装了原来的PHP数据库访问函数:http://sourceforge.net/projects/dadmin
· PSlib是一个用来生成PostScript文件的类库。提供了一个生成PostScript文件的简单方法。 只需在你的PHP脚本中调用PSlib函数就可以非常容易的生成PS文件:http://sourceforge.net/projects/pslib
· 可紧密合作的一组完整的PHP脚本,可创建高度自定义的,动态的和面向模块的web站点:http://sourceforge.net/projects/twebs
·phpOpenTracker是一个站点访问追踪的全面解决方案。所收集的数据存储在SQL数据库中。可以进行复杂但是简单的分析工作。包含了一套用于分析和生成报表(HTML和PDF)的功能强大的API:http://www.phpopentracker.de
·PHPShopCart 是一个用PHP的编写的网上购物车程序,使用MySQL数据库。此程序是为 “Linux下的数据库指南”这本书编写的”(Syngress Media): http://sourceforge.net/projects/phpshopcart
10 PHPGem 包
PHPGem本身也是PHP脚本程序,可加速生成操作数据表的PHP脚本。可工作于不同的SQL数据库,如PostgreSQL、MySQL、 mSQL、ODBC以及Adabas。你只要输入数据字段的描述信息和参数(如字段名称、是/否搜索字段等),PHPGem就会为你输出另一个PHP脚本,该脚本可以对这个数据表进行各种操作(浏览/添加/编辑/删除/复制/搜索)。PHPGem支持多层嵌套的数据表。PHPGem允许你为每一个用户指定对每一个数据表和字段访问的级别。PHPGem还支持图象信息。
(未完待续)