2011-05-31 42 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; 

採取所有查詢參數考慮進去。 請注意,這可能會導致爲同一頁面重複生成大量緩存文件。