2013-10-31 34 views
0

我從來沒有真正給過這個想法,但好奇當我做一個PHP include(或要求)時究竟發生了什麼。PHP包括APC磁盤

我一直認爲當加載一個php頁面時,不是實際包含文件(而是點擊磁盤),它會檢查PHP編譯代碼(即APC)的內存緩存。

但後來我在想,PHP如何知道文件何時發生變化(並因此重新編譯)?是否需要檢查加載的磁盤?這是爲什麼(根據APC, disk hits, and requires/includes)包括相對文件名比絕對更差,因爲它必須檢查它是絕對路徑的當前目錄(如果有兩個同名的文件?)如果是這樣,那聽起來像是一些非常大的框架會有很多磁盤命中檢查來查看文件是否已經改變。

或者這是否意味着如果打開APC,是否需要在啓動時手動清除緩存?

+0

我一直以爲它會檢查文件上的修改時間戳,如果它自上次緩存後沒有更改,則假定緩存的拷貝仍然是最新的。現代文件系統會將時間戳緩存在RAM中,因此讀取速度會非常快。 – halfer

回答

1

退房爲apc.stat的文檔:

http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat

默認爲上,迫使APC以STAT(檢查)腳本每個 請求,以確定它是否已被修改。如果它已被修改 它將重新編譯並緩存新版本。如果此設置關閉, APC將不會檢查,這通常意味着要強制APC重新檢查 文件,必須重新啓動Web服務器或手動清除高速緩存將有 。