APC操作码缓存如何识别类?

时间:2012-08-27 10:29:04

标签: php caching apc

我正在运行一个具有多个虚拟主机的Apache实例,它运行相同代码库的不同版本。

我的意思是,一个虚拟主机可以服务一个类的一个版本,另一个可以服务同一个类的第二个版本(相同的名称空间,同名)。

/file/path/host-a/MyClass.php
/file/path/host-b/MyClass.php

有时我会得到一个异常,告诉我其中一个虚拟主机使用类的“错误”版本。例如。在主机b上,我获得了/file/path/host-a/MyClass.php

脚本的文件路径的异常

我认为APC optcode缓存使用了文件路径,至少作为密钥的一部分,但我担心,它只使用合格的类名,如:

My\Namespace\MyClass

是这样的吗?如果可能,请指出有关此主题的任何文档。

1 个答案:

答案 0 :(得分:1)

答案

虽然无法找到关于此问题答案的任何文档php - APC opcode caching on different file versions解释说APC optcode缓存实际上确实使用了定义类的文件路径来区分具有相同名称的类。 / p>

调试

在@hakra向我指出APC的行为之后,我能够专注于类加载器。我的类加载器使用memcached作为缓存来存储类路径。事实证明,构建缓存键的代码是导致问题的原因 - 而不是它似乎的APC。

所以你应该处于类似的情况,你看到加载了一个类的错误“版本”,确保你的类加载器按预期工作。一个明显的线索当然是问题类的文件路径。