簡體   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