Source for file Memcache.php
Documentation is available at Memcache.php
* Copyright (c) 2006 - 2011 PHPExcel
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.7.6, 2011-02-27
* PHPExcel_CachedObjectStorage_Memcache
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
private $_cachePrefix = null;
private $_cacheTime = 600;
private $_memcache = null;
private function _storeData() {
if (!$this->_memcache->replace($this->_cachePrefix. $this->_currentObjectID. '.cache',$obj,NULL,$this->_cacheTime)) {
if (!$this->_memcache->add($this->_cachePrefix. $this->_currentObjectID. '.cache',$obj,NULL,$this->_cacheTime)) {
throw new Exception('Failed to store cell '. $cellID. ' in MemCache');
} // function _storeData()
* Add or Update a cell in cache identified by coordinate address
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
} // function addCacheData()
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
* @param string $pCoord Coordinate address of the cell to check
// Check if the requested entry is the current object, or exists in the cache
// Check if the requested entry still exists in Memcache
$success = $this->_memcache->get($this->_cachePrefix. $pCoord. '.cache');
if ($success === false) {
// Entry no longer exists in Memcache, so clear it from the cache array
throw new Exception('Cell entry '. $cellID. ' no longer exists in MemCache');
} // function isDataSet()
* Get cell at a specific coordinate
* @param string $pCoord Coordinate of the cell
* @return PHPExcel_Cell Cell that was found, or null if not found
// Check if the entry that has been requested actually exists
$obj = $this->_memcache->get($this->_cachePrefix. $pCoord. '.cache');
// Entry no longer exists in Memcache, so clear it from the cache array
throw new Exception('Cell entry '. $cellID. ' no longer exists in MemCache');
// Return null if requested entry doesn't exist in cache
// Set current entry to the requested entry
// Re-attach the parent worksheet
// Return requested entry
} // function getCacheData()
* Delete a cell in cache identified by coordinate address
* @param string $pCoord Coordinate address of the cell to delete
// Delete the entry from Memcache
$this->_memcache->delete($this->_cachePrefix. $pCoord. '.cache');
// Delete the entry from our cell address array
} // function deleteCacheData()
* Clone the cell collection
// Get a new id for the new file name
$newCachePrefix = substr(md5($baseUnique),0,8). '.';
foreach($cacheList as $cellID) {
$obj = $this->_memcache->get($this->_cachePrefix. $cellID. '.cache');
// Entry no longer exists in Memcache, so clear it from the cache array
throw new Exception('Cell entry '. $cellID. ' no longer exists in MemCache');
if (!$this->_memcache->add($newCachePrefix. $cellID. '.cache',$obj,NULL,$this->_cacheTime)) {
throw new Exception('Failed to store cell '. $cellID. ' in MemCache');
$this->_cachePrefix = $newCachePrefix;
} // function copyCellCollection()
// Flush the Memcache cache
// detach ourself from the worksheet, so that it can then delete this object successfully
} // function unsetWorksheetCells()
public function __construct(PHPExcel_Worksheet $parent, $arguments) {
$memcacheServer = (isset ($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost';
$memcachePort = (isset ($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211;
$cacheTime = (isset ($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if (is_null($this->_cachePrefix)) {
$this->_cachePrefix = substr(md5($baseUnique),0,8). '.';
// Set a new Memcache object and connect to the Memcache server
$this->_memcache = new Memcache();
if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) {
throw new Exception('Could not connect to MemCache server at '. $memcacheServer. ':'. $memcachePort);
$this->_cacheTime = $cacheTime;
} // function __construct()
throw new Exception('memcache '. $host. ':'. $port. ' failed');
foreach($cacheList as $cellID) {
$this->_memcache->delete($this->_cachePrefix. $cellID. '.cache');
} // function __destruct()
|