用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5335|回复: 13
收起左侧

[版本 3.x] 有人使用过CI3.0的memcached么,在线等

[复制链接]
发表于 2015-5-19 22:58:31 | 显示全部楼层 |阅读模式
有人使用过CI3.0的memcached么,我的报错,Fatal error: Class 'Memcached' not found in /var/www/html/prism/app/system/libraries/Session/drivers/Session_memcached_driver.php on line 108
在线等
 楼主| 发表于 2015-5-20 13:33:44 | 显示全部楼层
我刚解决了,就是没有实例化memcached,每次调用的时候,先
$this->load->driver('cache');
$this->cached->memcached->is_supported();
就行了,太冷清,唉!
原因是它只在is_susoprted里进行实例化,如下:
        /**
         * Is supported
         *
         * Returns FALSE if memcached is not supported on the system.
         * If it is, we setup the memcached object & return TRUE
         *
         * @return        bool
         */
        public function is_supported()
        {
                if ( ! extension_loaded('memcached') && ! extension_loaded('memcache'))
                {
                        log_message('debug', 'The Memcached Extension must be loaded to use Memcached Cache.');
                        return FALSE;
                }

                return $this->_setup_memcached();
        }

点评

good  发表于 2015-5-20 13:41
 楼主| 发表于 2015-5-19 23:17:27 | 显示全部楼层
有红色的是CI里的,是不是应该是 new Memcache()       
public function open($save_path, $name)
        {
                $this->_memcached = new Memcached();
                $this->_memcached->setOption(Memcached::OPT_BINARY_PROTOCOL, TRUE); // required for touch() usage
                $server_list = array();
                foreach ($this->_memcached->getServerList() as $server)
                {
                        $server_list[] = $server['host'].':'.$server['port'];
                }

                if ( ! preg_match_all('#,?([^,:]+)\\d{1,5})(?:\\d+))?#', $this->_config['save_path'], $matches, PREG_SET_ORDER))
 楼主| 发表于 2015-5-19 23:00:06 | 显示全部楼层
调用的地方:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Test extends CI_Controller{

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

    public function index(){
        $this->load->driver('cache');
        //$str = $this->cache->memcached->save('user', 1, 10);
        //echo $this->cache->memcached-get('user');
    }
}
 楼主| 发表于 2015-5-19 22:59:15 | 显示全部楼层
config.php文件配置
//$config['sess_driver'] = 'files';
$config['sess_driver'] = 'memcached';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
//$config['sess_save_path'] = NULL;
$config['sess_save_path'] = '127.0.0.1:11211';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
 楼主| 发表于 2015-5-19 23:01:03 | 显示全部楼层
使用的ubuntu,已经安装memcached
 楼主| 发表于 2015-5-19 23:18:05 | 显示全部楼层
我自己测试没有问题。。。。。
<?php
$mem = new Memcache();
$mem->connect("127.0.0.1", '11211');
$val = "This is a memcache testing";
$key = md5($val);
//$mem->set($key, $val, 0, 120);
$mem->set('name','stign',0,30);

if (($k = $mem->get($key))) {
    echo 'from cache:' .$k;
} else {
    echo 'normal';
}
 楼主| 发表于 2015-5-20 09:07:57 | 显示全部楼层
我去 等了一晚上 没有人啊  太冷清了吧
发表于 2015-5-20 09:08:48 | 显示全部楼层
sting_bo 发表于 2015-5-20 09:07
我去 等了一晚上 没有人啊  太冷清了吧

{:soso_e103:}佩服啊 只可惜我帮不上忙
发表于 2015-5-20 09:42:08 | 显示全部楼层
本帖最后由 一叶扁舟 于 2015-5-20 09:44 编辑

你memcache是不是版本安装错了
new memcache是pecl扩展库版本
new memcached是libmemcached版本  这俩版本存在有历史原因,尽量用memcached


发表于 2015-5-20 13:06:46 | 显示全部楼层
装完memcache还要装memcache的php扩展呀
sudo apt-get install php5-memcached

本版积分规则