It’s always surprising to me, but APC is still the best kept secret.
APC offers a bunch of very useful features — foremost a realpath cache and an opcode cache. However, my favorite is neither: it’s being able to cache data in shared memory. How so? Simple: use apc_store() andapc_fetch() to persist data between requests.
The other day, I wanted use a key’s expiration date to send the appropriate headers (Expires and Last-Modified) to the client, but it didn’t seem like APC supports this out of the box yet.
Here is more or less a small hack until there’s a native call:
/**
* Return a key's expiration time.
*
* @param string $key The name of the key.
*
* @return mixed Returns false when no keys are cached or when the key
* does not exist. Returns int 0 when the key never expires
* (ttl = 0) or an integer (unix timestamp) otherwise.
*/
function apc\_expire($key) {
$cache = apc\_cache\_info('user');
if (empty($cache['cache\_list'])) {
return false;
}
foreach ($cache['cache\_list'] as $entry) {
if ($entry['info'] != $key) {
continue;
}
if ($entry['ttl'] == 0) {
return 0;
}
$expire = $entry['creation_time']+$entry['ttl'];
return $expire;
}
return false;
}
http://till.klampaeckel.de/blog/archives/124-APC-get-a-keys-expiration-time.html