PHP与APC:致命错误:无法重新声明课程

Por*_*oru 20 php apc

由于我使用PECL安装了APC for PHP,我有时会遇到以下错误: Cannot redeclare class xxx

xxx不时变化.我可以禁用APC,但APC可以提高性能!是否存在已知错误或我可以采取其他措施来防止这些错误?我正在使用Ubuntu 8.04 LTS和PHP 5.2.4.


编辑/更新(来自评论):

我使用Zend Framework Autoloader,在启用APC之前从未发生过这些错误.不久前我得到了这个错误:Fatal error: require(): Cannot redeclare class zend_db_adapter_abstract in /paths/app/lib/Zend/Db/Select.php on line 27

Pet*_*ter 13

以下配置的组合为我修复了它:

apc.include_once_override = 0
apc.canonicalize = 0
apc.stat = 0
Run Code Online (Sandbox Code Playgroud)

如果没有全部3,我会不断得到错误,但有了这三个我似乎不再得到错误:)!


小智 12

一启用APC,我就遇到了一堆PHP库的问题.经过大量的拔毛后,我发现设置apc.include_once_override = 0清理了一切.仍然监控但没有重新出现问题(之前我能够通过清除apc缓存引发错误).


The*_*can 1

嗯,这是 apc 的一个已知问题,它混合了include_once从不同位置相对调用的指令。

因此,如果您include_once myclass.php这样做,然后在子目录中 do include_once ../myclass.phpapc 可以将其混合起来并认为它是不同的文件并加载它两次。

不过,这在以后的版本中得到了修复。

如果您可以将代码深入到加载两次的类,您可以检查该类是否已加载class_defined或某些可调用的内容。

您还可以使用该apc.filter指令来阻止某些文件被缓存。