未定义的属性:Add :: $ cache - Codeigniter

时间:2011-07-25 18:41:10

标签: php codeigniter memcached

当我尝试在Codeigniter中使用Memcached caching driver时,我遇到了严重的问题。但是,我无法自动加载此阵列中的cache驱动程序:

$autoload['libraries'] = array('database', 'session', 'parser', 'common', 'cache');

如果我删除cache,页面会加载,但如果不是,页面显示为空白且没有错误报告(请注意,我有错误报告并设置为E_ALL)。

无论如何,由于我无法加载cache,我将其添加到我创建的类common中,然后从中加载它:

class Common extends CI_Controller {

    function __construct()
    {
        parent::__construct();

        $this->load->driver('cache');
    }
}

现在我遇到了错误:

  

遇到PHP错误

     

严重性:注意

     

消息:未定义属性:添加:: $ cache

     

文件名:controllers / add.php

     

行号:33遇到PHP错误

     

严重性:注意

     

消息:尝试获取非对象的属性

     

文件名:controllers / add.php

     

行号:33

这是add.php

class Add extends CI_Controller {

    public function index()
    {
        $data = array('page_title' => 'Add your listing');

        $this->load->view('overall_header', $data);

        $sql = "SELECT item_id,
                       item_name
                FROM " . ITEMS_TABLE . "
                WHERE item_visible = 1";

        $items_key = md5('query:' . $sql);

        $result = $this->cache->memcached->save($items_key); // this is line 33
    }
}

我需要memcached才能使用我的Codeigniter应用程序,我尝试使用github中的这个自定义类。

如何让memcached工作,我已正确设置application/config/memcached.php中的所有设置,但我想这不是问题。

1 个答案:

答案 0 :(得分:2)

首先确保PHP已加载memcached库。 PHP使用两种类型的库:memcache和memcached(注意末尾的D)。 Codeigniter缓存驱动程序需要memcached扩展。

这个驱动程序非常错误。首先,未正确加载默认选项,因此您需要创建config / memcached.php文件

这是我的config / memcached.php的样子:

<?php
$config['memcached'] = array(
        'hostname'  => '127.0.0.1',
        'port'      => 11211,
        'weight'    => 1
);

在我的控制器/模型中,我以这种方式加载驱动程序:

$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'dummy'));

因此,如果memcached不可用,则会加载虚拟驱动程序作为后备。

请注意CodeIgniter(2.0.2)的当前稳定版本在驱动程序加载程序类中有另一个bugHere the patch我申请了

完成此修复后,我让驱动程序正常工作

相关问题