18

关于 APC 写入失败的原因,php.net 上的文档参差不齐。什么样的场景会导致调用 apc_store() 失败?

有大量可用的磁盘空间,而且故障参差不齐。有时存储操作会成功,有时会失败。

4

9 回答 9

52

对于 php cli,需要使用另一个选项启用:apc.enable_cli=On

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

于 2010-01-26T19:41:42.563 回答
10

我有完全相同的情况。

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

一切都崩溃了。我无法让缓存通过 APC 工作,不得不恢复使用文件库缓存。

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

修复....

apc.enable_cli=On

于 2011-12-20T16:09:39.183 回答
6

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

于 2009-11-03T21:27:44.660 回答
4

这个 asinine(并且由于某种原因已关闭)错误是我的问题:

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 个“真”和 3.1.3p1 的真/假/真

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

于 2010-05-06T02:58:04.047 回答
2

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

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

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

于 2010-01-26T19:51:06.703 回答
1

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

于 2009-11-03T20:50:51.840 回答
1

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

于 2009-11-03T21:04:37.500 回答
1

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

于 2011-08-02T09:48:09.863 回答
0

如果该特定密钥已经存在并且您尝试在 TTL 到期之前再次写入它, apc_store 将失败。因此,您几乎可以忽略返回 false,因为它确实失败了,但缓存仍然存在。如果您想解决这个问题,请开始使用 apc_add 代替。 http://php.net/manual/en/function.apc-add.php

于 2010-09-14T18:27:42.490 回答