当建设一个网站的时候,绝大多数时候不仅需要它能够提供静态网页访问能力,还希望它能和浏览器用户交互、访问后台数据库提供实时更新的信息等等,一句话,要提供动态网页服务能力。这时,你是选择传统方式的cgi呢,还是选择php、asp等服务器端脚本呢? ■从cgi到服务器端脚本 创建动态网页的标准方式是cgi,这种方式允许web服务器运行一个cgi程序来回应浏览器的请求。除了要遵从简单的cgi标准之外,cgi程序的开发与普通程序开发没有什么区别。然而,随着要生成的动态网页的数量和复杂程度的增加,这种方式就遇到了困难。 cgi程序包括两个主要部分,一个是程序代码,另一个是要输出的html文档内容,可以称作html代码。最早的web开发者既是程序员,又是网页设计者,但是那时的页面都比较简单,开发者最关心的是程序代码的问题,页面代码基本上不需要太多的调整。而随着包括dhtml、javascript在内的技术发展,使得页面可以设计得非常复杂,而由于出现了各种cgi的程序库,程序代码则变得简单多了。这样每进行一次页面代码的调整,cgi程序就需要改动,以至于最后在cgi程序调试中,调试html代码的工作量超过了调试程序代码的工作量。这说明在web开发中,html代码的重要性已经十分明显,使得传统的以程序代码为中心的cgi程序不再是最适合的动态网页处理方式了。 这样,相当多的程序员对于这种调整html代码的工作感到厌倦,尤其随着internet的商业化,编写cgi程序和进行html页面设计已经成为了两种不同的职业。为了解决这个问题,程序员首先使用了模板文件的方法将程序代码和html代码分开,cgi程序读取模板文件来获得html代码,从而使得在对页面进行较小调整的时候,不需要改动cgi程序。 基本上每个程序员在自己的cgi程序中使用自定义的模板,然而,如果有一种通用的html模板,使用通用的程序进行预处理,这样不就大大减少了程序设计的工作量吗?最简单的模板可以通过替换模板中预定义的变量来完成解释工作,由于这种程序简单而有效,因此就被集成在web服务器中,以提供比cgi程序更高的效率,这就是最早的服务器端脚本。 这些早期的服务器端脚本,例如出现在ncsa httpd的ssi,只包括变量的概念,但没有控制语句的概念。后来,不同的程序开发者重新开发了支持控制语句,甚至支持子程序的脚本解释处理程序,使得这些程序不仅能为特定的动态网页服务,而且能够进行编程,因而能够完成cgi程序能完成的所有工作,成为了一种新的编程语言。同样是由于性能的缘故,这些程序被合并入web服务器本身,这就它成为web开发的一种新形式。 ■来自开放资源的php 当前,服务器端脚本已经是开发动态网页的常用方式,虽然cgi仍然具备灵活的优势,但在一般情况下,使用服务器端脚本更容易和方便。然而,与cgi不同的是,服务器端脚本没有一个统一的标准,不同的服务器端脚本使用各自的语法。当前比较常用的有:active server pages(asp),coldfusion,java servlets,personal home page(php)等。这些技术中,既包括有大公司支持的软件,如asp,也包括通过internet进行合作开发的开放源代码软件,如php。 php正是这样一种服务器端脚本语言,它最开始是由rasums lerdorf编写的,只是一个简单的用perl语言编写的cgi程序,用于记录访问他自己的网页的访问者。以后它又被用c语言重新写过,范围扩大到访问数据库。在这期间,有许多人向rasums lerdorf要此程序的拷贝,以便自己使用,rasums lerdorf为此写了一些介绍此程序的文档,并发布了php v1.0。以后,越来越多的人使用php,并强烈要求增加一些其他的特性,如循环语句和数组变量等,这时其他的一些程序员也开始参与php源码的编写,对php进行了重新编写,php v3.0就出现了。当前,使用php的网站已经超过80万,并且还在不断地增加。 除了向浏览器发送动态网页之外,php还能发送不同http头标识,使其能提供网页重定位、与web服务器的安全认证结合的能力、以及设置cookie。php能提供与多种数据库直接互联的能力,包括mysql、sybase、informix、oracle、mssql等,也能支持odbc。并通过额外的库能够支持会话管理和xml处理(这些库都是基本的库,因此也是php用户的基本配置)。从这里我们可以看出,php已经不再是简单的服务器端脚本了,按照《php3浏览器应用编程》的作者david medinets的话,php是一种应用服务器。因为它不仅仅包括一个完整的编程语言,而且还包括完整的访问数据库的能力、支持internet协议(如电子邮件和http)的能力,这一整套技术使得php能与asp、coldfusion、websphere互较短长。 要运行php,通常使用linux或freebsd作为操作系统,使用apache作为web服务器。当然使用其他操作系统也同样可行,这是因为php是一种跨平台的软件,这当然得益于它是开放源代码的软件。但是,如果不使用apache服务器,那么php就只能以cgi的方式运行,这样就不能利用将php编译进apache带来的性能优势。当从www.php3.net中下载了最新版本的php并安装配置完毕之后,就可以使用编辑器或网页制作软件来编写php代码了。如果你能使用c或perl进行编程,就会发现php编程并不复杂,作为程序语言的php比c简单,比perl易懂。下面是一个最简单的嵌入php程序的页面。
本新闻共2页,当前在第1页 1 2
〈html〉 〈head〉〈title〉test〈/title〉〈/head〉 〈body〉 〈?php $string = ’world!’; ?〉 〈h1〉hello,〈?php echo $string ?〉〈/h1〉 〈/body〉 〈/html〉 在html网页中嵌入的php代码,需要以标记结束。上面这个页面将显示hello,world!的结果。这里可以看出,php程序语法与c或perl非常类似。事实上,php来源于c和perl,支持c和perl大部分语法和操作符,因此使用php对c和perl程序员都是非常简单的事情。 ■选择php 虽然php已经十分流行,但在国内了解它的人却很少,这当然是因为它不是商业软件,缺乏市场运作。即使在听说过php的人们中,不少人也抱有这样的看法,php既没有商业公司的支持,又缺乏商业的图形化开发工具,php能够和asp等商业软件一样有前途吗?的确,asp由于有微软公司的支持,使得它迅速变得十分流行,现在书店中充斥着asp的相关书籍,而很少能找到介绍php的著作,正说明了国内的这种流行趋势。然而,过去一年中整个互联网中php使用者稳步增长的事实,却与这些观点截然相反。我认为那些不看重php的人至少忽略了以下几个原因: 1. php已经证明是非常实用的软件,性能、可靠性、稳定性非常高,借一个来自武侠小说的比喻,php就如同来自江湖下层一步步成名的草莽英雄,而商业软件则如同出身高贵的少年侠士,其成名的原因与其师傅和门派密切相关。php具备各种数据类型并支持复杂的文本处理,它甚至支持面向对象,能配置为处理xml等等;更为重要的是php的这些功能都是非常实用的,要知道php的开发者都是根据自己的需要自愿进行的开发,它具备的功能一定是有着实际用途的。虽不能说php比同类产品强,但其实力不容忽视。 2. php是跨平台的产品,它能运行在多种unix以及windows nt上,并能访问多种不同的数据库,对很多人来讲,这一点非常重要。商业产品通常要求非常苛刻,只能和特定的操作系统和数据库相互协作。而人们喜欢使用自己已经熟悉的操作系统、web服务器和数据库,如linux、apache和mysql。 3. php是开放源代码的软件,很多人对此不以为然,然而他们忽视了占web服务器市场58%的apache服务器,忽视了linux、freebsd等开放源代码的操作系统,这些开放源代码的软件结合在一起,就形成了一个非常有效的解决方案。 4. 即便不考虑源代码的因素,php不需要任何费用的特点也是商业软件无法相比的。虽然asp也是免费的,然而很多人忽视了运行windows nt及ms sql的费用,而php和linux/freebsd、apache、mysql相互合作,几乎不需要任何软件费用,当前如果不考虑盗版,究竟有多少人还会坚持asp呢? 5. php有良好的技术支持,可以通过电子邮件、论坛、网页、irc等方式获得技术支持。这听起来有些好笑,难道这比商业软件的技术支持更有效吗?事实上依我个人使用商业软件和开放源代码软件的经验,这种技术支持形式相当不错,设想一下,你能够得到来自asp开发组的技术服务吗?我想更常见的结果是在一通800电话之后,得到的只是一堆无用的建议,最后你终于厌倦了转来转去的电话。即便是现场服务,也许是某个工程师在一遍又一遍地重装系统,直到系统偶然地运行正常为止,这样也好,系统管理员至少可以装作什么都不懂的样子稍事休息一下。而开放源代码使你能提出更接近故障本质的现象,不但遇到过同样现象的使用者会提供帮助,php的开发者也能提供帮助。有什么技术支持比几十万个使用者,其中大多数都是使用php的老手,提供的帮助更有效呢。 无论如何,商业支持并不是一个软件流行的必要条件,反过来倒是正确的,最近的例子linux不就是由于流行而得到了商业支持的吗?例如最新版本的网页制作工具dreamwaver 3.0,也开始支持php的标记,允许在其中直接进行php代码的编写了。越来越多的国内web开发者也开始将目光
http://www.bkjia.com/phpjc/532430.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/532430.htmltecharticle当建设一个网站的时候,绝大多数时候不仅需要它能够提供静态网页访问能力,还希望它能和浏览器用户交互、访问后台数据库提供实时更…