PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » HTTP » HTTP_Session » Bug #9715

Add Memcache container

Details

Request #9715Add Memcache container
Submitted2006-12-31 05:58 UTC
Fromchad dot wagner at gmail dot com
Assignedtroehr
StatusClosed
PackageHTTP_Session
PHP Version4.3.11
OSLinux
Roadmaps(Not assigned)

Comments

[2006-12-31 05:58 UTC] chad dot wagner at gmail dot com

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

[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.