2010-05-15 5 views
1

J'ai la fonction suivante:APC ne fonctionne pas comme prévu?

function Cache($key, $value = null, $ttl = 60) 
{ 
    if (isset($value) === true) 
    { 
     apc_store($key, $value, intval($ttl)); 
    } 

    return apc_fetch($key); 
} 

Et je le tester en utilisant le code suivant:

Cache('ktime', time(), 3); // Store 

sleep(1); 
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should Fetch 
sleep(5); 
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should NOT Fetch 
sleep(1); 
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should NOT Fetch 
sleep(1); 
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should NOT Fetch 

Et voici la sortie:

string(21) "1273966771-1273966772" 
string(21) "1273966771-1273966777" 
string(21) "1273966771-1273966778" 
string(21) "1273966771-1273966779" 

devrait-il pas il ressemble à ceci:

string(21) "1273966771-1273966772" 
string(11) "-1273966777" 
string(11) "-1273966778" 
string(11) "-1273966779" 

Je ne comprends pas, quelqu'un peut-il m'aider à comprendre ce comportement étrange?

Répondre

2

Apparemment, cela est un problème connu dans APC 3.0.16 (2007-12-26) et plus tard, et ne seront pas fixés.

http://pecl.php.net/bugs/bug.php?id=13331

Les travaux ttL, mais "t" est une constante au cours d'une requête donnée. Donc, un objet mis en cache n'expire pas avant au moins la prochaine requête.

+0

Oh! Thats ce que les « sur la demande suivante » signifie, je demande que * * signifiait la prochaine 'apc_fetch()' appel. Merci Bill, maintenant je peux profiter de ce "bug". =) –

Questions connexes