0%

PHP 生成静态化HTML

因为Android程序涉及到与服务器通讯,比较简单的一个方法就是直接访问Web服务器,与服务器端脚本(php,asp,jsp等)通讯,所以为了方便记忆,给博客新加了PHP开发这样一个分类。 今天学习PHP生成HTML。开发服务端程序的时候,为了方便,没有生成HTML,但这几天查看服务器日志发现,访问量没多少,CPU占用却比较高,所以今天找了些资料,准备生成静态HTML,每隔一段时间自动更新。 既然需要每隔一段时间自动更新,那肯定实现不了真正的完全静态了,因为要检测间隔时间嘛,这个功能不可能用HTML来实现。 但是即使这样,也节省了不少资源,因为至少在指定的时间内,不用重新读取数据库,只要读取已经生成的文件就可以了(相当于缓存)。 下面来实现: 第一步,伪静态(这一步非必要,仅仅是为了SEO,不需要可跳过) 这一步可以编辑根目录下的http.ini或.htaccess文件,如果没有可以新建,不支持该功能就找主机商吧。具体怎么写Google吧。编辑完http.ini或.htaccess文件还要修改相关文件的链接。 第二步,也是关键的一步,检测检测间隔时间,生成HTML 在文件开头加入以下代码:

ob_start();
$htmlfile='a.html';//这是生成的文件名,自己可以根据传入的ID什么的构造
if (file_exists($htmlfile))
{
 $filetime = filemtime($htmlfile);
 if (($filetime + 864000) > time())  //判断上次生成HTML文件是否超过240小时,若没有才直接输出文件内容
 {
  echo(file_get_contents($htmlfile));
  exit(0);
 }
}

注意第一名ob_start();,这个就是开始缓存,就是这句话以下的内容都会做为缓存,因为我们等下只会把缓存放入HTML文件,并不是整个完整的HTML文件,所以,如果要减小生成的文件体积,只要把这个放在动态内容之前就可以了,并不一定要放文件第一行。 下面是生成HTML的代码,放最低部。同样,为了减少文件体积,也可以放在动态内容结果以后。

<?
define("HTMLMETA","<!-- date("Y-m-d H:i:s")."-->");
$buffer = ob_get_flush();
$fp = fopen($htmlfile, "w");
if ($fp)
{
 fwrite($fp, $buffer.HTMLMETA);
 fclose($fp);
}else{
echo "打开失败";
}
?>

完了看效果,第一次访问,查看源文件,看最后一行,再刷新,再看最后一行,可以发现多出了一行注释,就是生成时间。当你再刷新时,生成时间并没有变,说明并没有重新生成。