月光博客

青青子衿, 悠悠我心, 但为君故, 沉吟至今

« 从IIS的ASP迁移到APACHE的PHP的方法WordPress 2.5发布,宽屏显示异常 »

通用PHP动态生成静态HTML网页的代码

  最近研究PHP的一些开发技术,发现PHP有很多ASP所没有的优秀功能,可以完成一些以前无法完成的功能,例如动态生成HTML静态页面,以减少服务器CPU的负载,提高用户访问的速度。

  我们知道,PHP读取MYSQL动态显示,在访问量大的情况下,会有很多性能问题,如果租用别人的虚拟主机,则会因为CPU消耗过多而被限制CPU,导致网页无法访问。我这里给出一个PHP动态生成HTML的方法,可以极大降低服务器CPU负荷。

  首先设置.htaccess文件,将动态调用的参数转换为静态的HTML的URL地址,例如将在post目录下的文件,转发到根目录的wp-post.php文件中,加入的语句类似:

RewriteRule ^post/([a-z0-9\-]+\.html)$  wp-post.php?$1$2

  然后修改wp-post.php文件,在文件的开头加入以下PHP代码:

ob_start();
$qstring = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : "";
define("HTML_FILE",  $_SERVER['DOCUMENT_ROOT']."/post/".$qstring);

if (file_exists(HTML_FILE))
{
 $lcft = filemtime(HTML_FILE);
 if (($lcft + 3600) > time())  //判断上次生成HTML文件是否超过1小时,若没有才直接输出文件内容
 {
  echo(file_get_contents(HTML_FILE));
  exit(0);
 }
}

  之后是现有的PHP的代码,然后在当前代码的最后面加上如下的PHP代码:

define("HTMLMETA","<!-- this is a real static html file created at ".date("Y-m-d H:i:s")." -->");
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, "w");
if ($fp)
{
 fwrite($fp, $buffer.HTMLMETA);
 fclose($fp);
}

  好了,然后查看你的静态HTML页面,如果页面尾部出现了注释行,说明已经成功的创建了静态HTML文件。

  这个方法的一个应用就是我先前写的那个“WordPress年度博客统计插件”,这个统计插件由于查询十多次数据库,很多人访问的时候会有很大性能问题,使用我介绍的这种动态生成HTML技术后,一天就查询一次,生成一次统计排行,完美解决了查询数据库的性能问题。



原创文章如转载,请注明:转载自月光博客 [ http://www.williamlong.info/ ]

本文链接地址:http://www.williamlong.info/archives/1289.html
  • 文章排行:
  • ASP彻底实现伪静态化html--起步者博客(引用)
  • 起步者'Blog
  • &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这段时间在网上待的时间较多!为了查找关于实现ASP动态内容的静态化处理花了我的多少时间,到处看了下,大多数是转载而来,几乎雷同,主要有以下几种方法:</fon
  • 2008-3-31 18:41:13
  • 7.williamlong
  • williamlong.info
  • 我觉得ASP的FSO生成HTML不如PHP方便,动态网页的改造成本很高,修改量很大。
  • 2008-3-29 22:08:47   回复该留言
  • 8.bill
  • asp和php相比就和锤子和剪刀哪个更好用一样
  • 2008-3-29 22:18:02   回复该留言
  • 9.sein
  • 月光,用了这个修改是不是不需要开那个静态插件了?
  • 2008-3-29 22:21:37   回复该留言
  • 12.linker
  • 有些云里雾里的,最好能提供现成的,哈……
  • 2008-3-30 0:35:50   回复该留言
  • 13.0987
  • 如果加上面向对象的封装,可以实现这些代码的透明整合.
    不过,asp现在被asp.net取代了,php要和asp.net比.
  • 2008-3-30 3:15:43   回复该留言
  • 14.ddigo
  • 8楼比喻欠妥!锤子和剪刀?呵呵…谁好用还真不好说,各有千秋吧…
  • 2008-3-30 4:32:58   回复该留言
  • 15.tony
  • 1.asp生成HTML也一样方便,很多中大型的CMS都有很成熟的解方案。
    2.ASP和PHP的根本没有什么意义,有什么功能是ASP实现的PHP不能的或说PHP能做到的ASP不能?
    3.事实上PHP最大的优势是在于有大量的开源社区的支持,从网站到企业应用,基本上你都可以找到相关的开源项目。
  • 2008-3-30 9:29:16   回复该留言
  • 16.williamlong
  • williamlong.info
  • 在ASP中我没有找到能实现ob_get_flush类似的功能,只有Response.Buffer 和Response.Flush是实现不了我上面的这段PHP代码的。
  • 2008-3-30 9:44:18   回复该留言
  • 17.pnchq
  • 不错 我用的BOBLOG有这个功能 不用我自己手动 嘿嘿
  • 2008-3-30 12:03:16   回复该留言
  • 18.tony
  • 用XMLHTTP就可以获取动态地址内容,然后用STREAM或FSO输出就行了。
    PS:可能你把ASP只是做为ASP了(有点绕,但找不到更好的表达方式)。
    不知你看过没有OREILLY的ASP设计,其实ASP可能借助于WIN的组件实现类似于OO的编程。
  • 2008-3-30 13:33:40   回复该留言
  • 19.lhgun
  • 在dz论坛里面就体现了这个功能,url静态,不过对于非独立主机用户,要设置服务器的rewrite规则很难办到,除非空间商专门为某些产品做了预设置
  • 2008-3-31 3:38:20   回复该留言
  • 20.Kulaer
  • 老月,asp生成html有什么好的代码?比如说整个站点的那种
  • 2008-3-31 8:38:45   回复该留言
  • 24.www.spyrise.org
  • 小样,我不用PHP已经有很多年。
    不过,好象我前面看到你07年写的PHP不如ASP呀,呵呵。
    你这种东西太OLD了。查到文章后先查静态页面不就可以了?
  • 2008-4-4 9:30:48   回复该留言
  • 25.tsian
  • 请问一下,你怎么保证侧边栏的更新。
    比如说 recent comments
  • 2008-4-7 17:03:16   回复该留言
  • 26.低调年华
  • 貌似没有wp-post.php这个文件
    WP版本:2.3.3 、2.5
  • 2008-4-9 23:17:38   回复该留言
  • 29.gmail
  • 不错,支持,有时间回长来这里学习的
  • 2008-4-13 20:06:08   回复该留言
  • 30.ask
  • RewriteRule ^post/([a-z0-9\-]+\.html)$ wp-post.php?$1$2

    请问这里面的$2代表什么?
  • 2008-10-14 9:25:05   回复该留言
  • 32.zongzong
  • 有个实际的例子就好了!!!!!!
    不太懂的看晕晕的。。。。
  • 2009-4-22 12:39:34   回复该留言
  • 33.东东
  • 收藏.

    http://www.phpgz.com/html/yying/gjtai/index.html 更多点静态.
  • 2009-6-17 12:43:36   回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过电子邮件订阅本站

站内搜索

热文排行

最新评论及回复

最近发表

网站收藏

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.

This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.