ccidnet????

出版日期:2000-10-01 总期号:164 本年期号:10

本期导读
新闻专递
方案设计
应用篇
技术篇
产品篇
WEB动态网页静态化

孙宏、刘华毅

  在最近几年,万维网(也称环球信息网,即WWW)不断改变信息处理技术的面貌。WEB已经快速地成为一种有效的媒介,并适合人们和商业沟通和协作。几乎所有的信息技术领域都普遍受到WEB的影响。Web访问带来更多用户和更多数据,这意味着给服务器和数据库更多压力和最终用户得到越来越慢的响应速度。与不断靠增加CPU,磁盘驱动器及内存来跟上这种增长的需求相比, WEB动态网页面静态化应该是一个更实用,更经济的选择。


  1. PHP简介


  1.1 引入PHP的定义

  PHP是Personal Home Page 的缩写,是一个基于服务端来创建动态网站的脚本语言,可以用PHP和HTML生成网站主页。当一个访问者打开主页时,服务端便执行PHP的命令并将执行结果发送至访问者的浏览器中,这类似于ASP和CoildFusion,然而PHP和他们不同之处在于PHP开放源码和跨越平台,PHP可以运行在WINDOWS NT和多种版本的UNIX上。它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的服务器的内存映象减小。PHP消耗的资源较少,当PHP作为Apache Web服务器一部分时,运行代码不需要调用外部二进制程序,服务器不需要承担任何额外的负担。


  图1

  1.2 PHP脚本语言及使用方法

  用 PHP 来写个最基本的 "hello, world" 程序。

  〈html〉

  〈head〉

  〈title〉First program〈/title〉

  〈/head〉

  〈body〉

  〈?php

   echo "hello, world\n";

  ?〉

  〈/body〉

  〈/html〉

  这十行程序在 PHP 中不需经过编译等复杂的过程,只要将它放在配置好可执行 PHP 语法的服务器中,将它存成文件 helloworld.php 好了。在用户的浏览器端,只要在 Location: 输入 http://some.hostname/helloworld.php,就可以在浏览器上看到 hello, world 字符串出现。我们可以看到,这个程序只有三行有用,其它六行都是标准的 HTML 语法。而它在返回浏览器时和 JavaScript 或 VBScript 完全不一样,PHP 的程序没有传到浏览器,只在浏览器上看到短短的几个字 "hello, world"。在第六行及第八行,分别是 PHP 的开始及结束的嵌入符号。第七行才是服务器端执行的程序。在这个例子中,"\n" 和 C 语言的表示都一模一样,代表换行的意思。


  2. WEB动态网页静态化原理


  2.1 原理图

  了解了PHP定义之后,让我们看一下WEB动态网页静态化的原理图图2。


  图2

  2.2 实现函数

  图2的具体实现函数如function gen_static_file()所示

  

  function gen_static_file($program, $filename)

  {

   $program 1= "/usr/local/apache/htdocs/php/" . $program;

   $filename1 = "/usr/local/apache/htdocs/ static_html/" . $filename;

   $cmd_str = "/usr/local/php4/bin/php " . $program1 . " 〉 " . $filename1 . " ";

   system($cmd_str);

   echo $filename . " generated.〈br〉";

  }

  这个函数是实现静态化的关键,即PHP动态页面程序不是被送到浏览器中,而是输入到名为$filename的文件中去(如图2)。两个参数中$program是PHP动态页面程序,$filename是生成的静态页面的名字(可根据需要自己制定命名规则,这一点很重要,见下文),/usr/local/php4/bin/php是PHP中具有把程序输入文件功能的部分,System是PHP中执行外部命令的函数。我们还可以看出所有生成动态页面的php程序需放在/php/目录下,所有新产生的静态页面则会出现在/static_html/目录下(这些路径可以根据具体需要设置)。


  3. 应用举例


  下面让我们举个具体例子,看一下college_static.php的静态页面是怎样生成的。

  function gen_college_static ()

  {

   for ($i = 0; $i 〈= 32; $i++)

   {

   putenv("province_id=" . $i); //*.php文件从数据库取数据时要用到。

   $filename = " college_static". $i . ".html";

   gen_static_file("college_static.php", $filename);

   }

  从这个函数我们可以看到通过调用函数gen_static_file(), college_static.php经过静态化,变成了33个静态页面college.static0.html~college.static33.html,其中$filename会随着$I的变化而变化。当然也可以从数据库中直接取值,来控制生成的静态页面的个数和名字,其他程序对生成的静态页面的调用应和静态页面的命名规则一致。


  4. 总结


  在Internet上,Internet通常是瓶颈;启动数据库和数据库查询是另外两种瓶颈。除非正在生成的内容完全依赖于用户的极大量的输入,否则利用所有可能的输入产生静态的HTML,以存储换取性能,实现WEB动态网页静态化,产生静态的HTML比任何动态的内容要快得多,这样还可以大大减轻数据库服务器的压力。本文介绍的静态化方案对于从数据库读取数据的动态web页面的静态化具有广泛的普遍适用性。