⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memcache.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
字号:
<?php/*** @version		$Id:eaccelerator.php 6961 2007-03-15 16:06:53Z tcp $* @package		Joomla.Framework* @subpackage	Session* @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.* @license		GNU/GPL, see LICENSE.php* Joomla! is free software. This version may have been modified pursuant* to the GNU General Public License, and as distributed it includes or* is derivative of works licensed under the GNU General Public License or* other free or open source software licenses.* See COPYRIGHT.php for copyright notices and details.*/// Check to ensure this file is within the rest of the frameworkdefined('JPATH_BASE') or die();/** * Memcache session storage handler for PHP * * -- Inspired in both design and implementation by the Horde memcache handler -- * * @package		Joomla.Framework * @subpackage	Session * @since		1.5 * @see http://www.php.net/manual/en/function.session-set-save-handler.php */class JSessionStorageMemcache extends JSessionStorage{	/**	 * Resource for the current memcached connection.	 *	 * @var resource	 */	var $_db;	/**	 * Use compression?	 *	 * @var int	 */	var $_compress = null;	/**	 * Use persistent connections	 *	 * @var boolean	 */	var $_persistent = false;	/**	* Constructor	*	* @access protected	* @param array $options optional parameters	*/	function __construct( $options = array() )	{		if (!$this->test()) {            return JError::raiseError(404, "The memcache extension isn't available");        }		parent::__construct($options);		$config =& JFactory::getConfig();		$params = $config->getValue('config.memcache_settings');		if (!is_array($params))		{			$params = unserialize(stripslashes($params));		}		if (!$params)		{			$params = array();		}		$this->_compress	= (isset($params['compression'])) ? $params['compression'] : 0;		$this->_persistent	= (isset($params['persistent'])) ? $params['persistent'] : false;		// This will be an array of loveliness		$this->_servers	= (isset($params['servers'])) ? $params['servers'] : array();	}	/**	 * Open the SessionHandler backend.	 *	 * @access public	 * @param string $save_path     The path to the session object.	 * @param string $session_name  The name of the session.	 * @return boolean  True on success, false otherwise.	 */	function open($save_path, $session_name)	{		$this->_db = new Memcache;		for ($i=0, $n=count($this->_servers); $i < $n; $i++)		{			$server = $this->_servers[$i];			$this->_db->addServer($server['host'], $server['port'], $this->_persistent);		}		return true;	}	/**	 * Close the SessionHandler backend.	 *	 * @access public	 * @return boolean  True on success, false otherwise.	 */	function close()	{		return $this->_db->close();	} 	/** 	 * Read the data for a particular session identifier from the 	 * SessionHandler backend. 	 * 	 * @access public 	 * @param string $id  The session identifier. 	 * @return string  The session data. 	 */	function read($id)	{		$sess_id = 'sess_'.$id;		$this->_setExpire($sess_id);		return $this->_db->get($sess_id);	}	/**	 * Write session data to the SessionHandler backend.	 *	 * @access public	 * @param string $id            The session identifier.	 * @param string $session_data  The session data.	 * @return boolean  True on success, false otherwise.	 */	function write($id, $session_data)	{		$sess_id = 'sess_'.$id;		if ($this->_db->get($sess_id.'_expire')) {			$this->_db->replace($sess_id.'_expire', time(), 0);		} else {			$this->_db->set($sess_id.'_expire', time(), 0);		}		if ($this->_db->get($sess_id)) {			$this->_db->replace($sess_id, $session_data, $this->_compress);		} else {			$this->_db->set($sess_id, $session_data, $this->_compress);		}		return;	}	/**	  * Destroy the data for a particular session identifier in the	  * SessionHandler backend.	  *	  * @access public	  * @param string $id  The session identifier.	  * @return boolean  True on success, false otherwise.	  */	function destroy($id)	{		$sess_id = 'sess_'.$id;		$this->_db->delete($sess_id.'_expire');		return $this->_db->delete($sess_id);	}	/**	 * Garbage collect stale sessions from the SessionHandler backend.	 *	 *	-- Not Applicable in memcache --	 *	 * @access public	 * @param integer $maxlifetime  The maximum age of a session.	 * @return boolean  True on success, false otherwise.	 */	function gc($maxlifetime)	{		return true;	}	/**	 * Test to see if the SessionHandler is available.	 *	 * @static	 * @access public	 * @return boolean  True on success, false otherwise.	 */	function test()	{		return (extension_loaded('memcache') && class_exists('Memcache'));	}	/**	 * Set expire time on each call since memcache sets it on cache creation.	 *	 * @access private	 *	 * @param string  $key   Cache key to expire.	 * @param integer $lifetime  Lifetime of the data in seconds.	 */	function _setExpire($key)	{		$lifetime	= ini_get("session.gc_maxlifetime");		$expire		= $this->_db->get($key.'_expire');		// set prune period		if ($expire + $lifetime < time()) {			$this->_db->delete($key);			$this->_db->delete($key.'_expire');		} else {			$this->_db->replace($key.'_expire', time());		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -