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

Php 处理查询字符串参数时的Codeigniter缓存问题,php,caching,codeigniter,Php,Caching,Codeigniter,您好 我正在编写一个CI web应用程序,它实现标准文件缓存功能,例如: $this->output->cache(n); 我使用的是段和查询字符串参数的组合,结果似乎遇到了问题。我在用例和输出类代码中看到的是缓存完全基于段。因此,和被视为相同的请求 是否有人对如何编辑url\u帮助程序、输出类或CI基类有任何见解或建议,以便上述示例将example.com/segment/?q=foo和example.com/segment/?q=bar视为单独的,唯一请求并将响应分别存储在单独

您好

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

$this->output->cache(n);
我使用的是段和查询字符串参数的组合,结果似乎遇到了问题。我在用例和输出类代码中看到的是缓存完全基于段。因此,和被视为相同的请求


是否有人对如何编辑url\u帮助程序、输出类或CI基类有任何见解或建议,以便上述示例将example.com/segment/?q=fooexample.com/segment/?q=bar视为单独的,唯一请求并将响应分别存储在单独的文件中?

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

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

这可以用querystring修复codeigniter缓存


这是泰语页面,但您只需复制该代码并将其放入application/core/MY_Output.php:)

这里有一些代码覆盖Codeigniter的输出类,它似乎对我有用

创建文件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

        ....
    }
进入config/config.php

您应该像这样启用cache\u query\u字符串

$config['cache_query_string'] = TRUE;
考虑所有查询参数。
请注意,这可能会导致多次为同一页面生成大量缓存文件。

Chumillas,这并不能回答问题。如果我错误地传达了这个问题,我道歉。我想让查询字符串作为缓存的相关信息。这并不像它所暗示的那样有效。缓存后(在本例中,如果加载的页面没有查询字符串),所有控制器逻辑都将被绕过,因此无论这行代码如何,都将显示缓存的页面。此外,这只是禁用缓存,而缓存不是解决方案