cos-html-cache失效问题解决
发表于:2008-09-13 | 4 个回复

  wp-magazinetheme-chinese杂志型主题,显示内容丰富、时尚、美观。cos-html-cache全站静态化插件,将你的网站页面全部转为html静态文件,使网页载入速度得到提升的同时方便搜索引擎更好的收录。一个主题,一个插件,看似不大噶的东西合在一起却出了问题。

  使用wp-magazinetheme-chinese后,cos-html-cache失效。联系了cos-html-cache的作者江东,它也提出了一些建议,不过结果仍然一样。后来他发给我一段用来调试php的代码,就是利用这段代码,终于找到的问题的所在。代码如下:

  1. function debug($str){ 
  2.     $fp = fopen(ABSPATH."/debug.txt","w"); 
  3.     fputs($fp,$str); 
  4.     fclose($fp); 

  这段代码会将$str输出到网站根目录的debug.txt文件中(还是静态语言的调试器好啊!)。仔细读了一下cos-html-cache.php的代码,了解到对页面是否进行静态化是根据一个特定的html注释决定的。

  1. function cos_cache_ob_callback($buffer){ 
  2.     if( !substr_count($buffer‘<!–cos-html-cache-safe-tag–>’) ) { 
  3.         return  $buffer
  4.     } elseif( SCRIPT_URI == CosSiteHome) {// creat homepage 
  5. …… 

  if( !substr_count($buffer, ‘<!–cos-html-cache-safe-tag–>’) )判断$buffer(当前页面代码)中是否包含<!–cos-html-cache-safe-tag–>,如果不包含就直接退出静态化操作。

  1. function CosSafeTag(){ 
  2.     debug("–a"); 
  3.     if(is_single() || is_home()) { 
  4.         debug("–b"); 
  5.         echo "<!–cos-html-cache-safe-tag–>"
  6.     } 
  7. add_action(‘get_footer’, ‘CosSafeTag’);

  CosSafeTag方法判断当前页为首页或文章页时,向客户端输出<!–cos-html-cache-safe-tag–>字符串(原来如此),add_action方法将get_footer和CosSafeTag绑定,当系统调用get_footer方法时(加载footer.php),CosSafeTag不能也被调用。我在其中加了两句输出语句,若debug.txt输出了“–a”,则表示CosSafeTag方法已经被调用。若输出了“–b”则表示is_single和is_home返回true。最终测试结果debug.txt文件中仅输出了“–a”,也就是说is_single和is_home返回了false。

  为了进一步确定是否为is_single的问题,在footer.php中加入了如下代码,当前页为文章页时输出“******”。

  1. <?php if (is_single()) { ?> 
  2.     ****** 
  3. <?php } ?> 

  进入文章页,“******”没有被输出。这个问题暂时先搁一搁,cos-html-cache失效的问题已经弄清楚了,原因就是页面中没有<!–cos-html-cache-safe-tag–>导致退出静态化页面操作。解决也当然很简单,直接在single.php和index.php文件的最后加入<!–cos-html-cache-safe-tag–>即可。

  这的确是很奇怪的问题,主题中还有很多地方用到了is_home和is_single方法,也都正常。甚至在正常的is_home文件中自己加个is_home,结果仍然返回false。不知你有没有遇到这种情况呢?

评论留言

  1. 我也在用这个插件,出现一个情况不知道是不是你说的这个。因为网上有人说这个插件会让从侧边栏的什么什么失效…= =!忘记了。
    —————
    问题描述:
    比如我一篇文章的地址是:http://www.icefifi.com/xhtml/finally-opened-wp-blog.html
    姑且这篇文章叫《开通博客》。

    然后博客右边栏会有“最新评论”这个小工具,访客“xxx”阅读《开通博客》这篇文章并且留言评论后,“最新评论”会显示出最新的动态:“xxx 在《开通博客》的最新评论”

    再然后,点击:“苍井空 在《开通博客》的最新评论”这个链接,会打开页面并且显示到 该文章的 该访客的 评论位置。(这个最新评论是不是动态生成的??)
    页面地址也会变成:http://www.icefifi.com/xhtml/finally-opened-wp-blog.html/comment-page-1#comment-23

    “comment-page-1#comment-23”应该是该文章的描点位置吧。

    —-问题就出在于:
    这个评论地址往往不可用,谷歌浏览器打开是显示:
    【Not Found
    The requested URL /xhtml/finally-opened-wp-blog.html/comment-page-1 was not found on this server.】

    ie6的是
    【找不到网页
    您要查看的网页可能已被删除、名称已被更改,或者暂时不可用。

    —我在博客后台,用这个插件删除文章缓存之后,这些评论链接才可用,但是过不了多长时间,评论链接又不能用了。

    很是郁闷啊~~~今天无意间看到了你的文章,希望能得到帮助解答!不胜感激!

  2. 你的最新评论用的插件还是wordpress自带的?

  3. 兄台你的回复留言没有设置邮件提醒吗?

    最新评论用的是主题自带“小工具”

  4. WordPress在提交某一页面时会对url进行分析,使用cos-html-cache后,会中断这个分析过程而直接打开生成的html文件,所以会出现这种问题。