* Copyright 2010 Google Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
if (!class_exists('UDP_Google_Client')) {
require_once dirname(__FILE__) . '/../autoload.php';
* A persistent storage class based on the APC cache, which is not
* really very persistent, as soon as you restart your web server
* the storage will be wiped, however for debugging and/or speed
* it can be useful, and cache is a lot cheaper then storage.
* @author Chris Chabot <chabotc@google.com>
class Google_Cache_Apc extends Google_Cache_Abstract
* @var Google_Client the current client
public function __construct(UDP_Google_Client $client)
if (! function_exists('apc_add') ) {
$error = "Apc functions not available";
$client->getLogger()->error($error);
throw new Google_Cache_Exception($error);
public function get($key, $expiration = false)
$this->client->getLogger()->debug(
if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
$this->client->getLogger()->debug(
'APC cache miss (expired)',
array('key' => $key, 'var' => $ret)
$this->client->getLogger()->debug(
array('key' => $key, 'var' => $ret)
public function set($key, $value)
$var = array('time' => time(), 'data' => $value);
$rc = apc_store($key, $var);
$this->client->getLogger()->error(
array('key' => $key, 'var' => $var)
throw new Google_Cache_Exception("Couldn't store data");
$this->client->getLogger()->debug(
array('key' => $key, 'var' => $var)
public function delete($key)
$this->client->getLogger()->debug(