如何解决处理查询字符串参数时的Codeigniter缓存问题
| 问候, 我正在编写一个CI Web应用程序,该应用程序实现了标准的文件缓存功能,例如:$this->output->cache(n);
我正在使用细分和查询字符串参数的组合,因此似乎遇到了问题。我在用例和Output类代码中看到的是,缓存完全基于段。这样,http://www.example.com/segment/?q = foo和http://www.example.com/segment/?q=bar被视为相同的请求。
是否有人对如何编辑url_helper,Output类或CI基类有任何见解或建议,以便上述示例将example.com/segment/?q=foo和example.com/segment/?q=bar视为单独的唯一请求,并将响应分别存储在单独的文件中?
解决方法
这可以使用querystring修复codeigniter缓存
带查询字符串的codeigniter缓存
这是泰语页面,但是您可以复制该代码并将其放在application / core / MY_Output.php中:)
, 这是重写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
....
}
, 进入config / config.php
您应该像这样启用cache_query_string
$config[\'cache_query_string\'] = TRUE;
考虑所有查询参数。
请注意,这可能会导致一遍又一遍地为同一页面生成大量缓存文件。
, 如果_GET的值为空,则应缓存
if(!$_GET)
$this->output->cache(0);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。