Web技术进阶—PHP构建网站

  当建设一个网站的时候,绝大多数时候不仅需要它能够提供静态网页访问能力,还希望它能和浏览器用户交互、访问后台数据库提供实时更新的信息等等,一句话,要提供动态网页服务能力。这时,你是选择传统方式的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程序的页面。

  〈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开发者也开始将目光投向PHP,其中大多数选择了Unix (Linux,FreeBSD, Solaris, AIX, HP-UX等等)作为Web站点的操作系统,而国内出版计算机图书的出版社也会陆续出版一些PHP的著作,显然这又会有利于PHP的推广和发展。