Source for file APC.php
Documentation is available at APC.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_APC
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
private $_cachePrefix = null;
private $_cacheTime = 600;
private function _storeData() {
throw new Exception('Failed to store cell '. $cellID. ' in APC');
} // 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 apc
$success = apc_fetch($this->_cachePrefix. $pCoord. '.cache');
if ($success === false) {
// Entry no longer exists in APC, so clear it from the cache array
throw new Exception('Cell entry '. $cellID. ' no longer exists in APC');
} // 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 = apc_fetch($this->_cachePrefix. $pCoord. '.cache');
// Entry no longer exists in APC, so clear it from the cache array
throw new Exception('Cell entry '. $cellID. ' no longer exists in APC');
// 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 APC
apc_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 = apc_fetch($this->_cachePrefix. $cellID. '.cache');
// Entry no longer exists in APC, so clear it from the cache array
throw new Exception('Cell entry '. $cellID. ' no longer exists in APC');
if (!apc_store($newCachePrefix. $cellID. '.cache',$obj,$this->_cacheTime)) {
throw new Exception('Failed to store cell '. $cellID. ' in APC');
$this->_cachePrefix = $newCachePrefix;
} // function copyCellCollection()
// detach ourself from the worksheet, so that it can then delete this object successfully
} // function unsetWorksheetCells()
public function __construct(PHPExcel_Worksheet $parent, $arguments) {
$cacheTime = (isset ($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if (is_null($this->_cachePrefix)) {
$this->_cachePrefix = substr(md5($baseUnique),0,8). '.';
$this->_cacheTime = $cacheTime;
} // function __construct()
foreach($cacheList as $cellID) {
apc_delete($this->_cachePrefix. $cellID. '.cache');
} // function __destruct()
|