繁体   English   中英

APC optcode缓存如何识别类?

[英]How does APC optcode cache identify a class?

我正在运行一个实例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

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

回答

尽管无法找到有关此问题的答案的任何文档php- 不同文件版本上的APC操作码缓存说明, APC操作码缓存实际上确实使用了定义类的文件路径来区分具有相同名称的类。

调试

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

因此,如果您在类似的情况下看到某个类的错误“版本”已加载,则应确保您的类加载器正在按预期方式工作。 一个明显的线索当然是问题类的文件路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM