PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

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.