【问题标题】:Permanently Cache Dynamic PHP/MySQL Forums as Static Pages将动态 PHP/MySQL 论坛永久缓存为静态页面
【发布时间】:2009-03-30 01:30:55
【问题描述】:

我曾经为一小群在线死亡竞赛玩家运行了一个自制的论坛系统。这些论坛早已被关闭,目前处于离线状态。我想做的是创建静态 HTML 文件,其中包含整个系统的所有数据,以便拥有以前用户可以搜索的在线存档。

我可以控制所有原始数据。这将包括:

  • 图片
  • 个人资料
  • 论坛主题
  • 数据库
  • PHP 脚本

基本上,我想将数据库排除在外,这样我就不必浪费资源来维持它的生命。 (也因为这是一个自制的论坛解决方案,我敢肯定它不是很优化)

这是一个可行的目标,还是我应该让论坛保持原样,而不用担心开销?

如果可能(并且远程可行),我能否获得一些关于如何进行的建议?

【问题讨论】:

    标签: php mysql database forum archiving


    【解决方案1】:

    wget 可以创建网站的 HTML 镜像。查看文档以了解 --mirror 的用法。

    【讨论】:

    • 这似乎是我正在寻找的答案。 'wget -Em url' 成功了!非常感谢。
    【解决方案2】:

    使用输出缓冲来捕获所有输出并将其写入文件而不是输出到浏览器。

    编辑您的代码,以便在顶部(在任何 HTML 输出到浏览器之前),您有以下行:

    ob_start();
    

    在脚本末尾添加:

    $output = ob_get_clean();
    file_put_contents("<<name of this page>>.html", $output);
    

    你必须想出一些命名方案,这样你就不会得到重复。

    然后,使用正则表达式,使用 apache RewriteRules 将所有请求重定向到新的 HTML 页面,这样您的链接就不会中断。

    要获取所有页面,如果您没有很多页面,您可以一个一个地点击它们,您可以手动将所有 URL 写入一个数组,然后遍历它们,或者您甚至可以抓取自己站点,查找页面上的所有 URL 并随时将它们添加到队列中。

    【讨论】:

      【解决方案3】:

      ceejayoz 所说的或者,您可以在应用程序的引导程序中添加一个缓存标头,一个您认为需要多少年的缓存。

      您调用附加的函数,其中包含要在客户端缓存页面的小时数,如果有,请务必在 session_start 之后调用此函数,因为 session_start 会发出阻止缓存的标头。

      function client_side_cache($hours)
      
      {
              //in the event a session start is used, I have to clean all the #$%# headers it sends to prevent caching
              header('Cache-Control: ',true);
              header("Pragma: ", true);
              header("Expires: ", true);
      
              //get the If-Modified-Since header in a unix time format
              $headers = getallheaders();
              if (isset($headers['If-Modified-Since']))
              {
                  $modifiedSince = explode(';', $headers['If-Modified-Since']);
                  $modifiedSince = strtotime($modifiedSince[0]);
              }
              else
              {
                  $modifiedSince = 0;
              }
      
              //calculate the Last-Modified timestamp
              $current_time=time();
              $last_modified=($current_time)/($hours*3600);
              $last_modified=(int)$last_modified;
              $last_modified=$last_modified*$hours*3600;
      
          //check cache not expires
              if ($last_modified <= $modifiedSince)
              {
                  header('HTTP/1.1 304 Not Modified');
                  exit();
              }
      
              else //emit a new Last-Modified (either cache expired or page wasn'r cached
              {
                  Header('Last-Modified: '.gmdate("D, d M Y H:i:s",$last_modified).' GMT ');
              }
      
      }
      

      【讨论】:

      • 在 Stackoverflow 上发布之前,请从源代码中删除不需要的多余空格。
      • 2000 指日可待 ;-)
      猜你喜欢
      • 2016-03-30
      • 2022-01-05
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多