2011-05-31 46 views
4

问候,与查询字符串打交道时笨缓存问题参数

我写它实现标准的文件缓存的功能这样的CI Web应用程序:

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

我使用的组合段和查询字符串参数,并且看起来像是遇到了问题。我在使用情况和Output类代码中看到的是,缓存完全是基于段的。因此,http://www.example.com/segment/?q=foohttp://www.example.com/segment/?q=bar被视为相同的请求。

没有人有关于如何url_helper,输出类,或CI基类可以被编辑,使得上面的例子中对待example.com/segment/?q=fooexample.com/任何见解或建议segment /?q = bar作为单独的,唯一的请求并将响应分别存储在单独的文件中?

+0

可能重复[Codeigniter页面缓存与GET参数](http://stackoverflow.com/questions/14516670/codeigniter-page-cache-with-get-parameter) – Seb33300 2017-01-28 17:41:06

回答

-1

您应该缓存如果_GET的值是空

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

Chumillas,这不回答这个问题。如果我误解了这个问题,我很抱歉。 我希望查询字符串充当与缓存相关的信息。 – wannabenerd 2011-06-01 13:04:10

+0

这不起作用,因为它暗示。一旦被缓存(在这种情况下,如果页面没有查询字符串被加载),所有的控制器逻辑被绕过,因此无论这行代码如何,缓存页面都将被显示。此外,这只是禁用缓存,这不是解决方案。 – Thor 2011-12-23 05:11:47

1

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

从Output.php创建文件的应用程序/核心/ MY_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 

     .... 
    } 
+0

谢谢!帮助我很多! – Roy 2013-03-21 15:54:55

1

进入配置/ config.php文件

您应该启用cache_query_string这样

$config['cache_query_string'] = TRUE; 

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