Php 无法重新声明类sfconfig

Php 无法重新声明类sfconfig,php,symfony1,apc,Php,Symfony1,Apc,我正在Windows XP上运行带有PHP版本5.2.11的Symfony(1.2.9) 我已安装APC(版本3.0.19) 我可以运行PHP脚本来证明apc工作正常。但是,当我尝试在symfony操作中使用APC调用时,会出现以下错误(在apache error.log文件中): [apc错误]无法重新声明类sfconfig 这立刻使Apache崩溃 我尝试使用Symfony sfAPCCache包装器,然后直接调用apc_*函数——结果是一样的。有人知道为什么会发生这种情况吗?签出这些线程:

我正在Windows XP上运行带有PHP版本5.2.11的Symfony(1.2.9)

我已安装APC(版本3.0.19)

我可以运行PHP脚本来证明apc工作正常。但是,当我尝试在symfony操作中使用APC调用时,会出现以下错误(在apache error.log文件中):

[apc错误]无法重新声明类sfconfig

这立刻使Apache崩溃


我尝试使用Symfony sfAPCCache包装器,然后直接调用apc_*函数——结果是一样的。有人知道为什么会发生这种情况吗?

签出这些线程:


我以前遇到过与APC无关的错误,它不仅有助于运行cache:clear,而且有助于检查并确保所有文件都已从cache dir中删除

在我的开发窗口中,我也经历了同样的情况 系统具有PHP5.2.11和几个apc版本。同样的 如前所述,stat=0时,一切正常,但 当我设置stat=1时,apache崩溃,错误为“无法” 重新声明类[某类]”。代码正在处理一个 不同的windows系统,除了它是活在一个沉重的负担 已加载linux生产服务器数月。我百分之百肯定 没有与apc相关的错误。它是从我的机器上启动的 在我重新安装操作系统之后

我花了一些时间评论了一些课程,包括和 意识到它适用于某些包含文件,但不适用于 具体的。我检查了我的代码没有明显的错误 在班级差异上存在差异

然后我保存了所有包含文件,并添加了一些 Zend Studio编辑器中的附加空白。看起来 愚蠢我知道,但它的工作!!!我正在做这个项目 和几个人一起使用svn,每个人都使用 不同的文本编辑器,如notepad++、editplus等

但是,我无法通过尝试保存 具有不同配置的不同编辑器的文件,如 ansi,utf8,带/不带字节标记排序等,但我确定 我的问题与文件格式(编码、, pc/unix模式)。我想重现错误,并希望 提供更详细的信息,但我在另一个网站上尝试了我的解决方案 有同样问题的项目,它也可以工作


我希望我能从另一个角度来看待这个问题。

对我来说,解决这个问题的方法是确保我的需求有相同的路径

例如,我得到的错误是:
[apc错误]无法重新声明类someClass

在文件A中,我有以下内容:
require_once'/path/to/someClass.php'

在与someClass.php位于同一目录的文件B中,我有以下内容:
require_once'someClass.php'


我相信APC缓存无法理解它们是同一个文件,因为路径是为其中一个文件指定的,而不是为另一个文件指定的。

今天,这个错误也发生在我身上,我意识到了为什么会发生(可能还有其他原因)

APC通过一个完全限定的名称(包括类名称空间)正确标识每个类。不幸的是,您最终可能使用不同的名称引用同一个类

例如:

我的代码中有一个错误的“use”语句,导入了一个非命名空间的类,就好像它在命名空间中一样

该类(比如说“MyClass”)位于命名空间“\”中,这意味着其正确且完全限定的名称是“\MyClass”

在某个时刻,该类被其非限定名称“MyClass”引用,并被自动加载。在另一个文件中,我(错误地)在use语句中引用了带有名称空间前缀的类,比如“use\SomeNamespace\MyClass;”。因此,该类(再次)被传递给我的全局_autoload()方法,但名称不同。更糟糕的是,autoload方法非常聪明,无论如何都可以找到类

立即,我的脚本停止工作,发生的一切就是APC将“[APC错误]无法重新声明类…”写入Apache Web服务器error.log。我的页面不再可用

这不是一个APC错误,只是一个正确的行为

在我的例子中,它有助于暂时禁用APC(这样我的脚本就可以在不考虑冲突的情况下运行),并将echo语句挂接到my__autoload函数中,生成传递的参数列表。加载了错误名称的类会很快出现,我可以修复它并重新启用APC


希望这对某人有所帮助。

我会将您的答案标记为已接受。它提供了一个修复(允许我继续工作),但没有解释为什么我必须将apc.stat配置设置为零(off)。至少它可以工作,所以我可以继续在我的windows box上开发。当我移动到我的服务器时,我不会有这个问题,它有一个真正的操作系统(不是米老鼠操作系统)。如果可能的话,你可能想尝试一个更新版本的php/APC,看看错误是否仍然存在。