2

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

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

  • 图片
  • 简介
  • 论坛主题
  • 数据库
  • PHP 脚本

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

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

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

4

3 回答 3

4

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

于 2009-03-30T01:53:47.267 回答
1

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

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

ob_start();

在脚本的末尾,添加以下内容:

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

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

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

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

于 2009-03-30T02:05:52.450 回答
0

什么 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 ');
        }

}
于 2009-03-30T02:00:48.793 回答