为什么apc_store()会返回false?

时间:2009-11-03 20:46:00

标签: php apc

关于php.net的文档非常不清楚APC写入失败的原因。什么样的场景会导致调用apc_store()失败?

有足够的可用磁盘空间,而且失败很多。有时商店运营会成功,有时会失败。

9 个答案:

答案 0 :(得分:46)

对于php cli,需要使用其他选项启用: apc.enable_cli =开

在我的情况下,它在从webbrowser运行时工作,但在用php cli执行相同的东西时却没有。

答案 1 :(得分:8)

我有完全相同的情况。

我将我的代码从使用Cron Jobs迁移到使用通过supervisord管理的Gearman Workers。

一切都破灭了。我无法通过APC获得缓存,并且不得不恢复使用文件库缓存。

最终我发现当我使用cron作业时,我会通过wget而不是命令行加载每个页面。这种差异意味着将通过命令行加载我的PHP脚本的supervisord将无法工作,因为默认情况下APC将无法通过命令行工作。

修复......

apc.enable_cli=On

答案 2 :(得分:6)

内存不足(为apc分配内存,即)

答案 3 :(得分:4)

这个asinine(由于某些原因关闭)bug是我的问题:

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

必须回滚到apc版本3.1.2以使apc工作。没有摆弄php.ini中的apc设置帮助(我在mac os 10.5上,使用apache 2,php 5.3)。

对我来说,这个测试脚本显示3.1.2的3“trues”和3.1.3p1的true / false / true

var_dump(apc_store('test','one')); var_dump(apc_store('test','two')); var_dump(apc_store('diff','thr'));

答案 4 :(得分:2)

http://php.net/manual/en/apc.configuration.php

php.ini上的apc.ttl和apc.user_ttl设置:

  

将此值保留为零意味着APC的缓存可能会填满陈旧条目,而新条目不会被缓存。

答案 5 :(得分:1)

磁盘空间不足或存储目录被拒绝?

答案 6 :(得分:1)

除了Greg所说的,我还要补充说配置错误可能导致这种情况。

答案 7 :(得分:1)

如果该特定密钥已经存在并且您在TTL过期之前尝试再次写入,那么

apc_store将失败。因此,您几乎可以忽略返回false,因为它确实失败但缓存仍然存在。如果你想解决这个问题,请改用apc_add。 http://php.net/manual/en/function.apc-add.php

答案 8 :(得分:1)

使用ubuntu 10.04和debian stable安装的版本中存在一个错误。如果您使用此版本替换软件包:http://packages.debian.org/sid/php-apc(3.1.7)它可以正常工作。