青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 从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/archives/1289.html
  • 文章排行:
  • 1.低调年华
  • 貌似没有wp-post.php这个文件
    WP版本:2.3.3 、2.5
  • 2008/4/9 23:17:38   支持(8)反对(3) 回复
  • 2.火星
  • 你好月光,我自己写的PHP程序,由于参数太长想生成静态 ,这篇文章是说的这个吗?
  • 2013/4/9 1:34:08   支持(8)反对(4) 回复
  • 3.tencentroot
  • 很好,很强大
    甚好,甚强大
  • 2008/3/29 21:31:20   支持(10)反对(7) 回复
  • 4.ddigo
  • 8楼比喻欠妥!锤子和剪刀?呵呵…谁好用还真不好说,各有千秋吧…
  • 2008/3/30 4:32:58   支持(8)反对(5) 回复
  • 5.lhgun
  • 在dz论坛里面就体现了这个功能,url静态,不过对于非独立主机用户,要设置服务器的rewrite规则很难办到,除非空间商专门为某些产品做了预设置
  • 2008/3/31 3:38:20   支持(9)反对(6) 回复
  • 6.杂友
  • ASP生成HTML也很方便啊,FSO组件
  • 2008/3/29 21:53:48   支持(6)反对(4) 回复
  • 8.sein
  • 月光,用了这个修改是不是不需要开那个静态插件了?
  • 2008/3/29 22:21:37   支持(8)反对(7) 回复
  • 9.一个过路者
  • 其实非HTML,也没必要弄啥rewrite 。作者的全文表达意思也就是个缓存概念而已,并未真正的体现所谓的HTML相关东西。至于HTML的应该是生成后直接交由HTTP SERVER去处理。这只是个取巧的缓存机制罢了

    完全可以访问 ws.php 然后由这个程序去判断是否存在缓存,有缓存直接输出缓存。有效降低数据库的链接性能罢了
  • 2013/2/6 11:23:29   支持(4)反对(3) 回复
  • 10.管智鹏
  • 能抢到月光的沙发,好荣幸呀!!
  • 2008/3/29 21:16:24   支持(7)反对(7) 回复
  • 12.bill
  • asp和php相比就和锤子和剪刀哪个更好用一样
  • 2008/3/29 22:18:02   支持(6)反对(6) 回复
  • 13.linker
  • 有些云里雾里的,最好能提供现成的,哈……
  • 2008/3/30 0:35:50   支持(9)反对(9) 回复
  • 14.tony
  • 1.asp生成HTML也一样方便,很多中大型的CMS都有很成熟的解方案。
    2.ASP和PHP的根本没有什么意义,有什么功能是ASP实现的PHP不能的或说PHP能做到的ASP不能?
    3.事实上PHP最大的优势是在于有大量的开源社区的支持,从网站到企业应用,基本上你都可以找到相关的开源项目。
  • 2008/3/30 9:29:16   支持(10)反对(10) 回复
  • 15.williamlong
  • 在ASP中我没有找到能实现ob_get_flush类似的功能,只有Response.Buffer 和Response.Flush是实现不了我上面的这段PHP代码的。
  • 2008/3/30 9:44:18   支持(6)反对(6) 回复
  • 16.Kulaer
  • 老月,asp生成html有什么好的代码?比如说整个站点的那种
  • 2008/3/31 8:38:45   支持(6)反对(6) 回复
  • 18.zongzong
  • 有个实际的例子就好了!!!!!!
    不太懂的看晕晕的。。。。
  • 2009/4/22 12:39:34   支持(8)反对(8) 回复
  • 21.低调年华
  • 正在寻找合适的blog程序代替z-blog,对ZB忍耐已临近极限了
  • 2008/4/12 10:59:41   支持(5)反对(6) 回复
  • 22.蜗牛
  • 找了好多,就看到月光这里有代码。。
    但我是win主机,不知道用代码能实现生成html不啊。
  • 2011/9/6 0:27:38   支持(5)反对(6) 回复
  • 23.长春演艺策划
  • 到底是动态还是静态好啊
  • 2011/11/19 15:58:03   支持(8)反对(9) 回复
  • 25.ask
  • RewriteRule ^post/([a-z0-9\-]+\.html)$ wp-post.php?$1$2

    请问这里面的$2代表什么?
  • 2008/10/14 9:25:05   支持(7)反对(9) 回复
  • 26.0987
  • 如果加上面向对象的封装,可以实现这些代码的透明整合.
    不过,asp现在被asp.net取代了,php要和asp.net比.
  • 2008/3/30 3:15:43   支持(9)反对(12) 回复
  • 27.tony
  • 用XMLHTTP就可以获取动态地址内容,然后用STREAM或FSO输出就行了。
    PS:可能你把ASP只是做为ASP了(有点绕,但找不到更好的表达方式)。
    不知你看过没有OREILLY的ASP设计,其实ASP可能借助于WIN的组件实现类似于OO的编程。
  • 2008/3/30 13:33:40   支持(7)反对(10) 回复
  • 28.williamlong
  • 我上面只是举了例子,并不是说这个可以静态化WordPress。
  • 2008/4/10 0:48:52   支持(8)反对(11) 回复
  • 29.gmail
  • 不错,支持,有时间回长来这里学习的
  • 2008/4/13 20:06:08   支持(6)反对(9) 回复
  • 30.750
  • 支持
    看来自己写个程序是有必要
  • 2008/11/24 1:49:45   支持(8)反对(11) 回复
  • 33.pnchq
  • 不错 我用的BOBLOG有这个功能 不用我自己手动 嘿嘿
  • 2008/3/30 12:03:16   支持(6)反对(13) 回复
  • 34.tsian
  • 请问一下,你怎么保证侧边栏的更新。
    比如说 recent comments
  • 2008/4/7 17:03:16   支持(5)反对(12) 回复
  • 35.williamlong
  • 我觉得ASP的FSO生成HTML不如PHP方便,动态网页的改造成本很高,修改量很大。
  • 2008/3/29 22:08:47   支持(4)反对(12) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.