今天这个错误也发生在我身上,我意识到它为什么会发生(可能是其他原因)。
APC通过完全限定名称(包括类名称空间)正确标识每个类。不幸的是,你最终可能会用不同的名字来引用同一个类。
例如:
我的代码中有一个错误的“使用”的声明,导入一个非命名空间类,仿佛它已经在命名空间里。
该类称为“MyClass”,名称空间为“\”,表示其正确且完全限定的名称为“\ MyClass”。
在某些时候,这个类被它的非限定名称“MyClass”引用,并被自动加载。在另一个文件中,我(错误地)在use语句中使用名称空间前缀引用该类,并说“use \ SomeNamespace \ MyClass;”。因此,该类(再次)传递给我的全局__autoload()方法,但名称不同。更糟的是,autoload方法足够聪明,无论如何都能找到类。
瞬间,我的脚本停止工作和所发生的一切是APC写作“[APC-错误]不能重新声明类......”到Apache Web服务器error.log中。我的页面不再可用。
这不是一个APC错误,但只是正确的行为。
对我来说,它有助于暂时禁用APC(让我的脚本将不考虑冲突的运行),以及勾回声陈述了我的__autoload函数产生传递的参数列表。装载了错误名称的类会很快显示,我可以修复它并重新启用APC。
希望这可以帮助别人。
我会将您的答案标记为已接受。它提供了一个修复(它允许我继续工作),但没有解释为什么我必须将apc.stat配置设置为零(关闭)。至少它可以工作,所以我可以继续在我的Windows系统上开发。 当我移动到具有真实操作系统的服务器(不是米奇鼠标)时,我不会遇到这个问题。 – 2009-12-01 10:26:56
如果可能,您可能想尝试更新版本的php/APC并查看错误是否仍然存在。 – 2009-12-01 18:10:56