您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
9-7 动态语言静态化
发布时间:2020-10-17 11:58:05编辑:雪饮阅读()
Php动态语言静态化其实主要就是smarty模板引擎的主要原理。其核心就是ob_start、ob_get_contents、ob_end_flush这三个为主以及filectime与文件读写函数的相辅相成。
那么ob_start是打开缓冲区、ob_get_contents是获取缓冲区内容、ob_end_flush是关闭缓冲区,而在ob_start与ob_end_flush之间的部分就是缓冲区内容,缓冲区内容就是还没有输出到浏览器之前的内容。
当然也不能说smarty原理是这样,这样只是类似smarty,实际上smarty可能是直接读取模板的,因为缓冲区毕竟最终是会输出到浏览器的。
那么看看一个动态语言静态化的实例:
<?php
$id=$_GET['id'] ? $_GET['id'] : '';
$cache_name=md5(__FILE__).$id.'.html';
$cache_lifetime=3600;
//如果存在缓存文件
if(file_exists($cache_name)){
//如果缓存文件没有过期
if(filectime($cache_name)+$cache_lifetime>time()){
//如果缓存文件所依赖的模板(这里指本文件)没有改动
if(filectime(__FILE__) <= filectime($cache_name)){
include $cache_name;
exit;
}
}
}
ob_start();
?>
<b>cinema电影,电影院;announce宣布,述说 id=<?php echo $id;?></b>
<?php
$content=ob_get_contents();
ob_end_flush();
$handle=fopen($cache_name,'w');
fwrite($handle,$content);
fclose($handle);
?>
关键字词:动态,静态,php,ob_start,ob_get_contents,ob_end_flush