我很难让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()
永远不会清除缓存(输入后始终显示“bar”)。如果我提供"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()
不会返回任何内容......
答案 0 :(得分:11)
apc_exists可用于PECL apc&gt; = 3.1.4 http://www.php.net/manual/en/function.apc-exists.php所以你的APC版本可能低得多,但它基本上只是一个布尔包装器,一个简单的函数应该基本上做同样的事情: / p>
function user_apc_exists($ key){return(bool)apc_fetch($ key); }
在这两种情况下,你的didint提供了使用哪个缓存的信息,你的probaby想要用户:
apc_clear_cache('user');
apc_cache_info('user);
答案 1 :(得分:0)
我遇到了同样的问题,经过调试后发现,除非存储的数据是布尔假值或空数组,否则汉尼斯答案中的函数将起作用。
在这些情况下也可以使用
if (!function_exists('apc_exists')) {
function apc_exists($key) {
$success = false;
apc_fetch($key, $success);
return $success;
}
}