处理查询字符串参数时的Codeigniter缓存问题

时间:2011-05-31 23:30:17

标签: php caching codeigniter

问候,

我正在编写一个CI Web应用程序,它实现了标准文件缓存功能:

$this->output->cache(n);

我正在使用细分和查询字符串参数的组合,结果似乎遇到了问题。我在用例和输出类代码中看到的是缓存仅基于段。因此,http://www.example.com/segment/?q=foohttp://www.example.com/segment/?q=bar被视为相同的请求。

是否有人对如何编辑url_helper,Output类或CI基类有任何见解或建议,以便上面的示例处理 example.com/segment/?q=foo 和< strong> example.com/segment/?q=bar 作为单独的唯一请求,并将响应分别存储在单独的文件中?

4 个答案:

答案 0 :(得分:4)

这可以使用查询字符串修复codeigniter缓存 codeigniter cache with querystring

它是泰语页面,但您可以复制该代码并将其放在application / core / MY_Output.php中:)

答案 1 :(得分:1)

这里有一些代码可以覆盖Codeigniter的Output类,这似乎对我有用。

创建文件application / core / MY_Output.php,复制Output.php中的_write_cache()和_display_cache()函数并更新如下:

class MY_Output extends CI_Output {

    function __construct() {
        parent::__construct();
    }

    function _write_cache($output) {
        ....

        $uri = $CI->config->item('base_url').
               $CI->config->item('index_page').
               $CI->uri->uri_string();

        // append querystring
        $qs = (empty($_SERVER['QUERY_STRING'])) ? '' : '?'.$_SERVER['QUERY_STRING'];
        $uri .= $qs;
        // append querystring  

        ....
    }

    function _display_cache(&$CFG, &$URI)
        ....

        $uri = $CI->config->item('base_url').
               $CI->config->item('index_page').
               $URI->uri_string;

        // append querystring
        $qs = (empty($_SERVER['QUERY_STRING'])) ? '' : '?'.$_SERVER['QUERY_STRING'];
        $uri .= $qs;
        // append querystring

        ....
    }

答案 2 :(得分:1)

进入config / config.php

你应该像这样启用cache_query_string

$config['cache_query_string'] = TRUE;

考虑所有查询参数。 请注意,这可能会导致为同一页面反复生成大量缓存文件。

答案 3 :(得分:-1)

如果_GET的值为空,则应缓存

if(!$_GET)
    $this->output->cache(0);