当我尝试在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
中的所有设置,但我想这不是问题。
答案 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)的当前稳定版本在驱动程序加载程序类中有另一个bug。 Here the patch我申请了
完成此修复后,我让驱动程序正常工作