2009-11-27 24 views
3

我有一個緩存系統內建立的PHP存儲在XML XML查詢的結果。我通過創建帶有獨佔寫入句柄的鎖定文件來構建高速緩存,然後在完成高速緩存文件後將其刪除。如何確保文件句柄關閉,如果一個PHP腳本超時?

但是,有些時候腳本要麼超時,要麼暫停執行,而是讓鎖定文件保留原位,這樣腳本的任何進一步執行都會認爲緩存始終在更新。

我試圖檢查文件是一個分鐘數舊,並試圖獲得獨家寫入訪問該文件來刷新鎖並開始執行,但它似乎該文件仍然打開與以前的句柄和我無法打開新的句柄,以確保當前進程是唯一一個訪問並重新鎖定文件的進程。

有沒有一種方法可以確保腳本在執行過程中暫停,任何打開的文件句柄都會關閉,並且所涉及的文件可供將來的進程訪問?

感謝

回答

3

PHP解釋器退出時調用fclose()所有打開的文件,從而釋放任何鎖。也許你還沒有找到正確的問題。

但是,在腳本終止之前需要清理某些內容時,請使用register_shutdown_function()。即使腳本終止並出錯,註冊的函數也會被調用。

+0

感謝回覆Emil,我發現在檢查卡住的鎖定文件時,我在我的fopen上使用了錯誤的模式,無論我做了什麼,它總是會返回false。 我現在正在努力改變這一點,並確保我得到的結果是正確的結果,而不是錯誤的結果 有時候發現實際問題比修復它,一旦你知道什麼是錯的。 – coffeecoder 2009-11-27 16:04:49

相關問題