月光博客 » 编程开发 » 通用PHP动态生成静态HTML网页的代码

通用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技术后,一天就查询一次,生成一次统计排行,完美解决了查询数据库的性能问题。

顶一下 ▲()   踩一下 ▼()

相关文章

  1. 1
    低调年华   说道:
    貌似没有wp-post.php这个文件
    WP版本:2.3.3 、2.5
    支持(9反对(3回复
  1. 2
    火星   说道:
    你好月光,我自己写的PHP程序,由于参数太长想生成静态 ,这篇文章是说的这个吗?
    支持(8反对(4回复
  1. 3
    tencentroot   说道:
    很好,很强大
    甚好,甚强大
    支持(10反对(7回复
  1. 4
    ddigo   说道:
    8楼比喻欠妥!锤子和剪刀?呵呵…谁好用还真不好说,各有千秋吧…
    支持(8反对(5回复
  1. 5
    lhgun   说道:
    在dz论坛里面就体现了这个功能,url静态,不过对于非独立主机用户,要设置服务器的rewrite规则很难办到,除非空间商专门为某些产品做了预设置
    支持(9反对(6回复
  1. 6
    一个过路者   说道:
    其实非HTML,也没必要弄啥rewrite 。作者的全文表达意思也就是个缓存概念而已,并未真正的体现所谓的HTML相关东西。至于HTML的应该是生成后直接交由HTTP SERVER去处理。这只是个取巧的缓存机制罢了

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

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

发表留言