請注意,只有現有的檔案才能失效。
您需要在刪除檔案之前呼叫 opcache_invalidate,而不是從 opcache 中移除已刪除的檔案。
(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL ZendOpcache >= 7.0.0)
opcache_invalidate — 使快取的腳本失效
此函式會使操作碼快取中的特定腳本失效。如果 force
未設定或為 false
,則只有在腳本的修改時間比快取的操作碼更新時,腳本才會失效。此函式僅使記憶體快取失效,而不使檔案快取失效。
filename
要失效的腳本路徑。
force
如果設定為 true
,則無論是否需要失效,腳本都會失效。
請注意,只有現有的檔案才能失效。
您需要在刪除檔案之前呼叫 opcache_invalidate,而不是從 opcache 中移除已刪除的檔案。
opcache_invalidate 會嘗試取得 SHM 鎖定。當無法取得鎖定時,opcache_invalidate 將返回 FALSE。在多個併發 opcache_invalidate 呼叫中,此函式更有可能返回 FALSE。
請注意,失效實際上並不會從快取中移除任何內容,它只會強制重新編譯。您可以透過呼叫 opcache_get_status() 並查看失效的腳本實際上並未從「scripts」中移除來驗證這一點。這表示當快取已滿(狀態中的 "cache_full":true)時,它不能用作 opcache_reset() 的更優雅的替代方案。如果您透過更改 Web 伺服器的文件根目錄來進行 PHP 程式碼的原子部署,則快取最終將填滿並拒絕快取新的請求。opcache_reset() 似乎是防止這種情況發生的唯一方法,但在嘗試重新啟動時,opcache_reset() 可能會在任意時間內停用快取,從而導致負載高峰。