Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么apc_store()返回false?_Php_Apc - Fatal编程技术网

Php 为什么apc_store()返回false?

Php 为什么apc_store()返回false?,php,apc,Php,Apc,关于APC写入失败的原因,php.net上的文档非常零散。什么样的情况会导致对apc_store()的调用失败 有足够的可用磁盘空间,故障也不多。有时存储操作会成功,有时会失败 磁盘空间不足或存储目录的权限被拒绝?除了Greg所说的之外,我还要补充一点,配置错误可能会导致这种情况。内存不足(即为apc分配的内存)对于php cli,需要使用另一个选项启用它: apc.enable_cli=On 在我的情况下,它在从webbrowser运行时起作用,但在使用PHPCLI执行相同内容时不起作用。 p

关于APC写入失败的原因,php.net上的文档非常零散。什么样的情况会导致对apc_store()的调用失败


有足够的可用磁盘空间,故障也不多。有时存储操作会成功,有时会失败

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

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

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

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

在我的情况下,它在从webbrowser运行时起作用,但在使用PHPCLI执行相同内容时不起作用。

php.ini上的apc.ttl和apc.user\u ttl设置:

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

这个愚蠢的bug(出于某种原因关闭了)是我的问题:

必须回滚到apc版本3.1.2才能使apc正常工作。不要在php.ini中修改apc设置,这很有帮助(我使用的是MacOS10.5,使用的是Apache2和PHP5.3)

对我来说,这个测试脚本对3.1.2显示了3个“真”,对3.1.3p1显示了真/假/真

变量转储(apc存储(“测试”、“一”); 变量转储(apc存储('test','two');
变量转储(apc存储('diff','thr')

apc_存储将失败,如果该特定密钥已经存在,并且您正试图在TTL过期之前再次写入该密钥。因此,您几乎可以忽略返回false,因为它确实失败了,但缓存仍然存在。如果你想解决这个问题,开始使用apc_add

安装ubuntu 10.04和debian stable的版本中有一个bug。如果您使用以下版本替换软件包:(3.1.7)它可以正常工作。

我遇到了完全相同的情况

我将代码从使用Cron作业迁移到使用Gearman工人,这些工人通过supervisord进行管理

一切都坏了。我无法通过APC让缓存工作,不得不恢复使用filebase缓存

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

修正


apc.enable_cli=On

apc_store()将数据存储在内存中。不在磁盘上。您可以在命令行上使用
php-dapc启用此功能。如果您使用PHPUnit测试代码并使用apc变量存储,请启用\u cli=1
,然后打开此吸盘。我花了太长时间才弄明白。@Sverri:嗯,很好。。但是我如何才能为这个特定的命令打开它呢?e、 g.在phpunit.xml.dist中,或者作为phpunit的命令行参数?好的,如果我运行php-d apc.enable_cli=1/home/thisisme/pear/bin/phpunit,而不是直接运行phpunit,那么它会起作用。这是默认行为吗?这应该在文档中明确说明。这是错误的:
apc_store()
覆盖现有密钥而不失败(->它返回
true
apc_add()
是一个在重复键上真正失败的方法(顾名思义)