ThinkPHP 的页面静态化功能的实现_thinkphp 静态化-CSDN博客

来源: ThinkPHP 的页面静态化功能的实现_thinkphp 静态化-CSDN博客

**
常说的页面静态化分为两种,一种是伪静态,即url 重写,一种是真静态化。

上一篇讲到了ThinkPHP自带的buildHtml()方法生成静态页面,在ThinkPHP的官方文档也没具体讲到此方法,而文档却很具体的讲了静态缓存技术,看来TP官方还是建议使用静态缓存。

一. 网站不分手机版和电脑版,只有一套前台模板

(1)在根目录下的程序入口文件index.php中加下面这行:

define(‘HTML_PATH’, ‘./HTML/’);//生成静态页面的文件位置

(2)在项目的配置文件config.php中进行如下配置:
‘HTML_CACHE_ON’ => true, // 开启静态缓存
‘HTML_CACHE_TIME’ => 604800, // 全局静态缓存有效期(秒)(3600247)
‘HTML_FILE_SUFFIX’=> ‘.html’, // 设置静态缓存文件后缀
‘HTML_CACHE_RULES’=> array( // 定义静态缓存规则
// 定义格式1 数组方式
// 定义格式2 字符串方式
//后一个参数是静态缓存有效期,单位为秒。如果不定义,则会获取配置参数HTML_CACHE_TIME 的设置值,如果定义为0则表示永久缓存。
‘Index:index’ =>array(’{:controller}{:action}’),
‘Index:articalList’ =>array(’{:controller}
{:action}/{id}{p}list’),
‘Index:articalInfo’ =>array(’{:controller}{:action}/{id}’),
‘Index:productList’ =>array(’{:controller}
{:action}/{id}{p}list’),
‘Index:productInfo’ =>array(’{:controller}{:action}/{id}’),
//‘Index:staticcachec’ =>array(’{:module}/{:controller}/{:action}/{id}’,30),
//‘Index:staticcachec’ =>array(’{:module}/{:controller}/{:action}
{id}’,30),
)
{:module} 、{:controller} 和{:action} 分别表示当前模块名、控制器名和操作名,{id} 其实等效于 {$_GET.id},{p}则表示分页。在{}之外的字符作为字符串对待,如果包含有”/”,会自动创建目录。
在前台第一次访问某个模块的某个控制器的某个方法时,就会在指定的目录按照指定的文件名格式生成静态HTML文件。如图:

此时访问网站虽然URL没有变,但访问到的就是静态化之后的页面。亲测有效,但是此法也有不足:

如果系统分电脑版和手机版两套模板,那么生成的静态页面只有一套,手机先访问就生成手机的模板,再用电脑访问的界面就会混乱。

但如若网站只有一套模板(比如电脑版)那么到此就够了。如果手机电脑两套模板,解决方法如下

二. 网站分手机版和电脑版两套模板

(1)在根目录下的程序入口文件index.php中进行如下配置:

define(‘HTML_PATH’, ‘./HTML/’);//生成静态页面的文件位置

//如果是手机访问,设置手机缓存目录
if(isMobile()){
KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 37: …] = ‘mobile/’; }̲elseif(isset(_SESSION[‘theme_path’])){
unset($_SESSION[‘theme_path’]);
}

//判断是否是手机访问
function isMobile(){
if(isset(KaTeX parse error: Double subscript at position 16: _SERVER[‘HTTP_X_̲WAP_PROFILE’]))…_SERVER[‘HTTP_VIA’]))return stristr(S E R V E R [ ′ H T T P V I A ′ ] , " w a p " ) ? t r u e : f a l s e ; i f ( i s s e t ( _SERVER['HTTP_VIA'], "wap") ? true : false; if(isset(SERVER[HTTPVIA],wap)?true:false;if(isset(_SERVER[‘HTTP_USER_AGENT’])){$clientkeywords = array (‘nokia’,‘sony’,‘ericsson’,‘mot’,‘samsung’,‘htc’,‘sgh’,‘lg’,‘sharp’,‘sie-’,‘philips’,‘panasonic’,‘alcatel’,‘lenovo’,‘iphone’,‘ipod’,‘blackberry’,‘meizu’,‘Android’,‘netfront’,‘symbian’,‘ucweb’,‘windowsce’,‘palm’,‘operamini’,‘operamobi’,‘openwave’,‘nexusone’,‘cldc’,‘midp’,‘wap’,‘mobile’);if (preg_match(“/(” . implode(’|’, c l i e n t k e y w o r d s ) . " ) / i " , s t r t o l o w e r ( clientkeywords) . ")/i", strtolower(clientkeywords).)/i,strtolower(_SERVER[‘HTTP_USER_AGENT’])))return true;}
if(isset(KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …])){if((strpos(_SERVER[‘HTTP_ACCEPT’], ‘vnd.wap.wml’) !== false) && (strpos(S E R V E R [ ′ H T T P A C C E P T ′ ] , ′ t e x t / h t m l ′ ) = = = f a l s e ∣ ∣ ( s t r p o s ( _SERVER[&#x27;HTTP_ACCEPT&#x27;], &#x27;text/html&#x27;) === false || (strpos(SERVER[HTTPACCEPT],text/html)===false(strpos(_SERVER[‘HTTP_ACCEPT’], ‘vnd.wap.wml’) < strpos($_SERVER[‘HTTP_ACCEPT’], ‘text/html’))))return true;}
return false;
}

(2)在项目的配置文件config.php中进行如下配置:
//设置静态缓存
‘HTML_CACHE_ON’ => true, // 开启静态缓存
‘HTML_CACHE_TIME’ => 604800, // 全局静态缓存有效期(秒)(3600247)
‘HTML_FILE_SUFFIX’=> ‘.html’, // 设置静态缓存文件后缀
‘HTML_CACHE_RULES’=> array( // 定义静态缓存规则
// 定义格式2 字符串方式
‘Index:index’ =>array(’{KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 20: …SION.theme_path}̲/{:controller}_…SESSION.theme_path}/{:controller}{:action}/{id}_{p}list’),
‘Index:articalInfo’ =>array(’{KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 20: …SION.theme_path}̲/{:controller}_…SESSION.theme_path}/{:controller}{:action}/{id}
{p}_list’),
//‘Index:productInfo’ =>array(’{$SESSION.theme_path}/{:controller}{:action}/{id}’),
)

那么手机访问的时候,会先以缓存的方式生成一个名字为theme_path内容为mobile/的字符串缓存,然后在HTML/mobile/目录下生成相应的手机模板静态文件;如果再用电脑访问,那么会先清除名字为theme_path的字符串缓存内容,那么再生成静态文件的时候就在HTML/目录下了。

作者:江南极客
来源:CSDN
原文:https://blog.csdn.net/sinat_35861727/article/details/54971805
版权声明:本文为博主原创文章,转载请附上博文链接!**

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏