1

我正在运行具有多个虚拟主机的单实例 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

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

4

1 回答 1

1

回答

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

调试

在@hakra 向我指出 APC 的行为之后,我能够将精力集中在类加载器上。我的类加载器memcached用作存储类路径的缓存。事实证明,构建缓存键的代码是问题的原因——而不是它看起来的 APC。

因此,如果您遇到类似的情况,您看到加载了不正确的类“版本”,请确保您的类加载器按预期工作。一个明显的线索当然是问题类的文件路径。

于 2012-08-28T10:25:04.627 回答