一个html里面有N条留言,如果把最新的留言放在第一?是否重新生成html?如果有100个html,是否也重新排位这100个html?

解决方案 »

  1.   

    静态页面的留言的话,你可以用AJAX或者IFROME的方法来获得动态数据而不需要重新生成静态页
      

  2.   

    我见到dz论坛全部都是
    thread-1493962-1-1.html
    thread-1493962-2-1.html
    thread-1493962-3-1.html
    这样下去的,他是否用AJAX或者IFROME的方法这个方法的?
      

  3.   

    还有csdn的论坛,好像也是不断更新html页面的,我刚才查看了源码,都是生成出来的,不是通过iframe的
      

  4.   

    你说的论坛是回复信息,因为论坛帖子的主要内容就是主题和回复,所以做静态化的时候有新回复都直接重新生成页面
    而留言一般是一些附加的信息,比如商品详细页面上的留言,这种附加的信息用AJAX或者IFRAME方法比较好
      

  5.   

    多数是伪静态,html后缀不一定就是静态页面
      

  6.   

    PHP生成静态页面详解 
    一,PHP脚本与动态页面。  PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式,以模板的方式对用户请求进行处理。无论以何种方式,它的基本原理是这样的。由客户端提出请求,请求某一页面 -----> WEB服务器引入指定相应脚本进行处理 -----> 脚本被载入服务器 -----> 由服务器指定的PHP解析器对脚本进行解析形成HTML语言形式 ----> 将解析后的HTML语句以包的方式传回给浏览器。由此不难看出,在页面发送到浏览器后,PHP就不存在了,已被转化解析为HTML语句。客户请求为一动态文件,事实上并没有真正的文件存在在那里,是PHP解析而成相对应的页面,然后发送回浏览器。这种页面处理方式被称为“动态页面”。  二,静态页面。  静态页面是指在服务器端确实存在的仅含HTML以及JS,CSS等客户端运行脚本的页面。它的处理方式是。由客户端提出请求,请求某一页面 ----> WEB服务器确认并载入某一页面 ----> WEB服务器将该页面以包的形式传递回浏览器。由这一过程,我们对比一下动态页面,即可方现。动态页面需由WEB服务器的PHP解析器进行解析,而且通常还需连接数据库,进行数据库存取操作,然后才能形成HTML语言信息包;而静态页面,无须解析,无须连接数据库,直接发送,可大大减轻服务器压力,提高服务器负载能力,大幅提供页面打开速度和网站整体打开速度。但其缺点是,不能动态地对请求进行处理,服务器上必须确实存在该文件。  三,模板及模板解析。  模板即尚未填充内容html文件。例如: temp.html  Code: [Copy to clipboard]  
    <HTML>
      <TITLE>{ title }</TITLE>
      <BODY>
         this is a { file } file's templets
      </BODY>
    </HTML>
    PHP处理: templetest.php  Code: [Copy to clipboard]  
    <?php
      $title = "拓迈国际测试模板";
      $file   = "TwoMax Inter test templet,<br>author:Matrix@Two_Max"; $fp          = fopen ("temp.html","r");
      $content  = fread ($fp,filesize ("temp.html"));
      $content .= str_replace ("{ file }",$file,$content);
      $content .= str_replace ("{ title }",$title,$content);  echo $content;
    ?>   模板解析处理,即将经PHP脚本解析处理后得出的结果填充(content)进模板的处理过程。通常借助于模板类。目前较流行的模板解析类有phplib,smarty,fastsmarty等等。模板解析处理的原理通常为替换。也有些程序员习惯将判断,循环等处理放进模板文件中,用解析类处理,典型应用为block概念,简单来说即为一个循环处理。由PHP脚本指定循环次数,如何循环代入等,再由模板解析类具体实施这些操作。    好了,对比过静态页面与动态页面各自的优劣,现在我们就来说说,如何用PHP生成静态文件。
      PHP生成静态页面并不是指PHP的动态解析,输出HTML页面,而是指用PHP创建HTML页面。同时因为HTML的不可写性,我们创建的HTML若有修改,则需删掉重新生成即可。(当然你也可以选择用正则进行修改,但个人认为那样做倒不如删掉重新生成来得快捷,有些得不偿失。)  言归正传。用过PHP文件操作函数的PHP FANS知道,PHP中有一个文件操作函数fopen,即打开文件。若文件不存在,则尝试创建。这即是PHP可以用来创建HTML文件的理论基础。只要用来存放HTML文件的文件夹有写权限(即权限定义0777),即可创建文件。(针对UNIX系统而言,Win系统无须考虑。)仍以上例为例,若我们修改最后一句,并指定在test目录下生成一个名为test.html的静态文件:HP0-538 HP0-757  Code: [Copy to clipboard]  
    <?php
      $title = "拓迈国际测试模板";
      $file   = "TwoMax Inter test templet,<br>author:Matrix@Two_Max"; $fp          = fopen ("temp.html","r");
      $content  = fread ($fp,filesize ("temp.html"));
      $content .= str_replace ("{ file }",$file,$content);
      $content .= str_replace ("{ title }",$title,$content);  // echo $content;
      
      $filename = "test/test.html";
      $handle    = fopen ($filename,"w"); //打开文件指针,创建文件
      /*
     检查文件是否被创建且可写
      */
      if (!is_writable ($filename)){ 
         die ("文件:".$filename."不可写,请检查其属性后重试!");
      }
      if (!fwrite ($handle,$content)){  //将信息写入文件
         die ("生成文件".$filename."失败!");
      } 
      fclose ($handle); //关闭指针
      
      die ("创建文件".$filename."成功!");
    ?>  
      实际应用中常见问题解决方案参考:  一,文章列表问题:
      
      在数据库中创建字段,记录文件名,每生成一个文件,将自动生成的文件名存入数据库,对于推荐文章,只需指向存放静态文件的指定文件夹中的该页面即可。利用PHP操作处理文章列表,存为字符串,生成页面时替换此字符串即可。如,在页面中放置文章列表的表格加入标记{ articletable },而在PHP处理文件中: 000-297 1z0-147
      Code: [Copy to clipboard]  
    <?php
      $title = "拓迈国际测试模板";
      $file   = "TwoMax Inter test templet,<br>author:Matrix@Two_Max"; $fp          = fopen ("temp.html","r");
      $content  = fread ($fp,filesize ("temp.html"));
      $content .= str_replace ("{ file }",$file,$content);
      $content .= str_replace ("{ title }",$title,$content);
      
      //  生成列表开始
      $list = '';
      $sql = "select id,title,filename from article";
      $query = mysql_query ($sql);
      while ($result = mysql_fetch_array ($query)){ 
         $list .= '<a href='.$root.$result['filename'].' target=_blank>'.$result['title'].'</a><br>';
      }
      $content .= str_replace ("{ articletable }",$list,$content);
      
      //生成列表结束
      // echo $content;
      
      $filename = "test/test.html";
      $handle    = fopen ($filename,"w"); //打开文件指针,创建文件
      /*
     检查文件是否被创建且可写
      */
      if (!is_writable ($filename)){ 
         die ("文件:".$filename."不可写,请检查其属性后重试!");
      }
      if (!fwrite ($handle,$content)){  //将信息写入文件
         die ("生成文件".$filename."失败!");
      } 
      fclose ($handle); //关闭指针
      
      die ("创建文件".$filename."成功!");
    ?>   二,分页问题。  如我们指定分页时,每页20篇。某子频道列表内文章经数据库查询为45条,则,首先我们通过查询得到如下参数:1,总页数;2,每页篇数。第二步,for ($i = 0; $i < allpages; $i++),页面元素获取,分析,文章生成,都在此循环中执行。不同的是,die ("创建文件".$filename."成功!";这句去掉,放到循环后的显示,因为该语句将中止程序执行。例:  Code: [Copy to clipboard]  
    <?php
      $fp          = fopen ("temp.html","r");
      $content  = fread ($fp,filesize ("temp.html"));
      $onepage  = '20';
      $sql          = "select id from article where channel='$channelid'";
      $query      = mysql_query ($sql);
      $num        = mysql_num_rows ($query);
      $allpages   = ceil ($num / $onepage);  for ($i = 0;$i<$allpages; $i++){ 
         if ($i == 0){ 
            $indexpath = "index.html";
          } else { 
            $indexpath = "index_".$i."html";
          }
         $start = $i * $onepage;
         $list    = '';
         $sql_for_page = "select name,filename,title from article where channel='$channelid' limit $start,$onepage";
         $query_for_page = mysql_query ($sql_for_page);
         while ($result = $query_for_page){ 
            $list .= '<a href='.$root.$result['filename'].' target=_blank>'.$title.'</a><br>';
          }
         
         $content = str_replace ("{ articletable }",$list,$content);     if (is_file ($indexpath)){ 
            @unlink ($indexpath); //若文件已存在,则删除
          }     $handle    = fopen ($indexpath,"w"); //打开文件指针,创建文件
         /*
        检查文件是否被创建且可写
         */
         if (!is_writable ($indexpath)){ 
            echo "文件:".$indexpath."不可写,请检查其属性后重试!"; //修改为echo
          }
         if (!fwrite ($handle,$content)){  //将信息写入文件
            echo "生成文件".$indexpath."失败!"; //修改为echo
          } 
         fclose ($handle); //关闭指针
      }  fclose ($fp);
      die ("生成分页文件完成,如生成不完全,请检查文件权限系统后重新生成!");?>  
      大致思路如此,其中如其它数据生成,数据输入输出检查,分页内容指向等可酌情在页面中加入。  在实际文章系统处理过程当中,还有许多问题有待考虑,与动态页面不同之处,需注意的地方还有很多。但大致思路即是如此,其它方面可举一反三而得。
      

  7.   

    使用伪静态。文章多了生成html的不方便后期维护
      

  8.   

    关于伪静态和真静态的一点心得  1.关于伪静态的用处  有些用户觉得,伪静态和真静态实际被收录量会相差非常大,其实不然,从你个人角度,你去判断一下一个帖子到底是真静态还是伪静态?  估计非常难看得出,因为所谓静态的意思,就是地址中不带问号,不带问号的就是静态,管他是真的还是伪的?搜索引擎看得出吗?  所以说,其实不论是真的还是伪的,其实对于搜索引擎来说都是相同的,搜索引擎没有说,你这个是伪的,我不收录你.  揪根掘底的来说,为什么搜索引擎会不收录带问号的网址?因为搜索引擎怕由于问号而进入死循环(以前动网就有这样一个漏洞,蜘蛛进去出不来了),所以非常多时候带问号的地址是不会进去的,伪静态对于搜索引擎来说,其实就是静态,因为地址中没有带问号,所以没有真静态比伪静态收录得多的说法.  2.为什么选择伪静态  有非常多用户说:  真静态不好吗?  为什么不用真静态?  访问起来不是更快吗?  负载不是更好吗?  等等等等...  在这里,其实只用一个问题来回答:为什么选择MYSQL.  非常多用户大概不明白为什么那么多大型论坛都选择了MYSQL数据库作为储存机制,大概大部分都是想:"因为DZ用了MYSQL,所以就是MYSQL".  其实不然,试想DZ为什么会在那么多论坛程式并存的日子生存下来并笑傲江湖,非常大原因是因为DZ用了MYSQL.试想如果大C当年改的程式是个文本论坛,那还会有DZ的今天吗?  或从另一个角度问,为什么那么多大型网站都选择了MYSQL而不是文本作为储存机制?  所谓文本论坛,实际就跟真静态的说法差不多了,将数据储存在空间上面,大量读写硬盘,等等...  为什么这种写法会被淘汰呢?  我相信答案不会是老师所说的:  "discuz.net 目前有 2129867 篇帖子,存储成html的话大约是 20799 M,也就是 20G左右。这当中还不计算由于磁盘存储机制造成的空间浪费(100个1k 的文件占用的空间可能会是200K)。"  这种说法从我个人观点来看,这个理由不能给予用户不使用真静态充分的理由.  然而,另一个理由却是值得我们注意思考的,也是为什么绝大多数站都不选择生成静态:  "删除、更新这些html内容会导致大量的磁盘io操作及大量的磁盘碎片."  正如上面这个说法,在实际当中确实会导致大量的磁盘I/O操作(input,output),大量进行I/O操作带来的后果可想而知,会产生大量的磁盘碎片甚至会导致硬盘出现坏道.  所以对于生成静态而言,还不如去用文本论坛,能更好的解决你们的需求.  (副W就是做文本论坛出生的,当时的名字为ofstar http://www.sh012.com ,后因发展困难转为MYSQL,而PW生成静态页面也就是PW以前文本方式稍加改进用于吸引用户眼球的噘头)  当然,如果大家记忆力好的话,应该能记得PW4的时候PW论坛不能访问非常长一段时间,后来恢复到一段时间前的数据,官方的说法是被人攻击而导致硬盘损坏,其实这种说法是比较不可信的,相对于是被攻击导致硬盘损坏还是大量I/O操作而产生的后果,我个人更倾向于后者.  当然,如果大家比较关注5d6d的话,应该知道前几天有一天时间5d6d无法访问,根据非官方消息是因为硬盘坏了,而损坏的原因我想当然是因为大量用户大量进行I/O操作了,试想,我们一个论坛,进行磁盘I/O操作的仅为管理员进行更新缓存时进行的,而5d6d每一个会员就是个管理员,试想下对磁盘是多大的考验?所以我并不奇怪5d6d的硬盘坏了.  当然,也许在读这篇文章的非常多朋友都有使用过BT,也听说过BT对硬盘非常伤,不能开多,而所谓伤害,和这里指的都是同相同东西,大量I/O导致磁盘出现碎片甚至出现磁盘坏道.  这里都是说些非常实际的例子来说明问题了.  3.关于伪静态的坏处  当然犹如一篇文章的作者所说的  "如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线300多人就挂了,而不使用伪静态的时候同时在线超500人都不挂,我的ISS数是1000"  确实是这样的,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病.  4.我们该怎么做  我们来总结一下.  1.使用真静态和假静态对SEO来说没有什么差别  2.使用真静态可能将导致硬盘损坏并将影响论坛性能  3.使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷  4.最重要的一点,我们要静态是为了SEO  所以.  1.使用真静态的方法能直接排除了,因为无论怎么生成,对硬盘来说都是非常伤的.  2.既然真伪静态的效果相同,我们就能选择伪静态了.  3.不过伪静态大量使用会照成CPU超负荷.  4.所以我们只要不大量使用就能了.  5.既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不必给用户使用.  6.所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就能了.  7.谢谢大家耐心看我写的文章.  8.有何不解的地方或是有不同的看法欢迎提出.