🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 什么是动态语言静态化 将现有PHP等动态语言的逻辑代码生成为静态HTML文件,用户访问动态脚本重定向到静态HTML文件的过程。 对实时性要求不高的页面 ## 为什么要静态化 动态脚本通常会做逻辑计算和数据查询,访问量越大,服务器压力越大 访问量大时可能会造成CPU负载过高,数据库服务器压力过大 ## 静态化的实现方式 ### 使用模板引擎 可以使用 Smarty的缓存机制生成静态HTML缓存文件 ``` $smarty-> cache dir=$RooT."/ cache";/缓存目录 $smarty-> caching=true;//是否开启缓存 $smarty-> cache_lifetime="3600";/缓存时间 $smarty-> display(string template, string cache_id[, string compile_id]]): $smarty-> clear_all_cache();//清除所有缓存 $smarty-> clear_cache(" file.html");/清除指定的缓存 $smarty-> clear_cache( 'article.htm',$art_id);//清除同一个模板下的指定缓存号的缓存 ``` ### 利用ob系列的函数 ``` ob_start():打开输出控制缓冲 ob_get_contents0:返回输出缓冲区内容 ob_clean():清空输出缓冲区 ob_end_flush0:冲刷出(送出)输出缓冲区内容并关闭缓冲 ``` ``` ob_start(): //输出到页面的HTML代码 ... ob_get_contents(); ob end flush(); fopen(); //写入 ``` 实现页面静态化,并且当内容改变时,主动缓存新内容,且如果有$_ GET参数时候,带参数的静态化页面 ``` <?php $id = $_GET['id']; if (empty($id)) { $id = ''; } $cache_name = md5(__FILE__) . '-' . $id . '.html'; $cache_lifetime = 3600; if (@filectime(__FILE__) <= @filectime($cache_name) && file_exists($cache_name) && $cache_lifetime+@filectime($cache_name) > time()) { include $cache_name; exit; } ob_start(); ?> <b>This is My script <?php echo $id; ?></b> <?php $content = ob_get_contents(); ob_end_flush(); file_put_contents($cache_name, $content); ?> ```