要使用静态缓存功能,需要开启`HTML_CACHE_ON`参数,并且使用`HTML_CACHE_RULES`配置参数设置静态缓存规则文件 。 > 虽然也可以在应用配置文件中定义静态缓存规则,但是建议是在模块配置文件中为不同的模块定义静态缓存规则。 ## 静态规则定义 静态规则的定义方式如下: ~~~ 'HTML_CACHE_ON' => true, // 开启静态缓存 'HTML_CACHE_TIME' => 60, // 全局静态缓存有效期(秒) 'HTML_FILE_SUFFIX' => '.shtml', // 设置静态缓存文件后缀 'HTML_CACHE_RULES' => array( // 定义静态缓存规则 // 定义格式1 数组方式 '静态地址' => array('静态规则', '有效期', '附加规则'), // 定义格式2 字符串方式 '静态地址' => '静态规则', ) ~~~ 定义格式1采用数组方式 便于单独为某个静态规则设置不同的有效期,定义格式2采用字符串方式订阅静态规则,同时采用`HTML_CACHE_TIME`设置的全局静态缓存有效期。 > 静态缓存文件的根目录在`HTML_PATH`定义的路径下面,并且只有定义了静态规则的操作才会进行静态缓存。 并且静态缓存支持不同的存储类型。 静态缓存仅在GET请求下面有效。 ### 静态地址 静态地址包括下面几种定义格式: 第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为: ~~~ 'read'=>array('{id}',60) ~~~ 其中,`{id}` 表示取`$_GET['id']` 为静态缓存文件名,第二个参数表示缓存60秒。 第二种是定义全局的控制器静态规则,例如定义所有的User控制器的静态规则为: ~~~ 'user:'=>array('User/{:action}_{id}','600') ~~~ 其中,`{:action}` 表示当前的操作名称 第三种是定义某个控制器的操作的静态规则,例如,我们需要定义Blog控制器的read操作进行静态缓存 ~~~ 'blog:read'=>array('{id}',0) ~~~ 第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如 ~~~ '*'=>array('{$_SERVER.REQUEST_URI|md5}'), ~~~ 表示根据当前的URL进行缓存。 ### 静态规则 静态规则是用于定义要生成的静态文件的名称,静态规则的定义要确保不会冲突,写法可以包括以下情况: #### 1、使用系统变量 包括 `_GET`、`_REQUEST`、`_SERVER`、`_SESSION`、`_COOKIE` 格式: ~~~ {$_×××|function} ~~~ 例如: ~~~ {$_GET.name} {$_SERVER.REQUEST_URI|md5} ~~~ #### 2、使用框架特定的变量 `{:module}` 、`{:controller}` 和`{:action}` 分别表示当前模块名、控制器名和操作名。 例如: ~~~ {:module}/{:controller}_{: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']);`