Мне трудно заставить PHP APC работать. Вот мой тестовый код:
<form>
<input type="text" name="apc">
<input type="submit">
</form>
<?php
apc_store('foo','FOO');
if (isset($_GET['apc'])) {
apc_store($_GET['apc'],$_GET['apc']);
}
?>
<pre>CACHE INFO (USER): <?php print_r(apc_cache_info("user",false)); ?></pre>
<pre>CACHE INFO: <?php print_r(apc_cache_info()); ?></pre>
<pre>FOO: <?php print_r(apc_fetch("foo")); ?></pre>
<pre>BAR: <?php print_r(apc_fetch("bar")); ?></pre>
<pre><?php if (apc_exists("bar")) { ?>bar exists!<?php } else { ?>bar does not exist!<?php } ?></pre>
<?php apc_clear_cache(); ?>
Короче говоря: вы заполняете форму, и вставленное значение сохраняется в APC. Ключ "foo" всегда сохраняется. Вы можете попробовать сохранить «bar», чтобы увидеть, как apc_fetch()
работает с недавно добавленным ключом.
Что работает нормально:
apc_store()
apc_fetch()
Что не так:
apc_cache_info()
(независимо от того, какие параметры я передаю функции) всегда печатает пустой массив, несмотря на то, чтоapc_fetch()
успешно извлекает данныеapc_clear_cache()
никогда не очищает кеш ("полоса" всегда отображается после ввода). Это верно как в том случае, если я предоставлю параметр"user"
, так и оставлю функцию без параметров.- вызов
apc_exists()
приводит к фатальной ошибке: вызов неопределенной функции apc_exists()
На случай, если это будет полезно: я использую Zend Server CE 5.6.0 (свежая установка, завершена полчаса назад) с PHP 5.3.9. То же самое произошло вчера с более старой версией Zend Server CE (с PHP 5.3.5). Я не знаю, какая версия APC поставляется с Zend Server, phpinfo()
показывает только, что APC включен. Я на компьютере с Windows (Windows 7 Professional, 32-разрядная версия).
Так. Что здесь не так? Проблемы с моим кодом? Может быть, Zend Server поставляется с более старой версией APC, которая содержит ошибки и/или не поддерживает функции, которые я пытаюсь использовать? Любые подсказки?
[РЕДАКТИРОВАТЬ]
Вдохновленный подсказками, предоставленными @Hannes, я изменил код, добавив:
<?php
if (!function_exists('apc_exists') {
function apc_exists($key) { return (boolean)apc_fetch($key); }
}
?>
Поскольку ошибка не возникает, код переходит к следующей строке, и кеш очищается нормально. Должно быть, именно поэтому он не был очищен в первую очередь.
Тем не менее, apc_cache_info()
ничего не возвращает...