用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7919|回复: 5
收起左侧

[讨论/交流] $config['uri_protocol'] = "PATH_INFO"模式的缓存问题

[复制链接]
发表于 2010-11-5 10:28:51 | 显示全部楼层 |阅读模式
本帖最后由 cscs__2002 于 2010-11-8 21:12 编辑

已参考[让 CodeIgniter 支持 $_GET]
http://codeigniter.org.cn/forums/thread-692-1-1.html做了如下设置:
1) 在config.php 中,将‘uri_protocol’ 设置为 ‘PATH_INFO’.
PHP复制代码
$config['uri_protocol'] = "PATH_INFO";
复制代码

2) 在控制部分需要使用$_GET的之前加:
PHP复制代码
parse_str($_SERVER['QUERY_STRING'], $_GET);
复制代码

最后的uri如下:
http://10.20.2.142/index.php/class/method?page=1
http://10.20.2.142/index.php/class/method?page=2
http://10.20.2.142/index.php/class/method?page=3

开启缓存后:
$this->output->cache(5);
然后三个地址生成的缓存文件名一样。

无论先缓存哪个页面,之后访问其他分页,将访问最先缓存的那个页面
比如首先访问http://10.20.2.142/index.php/class/method?page=2,生成该页面缓存,
访问http://10.20.2.142/index.php/class/method?page=1,
访问http://10.20.2.142/index.php/class/method?page=3
网页内容均为http://10.20.2.142/index.php/class/method?page=2的内容

不知道还需要哪里做设置,另外也参考了[有关CI页面缓存问题的终极解决方案]
http://codeigniter.org.cn/forums/viewthread.php?tid=3216
发表于 2010-11-8 08:37:17 | 显示全部楼层
只要问号之前的链接一样,缓存都算一个文件,CI无视问号之后的内容
 楼主| 发表于 2010-11-8 21:27:37 | 显示全部楼层
本帖最后由 cscs__2002 于 2010-11-8 21:46 编辑

以为我懒,结果visvoy兄比我更懒。
思路有了,懒得自己动手,看来还是要靠自己啊

ci在$config['uri_protocol'] = "AUTO"模式下静态化的过程不过是将
index.php/class/method/id/...这段的参数编码为静态文件名xxxx,生成文件,路由的时候同样根据参数,找得到静态文件就找,找不到就老老实实解析一次而已;

$config['uri_protocol'] = "PATH_INFO"模式的好处是传参数方便,get,利索!
思路跟上面一样,只是ci在文件名编码的时候把index.php/class/method?id=1&a=&b=...中“?”后面的参数丢掉了,路由的时候同理,那么要解决该问题要做的事情就两点:
1、生成静态文件名的时候带上"?"后面的参数
2、路由的时候带上"?"后面的参数

情况就这么个情况,我先写着,那位仁兄先搞定了招呼一声,我出活慢。
发表于 2010-11-8 21:52:26 | 显示全部楼层
本帖最后由 jeongee 于 2010-11-8 21:53 编辑

page可以不放到GET后面,把分页条件放后面就可以了实在不行,就使用serialize整个放到一段里去呗,省的去改源代码了
 楼主| 发表于 2010-11-9 20:54:23 | 显示全部楼层
回复 4# jeongee


    不错不错,把$_get序列化作为一个参数,好办法。
发表于 2010-11-10 09:18:09 | 显示全部楼层
以为我懒,结果visvoy兄比我更懒。
思路有了,懒得自己动手,看来还是要靠自己啊

ci在$config['uri_protoc ...
cscs__2002 发表于 2010-11-8 21:27
懒你个头,终极解决方案里的代码是copy我的,去年我就发过一个ci全静态插件

本版积分规则