我曾经为一小群在线死亡竞赛玩家运行了一个自制的论坛系统。这些论坛早已关闭,目前处于脱机状态。我想要做的是创建包含整个系统的所有数据的静态HTML文件,以便拥有以前用户可以搜索的在线存档。
我可以控制所有原始数据。这将包括:
基本上,我想把数据库排除在等式之外,这样我就不必浪费资源来保持它的存活。 (还因为这是一个自制的论坛解决方案,我确信它不是很优化)
这是一个可行的目标,还是我应该保持论坛的方式,而不是担心开销?
如果可能(并且远程可行),我可以获得一些关于如何进行的建议吗?
答案 0 :(得分:4)
wget可以创建网站的HTML镜像。查看文档以了解--mirror。
的用法答案 1 :(得分:1)
使用输出缓冲捕获所有输出并将其写入文件而不是浏览器。
编辑你的代码,使其在顶部(在任何HTML输出到浏览器之前),你有这一行:
ob_start();
在脚本的末尾添加:
$output = ob_get_clean();
file_put_contents("<<name of this page>>.html", $output);
你必须提出一些命名方案,这样你就不会重复了。
然后,使用正则表达式,使用apache RewriteRules将所有请求重定向到新的HTML页面,这样您的链接就不会中断。
要获取所有页面,只要你没有很多页面,你可以逐个点击它们,你可以手动将所有的URL写入一个数组,然后循环遍历它们,或者你甚至可以抓取它们自己站点,查找页面上的所有URL并在出发时将它们添加到队列中。
答案 2 :(得分: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 ');
}
}