Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用自定义输出方法时的Codeigniter页面缓存_Php_Codeigniter_Caching - Fatal编程技术网

Php 使用自定义输出方法时的Codeigniter页面缓存

Php 使用自定义输出方法时的Codeigniter页面缓存,php,codeigniter,caching,Php,Codeigniter,Caching,我想缓存我的页面,这可以通过使用: $this->output->cache(n) 与文档中一样,我可以在控制器中使用一个名为\u output的自定义输出方法 问题是,当我在控制器中创建这个_输出方法时,它不会创建任何缓存文件,只显示输出。我查看了Output核心类,当我看到它没有找到任何带有\u Output的方法时,它只是回显内容 他们在文档中有以下内容,用于my_输出: if ($this->output->cache_expiration > 0) {

我想缓存我的页面,这可以通过使用:

$this->output->cache(n)
与文档中一样,我可以在控制器中使用一个名为\u output的自定义输出方法

问题是,当我在控制器中创建这个_输出方法时,它不会创建任何缓存文件,只显示输出。我查看了Output核心类,当我看到它没有找到任何带有\u Output的方法时,它只是回显内容

他们在文档中有以下内容,用于my_输出:

if ($this->output->cache_expiration > 0)
{
   $this->output->_write_cache($output);
}

但是缓存过期无法访问…

您有两种解决方法

  • 您可以编辑核心文件并使其成为 public而不是受保护的并弄乱核心文件(肮脏的方式
  • 或者您可以扩展
    CI\u输出
    类(更好
  • 应用程序/core
    中创建一个文件名it
    MY_Output.php
    MY_
    前缀位于
    应用程序/config/config.php
    文件中的
    $config['subclass\u prefix']
    选项中

    然后把这段代码放在下面:

    class MY_Output Extends CI_Output{
    
        public $the_public_cache_expiration_ = 0;
    
        public function get_cache_expiration()
        {
            $this->cache_expiration_ = $this->cache_expiration;
        }
    }
    
    我们正在做的是扩展
    CI\u Output
    类并添加我们自己的方法,当调用方法
    get\u cache\u expiration()
    时,它将
    cache\u expiration
    分配给
    public\u cache\u expiration
    ,在
    \u输出上使用它

    使用以下方法进行测试:

    public function _output($output)
        {
            $this->output->get_cache_expiration();
            echo '<pre>';
            print_r($this->output->the_public_cache_expiration_);//get only our cache expiration
            echo '<hr>';
            print_r($this->output);//print the whole Output class
        }   
    

    谢谢,成功了!
    public function _output($output)
    
        {
            $this->output->get_cache_expiration();
    
            if($this->output->cache_expiration_ > 0)
            {
                $this->output->_write_cache($output);
            }
    
            echo $output;
        }