Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 0.5.6

Request #9715 Add Memcache container
Submitted: 2006-12-31 05:58 UTC
From: chad dot wagner at gmail dot com Assigned: troehr
Status: Closed Package: HTTP_Session (version 0.5.5)
PHP Version: 4.3.11 OS: Linux
Roadmaps: (Not assigned)    
Subscription  


 [2006-12-31 05:58 UTC] chad dot wagner at gmail dot com (Chad Wagner)
Description: ------------ <?php /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ /** * Database container for session data * * Memcache database container * * PHP version 4 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category HTTP * @package HTTP_Session * @author Alexander Radivanovich <info@wwwlab.net> * @author David Costa <gurugeek@php.net> * @author Michael Metz <pear.metz@speedpartner.de> * @author Stefan Neufeind <pear.neufeind@speedpartner.de> * @author Torsten Roehr <torsten.roehr@gmx.de> * @copyright 1997-2005 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id: Memcache.php,v 1.3 2005/09/03 14:42:09 troehr Exp $ * @link http://pear.php.net/package/HTTP_Session * @since File available since Release 0.5.0 */ require_once 'HTTP/Session/Container.php'; /** * Database container for session data * * @category HTTP * @package HTTP_Session * @author David Costa <gurugeek@php.net> * @author Michael Metz <pear.metz@speedpartner.de> * @author Stefan Neufeind <pear.neufeind@speedpartner.de> * @author Torsten Roehr <torsten.roehr@gmx.de> * @copyright 1997-2005 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version Release: @package_version@ * @link http://pear.php.net/package/HTTP_Session * @since Class available since Release 0.5.0 */ class HTTP_Session_Container_Memcache extends HTTP_Session_Container { /** * Memcache connection object * * @var object Memcache * @access private */ var $mc = null; /** * Session data cache id * * @var mixed * @access private */ var $crc = false; /** * Constructor method * * $options is an array with the options.<br> * The options are: * <ul> * <li>'memcache' - Memcache object * <li>'prefix' - Key prefix, default is 'sessiondata:'</li> * </ul> * * @access public * @param array $options The options * @return void */ function HTTP_Session_Container_Memcache($options) { $this->_setDefaults(); if (is_array($options)) { $this->_parseOptions($options); } } /** * Connect to database by using the given DSN string * * @access private * @param string DSN string * @return mixed Object on error, otherwise bool */ function _connect($mc) { if (is_object($mc) && is_a($mc, 'Memcache')) { $this->mc = $mc; } else { return new PEAR_Error("The given memcache object was not valid in file " . __FILE__ . " at line " . __LINE__, 41, PEAR_ERROR_RETURN, null, null ); } return true; } /** * Set some default options * * @access private */ function _setDefaults() { $this->options['prefix'] = 'sessiondata:'; $this->options['memcache'] = null; } /** * Establish connection to a database * */ function open($save_path, $session_name) { return $this->_connect($this->options['memcache']); } /** * Free resources * */ function close() { return true; } /** * Read session data * */ function read($id) { $result = $this->mc->get($this->options['prefix'] . $id); $this->crc = strlen($result) . crc32($result); return $result; } /** * Write session data * */ function write($id, $data) { if ($this->crc !== strlen($data) . crc32($data)) { $this->mc->set($this->options['prefix'] . $id ,$data ,MEMCACHE_COMPRESSED ,time() + ini_get('session.gc_maxlifetime') ); } return true; } /** * Destroy session data * */ function destroy($id) { $this->mc->delete($this->options['prefix'] . $id); return true; } /** * Garbage collection * */ function gc($maxlifetime) { return true; } } ?> Test script: --------------- n/a Expected result: ---------------- n/a Actual result: -------------- n/a

Comments

 [2006-12-31 06:00 UTC] chad dot wagner at gmail dot com
Not sure who is actively working on this package, but if you drop me a note I can attach the code. It appears to work fine.
 [2007-01-01 16:27 UTC] troehr (Torsten Roehr)
This bug has been fixed in CVS. If this was a documentation problem, the fix will appear on pear.php.net by the end of next Sunday (CET). If this was a problem with the pear.php.net website, the change should be live shortly. Otherwise, the fix will appear in the package's next release. Thank you for the report and for helping us make PEAR better.