ThinkPHP3.2 的页面静态化功能的实现

ThinkPHP3.2 的页面静态化功能的实现,第1张

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

define('HTML_PATH','./HTML/')//生成静态页面的文件位置  (nginx服务器报错时注释此行,默认地址为runtime目录平层的Html)

(2)在项目的配置文件config.php中进行如下配置:

'HTML_CACHE_ON'=>true,// 开启静态缓存

'HTML_CACHE_TIME'=>604800,// 全局静态缓存有效期(秒)(3600*24*7)

'HTML_FILE_SUFFIX'=>'.shtml',// 设置静态缓存文件后缀

'HTML_CACHE_RULES'=>array(// 定义静态缓存规则

// 定义格式1 数组方式

// 定义格式2 字符串方式

//后一个参数是静态缓存有效期,单位为秒。如果不定义,则会获取配置参数HTML_CACHE_TIME 的设置值,如果定义为0则表示永久缓存。

//{id} 表示取$_GET['id']

'CondVoucher:conGuid'=>array('{:controller}_{:action}/conGuid'),

(3)访问url生成缓存到html目录下查看缓存文件

参照手册: http://document.thinkphp.cn/manual_3_2.html#html_cache

ThinkPHP内置了静态缓存的功能,并且支持静态缓存的规则定义。

要使用静态缓存功能,需要开启HTML_CACHE_ON 参数,并且使用HTML_CACHE_RULES配置参数设置静态缓存规则文件 。

静态规则的定义方式如下:

'HTML_CACHE_ON'=>true,

'HTML_CACHE_RULES'=>array(

'ActionName'=>array('静态规则', '静态缓存有效期', '附加规则'),

'ModuleName(小写)'=>array('静态规则', '静态缓存有效期', '附加规则'),

'ModuleName(小写):ActionName' =>array('静态规则', '静态缓存有效期', '附加规则'),

'*' =>array('静态规则', '静态缓存有效期', '附加规则'),

//…更多 *** 作的静态规则

)

静态缓存文件的根目录在HTML_PATH 定义的路径下面,并且只有定义了静态规则的 *** 作才会进行静态缓存,注意,静态规则的定义有三种方式:

第一种是定义全局的 *** 作静态规则,例如定义所有的read *** 作的静态规则为

'read'=>array('{id}','60')

其中,{id} 表示取$_GET['id'] 为静态缓存文件名,第二个参数表示缓存60秒

第二种是定义全局的模块静态规则,例如定义所有的User模块的静态规则为

'user:'=>array('User/{:action}_{id}','600')

其中,{:action} 表示当前的 *** 作名称 静态

第三种是定义某个模块的 *** 作的静态规则,例如,我们需要定义Blog模块的read *** 作进行静态缓存

'blog:read'=>array('{id}',0)

有个别特殊的规则,例如空模块和空 *** 作的静态规则的定义,可以使用下面的方式:

'empty:index'=>array('{:module}_{:action}',0) // 定义空模块的静态规则

'User:_empty'=>array('User/{:action}',0) // 定义空 *** 作的静态规则

第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的 *** 作都适用,例如

'*'=>array('{$_SERVER.REQUEST_URI|md5}'),

根据当前的URL进行缓存

静态规则是用于定义要生成的静态文件的名称,写法可以包括以下情况

1、使用系统变量 包括 _GET _REQUEST _SERVER _SESSION _COOKIE

格式:

{$_×××|function}

例如:

{$_GET.name} {$_SERVER. REQUEST_URI|md5}

2、使用框架特定的变量

例如:{:app}、{:group} 、{:module} 和{:action} 分别表示当前项目名、分组名、模块名和 *** 作名

3、使用_GET变量

{var|function}

也就是说 {id} 其实等效于 {$_GET.id}

4、直接使用函数

{|function}

例如:{|time}

5、支持混合定义,例如我们可以定义一个静态规则为:

'{id},{name|md5}'

在{}之外的字符作为字符串对待,如果包含有”/”,会自动创建目录。

例如,定义下面的静态规则:

{:module}/{:action}_{id}

则会在静态目录下面创建模块名称的子目录,然后写入 *** 作名_id.shtml 文件。

静态有效时间 单位为秒如果不定义,则会获取配置参数HTML_CACHE_TIME 的设置值,如果定义为0则表示永久缓存。

附加规则通常用于对静态规则进行函数运算,例如

'read'=>array('Think{id},{name}','60', 'md5')

翻译后的静态规则是 md5('Think'.$_GET['id']. ', '.$_GET['name'])

和静态缓存相关的配置参数包括:

HTML_CACHE_ON 是否开启静态缓存功能

HTML_FILE_SUFFIX 静态文件后缀 惯例配置的值是 .html

HTML_CACHE_TIME 默认的静态缓存有效期 默认60秒 可以在静态规则定义覆盖

1)首先查看ThinkPHP核心文件core.php,发现引入的各种类php中,有一名为:View.class.php,视图类。顾名思义此类应与模板输出、缓存及相关 *** 作有关。

2)

打开View.class.php,用eclipse的outline视图查看该类的结构,发现一方法名为:buildHtml(),创建静态页面。此方

法有一行代码为:$htmlpath = !empty($htmlpath)?$htmlpath:HTML_PATH

这行代码很

显然是定义静态页面的路径的,其中可以看到前面说到的HTML_PATH。使用eclipse的查看变量源位置(按住ctrl,鼠标左键点击变量),可以

看到有2个供追踪的变量源位置,paths.php和~runtime.php,后者是非核心临时文件,舍弃之。

3)打开

paths.php,可以找到HTML_PATH的这一行代码:define('HTML_PATH',APP_PATH.'/'.HTML_DIR.'

/'),看此处可知,HTML_PATH的结果与系统变量HTML_PATH无关,而是由另外两个系统变量拼凑而成。

其中

APP_PATH为项目所在路径,HTML_DIR追踪之,可在同一文件内找到代码:define('HTML_DIR',

'Html')而这个Html文件夹正是我怎么改都改不掉的缓存存放路径,于是改之,删Runtime(因为前面可以看到该临时文件夹有存放

HTML_PATH变量),刷新,成功解决


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/7941031.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存