2012-08-22 40 views
3

我正在使用PHP爲PHP應用程序本身解壓更新。這是通過從更新服務器抓取一個zip文件,解壓縮它,然後遞歸地將解壓縮的文件移動到應用程序當前存在的文件上來完成的。PHP __FILE__爲移動的文件提供了錯誤的位置

問題是我下次去使用應用程序時,__FILE__(至少在一個新文件中)給出了zip文件最初解壓縮到的目錄中的位置。由於這不是文件的實際位置,因此在隨後的使用__FILE__查找當前目錄的require函數調用中出現錯誤。

最奇怪的部分:我所要做的就是在編輯器中打開文件並重新保存(例如添加和刪除空間),然後PHP將正確解析文件路徑。

任何可能出錯的想法?看起來不知何故,PHP「知道」文件來自哪裏,並且正在獲取該信息而不是它當前所在的位置。重新保存文件會使PHP(或者文件系統)醒來。

+2

這將有助於瞭解問題所在的文件系統和操作系統。 –

+1

另外如果你發佈了你的代碼 –

+0

對不起,操作系統是linux ubuntu,文件系統是ext3。唯一相關的代碼是對__FILE__的引用,以獲取包含在許多其他無用代碼中的require語句中的目錄路徑。我會嘗試獲得一個較小的測試示例並將其發佈到此處。 – juacala

回答

4

我發現這個問題是相同的。我應該猜到這是一個緩存問題。問題是服務器正在使用APC操作碼緩存。我需要此文件位於解壓縮文件夾位置的位置。由於該文件已經存在於APC緩存中(具有相同修改日期的完全相同的文件),因此當它需要它的新位置時,它將使用APC操作碼緩存中的緩存文件,包括其舊路徑!

看起來像一個錯誤,它會混淆像這樣的路徑,但修復很容易。如果我在移動文件後重置操作碼緩存,它會解決問題。

0

PHP將文件保存在具有不同名稱的臨時位置。我的猜測是解壓縮過程會在臨時目錄中創建文件,然後移動它們並找不到文件。

我可能是錯誤的,不明白你的問題非常好,但嘗試輸出文件的名稱和它們的路徑,並在‘移動’操作

相關問題