今天這個錯誤也發生在我身上,我意識到它爲什麼會發生(可能是其他原因)。
APC通過完全限定名稱(包括類名稱空間)正確標識每個類。不幸的是,你最終可能會用不同的名字來引用同一個類。
例如:
我的代碼中有一個錯誤的「使用」的聲明,導入一個非命名空間類,彷彿它已經在命名空間裏。
該類稱爲「MyClass」,名稱空間爲「\」,表示其正確且完全限定的名稱爲「\ MyClass」。
在某些時候,這個類被它的非限定名稱「MyClass」引用,並被自動加載。在另一個文件中,我(錯誤地)在use語句中使用名稱空間前綴引用該類,並說「use \ SomeNamespace \ MyClass;」。因此,該類(再次)傳遞給我的全局__autoload()方法,但名稱不同。更糟的是,autoload方法足夠聰明,無論如何都能找到類。
瞬間,我的腳本停止工作和所發生的一切是APC寫作「[APC-錯誤]不能重新聲明類......」到Apache Web服務器error.log中。我的頁面不再可用。
這不是一個APC錯誤,但只是正確的行爲。
對我來說,它有助於暫時禁用APC(讓我的腳本將不考慮衝突的運行),以及勾回聲陳述了我的__autoload函數產生傳遞的參數列表。裝載了錯誤名稱的類會很快顯示,我可以修復它並重新啓用APC。
希望這可以幫助別人。
我會將您的答案標記爲已接受。它提供了一個修復(它允許我繼續工作),但沒有解釋爲什麼我必須將apc.stat配置設置爲零(關閉)。至少它可以工作,所以我可以繼續在我的Windows系統上開發。 當我移動到具有真實操作系統的服務器(不是米奇鼠標)時,我不會遇到這個問題。 – 2009-12-01 10:26:56
如果可能,您可能想嘗試更新版本的php/APC並查看錯誤是否仍然存在。 – 2009-12-01 18:10:56