首先,设定过期时间,如果要求缓存文件2个小时过期,就可以设定cache_time为3600*2;通过filectime()来获取缓存文件的创建时间(或 filemtime()获取修改时间),如果当前时间跟文件的创建时间超过限定的过期时间,就可以通过上面三个函数,首先从数据库中取出数据,然后开始缓存ob_start(),然后把要生成的页面的html代码写在缓存中,缓存结束后通过ob_get_contents()获取到缓存的内容,然后通过fwrite把缓存内容写到静态页面html。
如果未过期,直接读取cache中的静态页面即可,避免了大量的数据库访问。
<?php $_time =10; $dir="D:\\php\\"; function cache_start($_time, $dir) { $cachefile = $dir.'https://www.jb51.net/'.sha1($_SERVER['REQUEST_URI']).'.html'; $cachetime = $_time; ob_start(); if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime)) { include($cachefile); ob_end_flush(); exit; } } function cache_end($dir) { $cachefile = $dir.'https://www.jb51.net/'.sha1($_SERVER['REQUEST_URI']).'.html'; $fp = fopen($cachefile, 'w'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_flush(); } cache_start($_time, $dir); //以下是输出的内容,放在cache_start和cache_end两个方法之间 for ($i=0;$i<5;$i++) { echo $i; sleep(1); } cache_end($dir); ?>