Мне тяжело заставить PHP APC работать.Вот мой тестовый код:
<code><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)); ?>
CACHE INFO: <?php print_r(apc_cache_info()); ?>
FOO: <?php print_r(apc_fetch("foo")); ?>
BAR: <?php print_r(apc_fetch("bar")); ?>
<?php if (apc_exists("bar")) { ?>bar exists!<?php } else { ?>bar does not exist!<?php } ?>
Короче говоря: вы заполняете форму, и введенное значение сохраняется в APC.Ключ «foo» всегда сохраняется.Вы можете попробовать сохранить "bar", чтобы увидеть, как 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, которая просто глючит и / или не поддерживает функции, которые я пытаюсь использовать?Любые подсказки?
[EDIT]
Вдохновленный подсказками, предоставленными @Hannes, я изменил код, добавив:
<?php
if (!function_exists('apc_exists') {
function apc_exists($key) { return (boolean)apc_fetch($key); }
}
?>
Поскольку ошибка не возникает, кодпереходит на следующую строку и кеш очищается ОК.Наверное, именно поэтому он не был очищен с самого начала.
Тем не менее, apc_cache_info()
ничего не возвращает ...