CI memcache driver修改 for windows server

3 篇文章 0 订阅
2 篇文章 0 订阅
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
/** 
* CodeIgniter 
* 
* An open source application development framework for PHP 4.3.2 or newer 
* 
* @package	 CodeIgniter 
* @author	 ExpressionEngine Dev Team 
* @copyright	Copyright (c) 2006 - 2012 EllisLab, Inc. 
* @license	 http://codeigniter.com/user_guide/license.html 
* @link	 http://codeigniter.com 
* @since	 Version 2.0 
* @filesource	
*/ 

// ------------------------------------------------------------------------ 

/** 
* CodeIgniter Memcached Caching Class 
* 
* @package	 CodeIgniter 
* @subpackage	Libraries 
* @category	Core 
* @author	 ExpressionEngine Dev Team 
* @link	
*/ 

class CI_Cache_memcached extends CI_Driver { 

private $_memcached;	// Holds the memcached object 

protected $_memcache_conf = array( 
'default' => array( 
'default_host'	 => '127.0.0.1', 
'default_port'	 => 11211, 
'default_weight'	=> 1 
) 
); 

// ------------------------------------------------------------------------	

/** 
* Fetch from cache 
* 
* @param mixed	 unique key id 
* @return mixed	 data on success/false on failure 
*/	
public function get($id) 
{	
$data = $this->_memcached->get($id); 

return (is_array($data)) ? $data[0] : FALSE; 
} 

// ------------------------------------------------------------------------ 

/** 
* Save 
* 
* @param string	 unique identifier 
* @param mixed	 data being cached 
* @param int	 time to live 
* @return boolean true on success, false on failure 
*/ 
public function save($id, $data, $ttl = 60) 
{ 
if (get_class($this->_memcached) == 'Memcached') 
{ 
return $this->_memcached->set($id, array($data, time(), $ttl), $ttl); 
} 
<span style="color:#ff0000;">else if (get_class($this->_memcached) == 'Memcache')  //对于window环境添加Memcache判断
{ 
return $this->_memcached->set($id, array($data, time(), $ttl), 0, $ttl); 
}</span> 

return FALSE; 
} 

// ------------------------------------------------------------------------ 

/** 
* Delete from Cache 
* 
* @param mixed	 key to be deleted. 
* @return boolean true on success, false on failure 
*/ 
public function delete($id) 
{ 
return $this->_memcached->delete($id); 
} 

// ------------------------------------------------------------------------ 

/** 
* Clean the Cache 
* 
* @return boolean	 false on failure/true on success 
*/ 
public function clean() 
{ 
return $this->_memcached->flush(); 
} 

// ------------------------------------------------------------------------ 

/** 
* Cache Info 
* 
* @param null	 type not supported in memcached 
* @return mixed array on success, false on failure 
*/ 
public function cache_info($type = NULL) 
{ 
return $this->_memcached->getStats(); 
} 

// ------------------------------------------------------------------------ 

/** 
* Get Cache Metadata 
* 
* @param mixed	 key to get cache metadata on 
* @return mixed	 FALSE on failure, array on success. 
*/ 
public function get_metadata($id) 
{ 
$stored = $this->_memcached->get($id); 

if (count($stored) !== 3) 
{ 
return FALSE; 
} 

list($data, $time, $ttl) = $stored; 

return array( 
'expire'	=> $time + $ttl, 
'mtime'	 => $time, 
'data'	 => $data 
); 
} 

// ------------------------------------------------------------------------ 

/** 
* Setup memcached. 
*/ 
private function _setup_memcached() 
{ 
// Try to load memcached server info from the config file. 
$CI =& get_instance(); 
if ($CI->config->load('memcached', TRUE, TRUE)) 
{ 
if (is_array($CI->config->config['memcached'])) 
{ 
$this->_memcache_conf = NULL; 

foreach ($CI->config->config['memcached'] as $name => $conf) 
{ 
$this->_memcache_conf[$name] = $conf; 
}	
}	
} 
if(extension_loaded('memcached')){ 
$this->_memcached = new Memcached(); 
}else{ 
$this->_memcached = new Memcache(); 
} 


foreach ($this->_memcache_conf as $name => $cache_server) 
{ 
if ( ! array_key_exists('hostname', $cache_server)) 
{ 
$cache_server['hostname'] = $this-><span style="color:#ff0000;">_memcache_conf['default']</span>['default_host']; //some strange error
} 

if ( ! array_key_exists('port', $cache_server)) 
{ 
$cache_server['port'] = $this->_memcache_conf['default']['default_port']; 
} 

if ( ! array_key_exists('weight', $cache_server)) 
{ 
$cache_server['weight'] = $this->_memcache_conf['default']['default_weight']; 
} 

$this->_memcached->addServer( 
$cache_server['hostname'], $cache_server['port'], $cache_server['weight'] 
); 
} 
} 

// ------------------------------------------------------------------------ 


/** 
* Is supported 
* 
* Returns FALSE if memcached is not supported on the system. 
* If it is, we setup the memcached object & return TRUE 
*/ 
public function is_supported() 
{ 
if ( ! extension_loaded('memcached') && <span style="color:#ff6666;">!extension_loaded('memcache'</span>)) //add for windows server
{ 
log_message('error', 'The Memcached Extension must be loaded to use Memcached Cache.'); 

return FALSE; 
} 

$this->_setup_memcached(); 
return TRUE; 
} 

// ------------------------------------------------------------------------ 

} 
// End Class 

/* End of file Cache_memcached.php */ 
/* Location: ./system/libraries/Cache/drivers/Cache_memcached.php */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值