運行時配置

這些函數(shù)的行為受 php.ini 中的設置影響。

OPcache 配置選項
名字 默認 可修改范圍 更新日志
opcache.enable "1" PHP_INI_ALL  
opcache.enable_cli "0" PHP_INI_SYSTEM 在 PHP 7.1.2 至 7.1.6 (含)的版本,默認值是"1"
opcache.memory_consumption "128" PHP_INI_SYSTEM 在 PHP 7.0.0 之前,默認值是 "64"
opcache.interned_strings_buffer "8" PHP_INI_SYSTEM 在 PHP 7.0.0 之前,默認值是 "4"
opcache.max_accelerated_files "10000" PHP_INI_SYSTEM 在 PHP 7.0.0 之前,默認值是 "2000"
opcache.max_wasted_percentage "5" PHP_INI_SYSTEM  
opcache.use_cwd "1" PHP_INI_SYSTEM  
opcache.validate_timestamps "1" PHP_INI_ALL  
opcache.revalidate_freq "2" PHP_INI_ALL  
opcache.revalidate_path "0" PHP_INI_ALL  
opcache.save_comments "1" PHP_INI_SYSTEM  
opcache.load_comments "1" PHP_INI_ALL 從 PHP 7.0.0 開始被移除
opcache.fast_shutdown "0" PHP_INI_SYSTEM 從 PHP 7.2.0 開始被移除
opcache.enable_file_override "0" PHP_INI_SYSTEM  
opcache.optimization_level "0x7FFFBFFF" PHP_INI_SYSTEM 從 PHP 5.6.18 開始,默認值從 0xFFFFFFFF 修改為 0x7FFFBFFF
opcache.inherited_hack "1" PHP_INI_SYSTEM 自 PHP 7.3.0 被移除
opcache.dups_fix "0" PHP_INI_ALL  
opcache.blacklist_filename "" PHP_INI_SYSTEM  
opcache.max_file_size "0" PHP_INI_SYSTEM  
opcache.consistency_checks "0" PHP_INI_ALL  
opcache.force_restart_timeout "180" PHP_INI_SYSTEM  
opcache.error_log "" PHP_INI_SYSTEM  
opcache.log_verbosity_level "1" PHP_INI_SYSTEM  
opcache.preferred_memory_model "" PHP_INI_SYSTEM  
opcache.protect_memory "0" PHP_INI_SYSTEM  
opcache.mmap_base null PHP_INI_SYSTEM  
opcache.restrict_api "" PHP_INI_SYSTEM  
opcache.file_update_protection "2" PHP_INI_ALL  
opcache.huge_code_pages "0" PHP_INI_SYSTEM  
opcache.lockfile_path "/tmp" PHP_INI_SYSTEM  
opcache.opt_debug_level "0" PHP_INI_SYSTEM  
opcache.file_cache NULL PHP_INI_SYSTEM 從 PHP 7.0.0 開始支持
opcache.file_cache_only "0" PHP_INI_SYSTEM 從 PHP 7.0.0 開始支持
opcache.file_cache_consistency_checks "1" PHP_INI_SYSTEM 從 PHP 7.0.0 開始支持
opcache.file_cache_fallback "1" PHP_INI_SYSTEM 從 PHP 7.0.0 開始支持,僅適用于 Windows 平臺
opcache.validate_permission "0" PHP_INI_SYSTEM 從 PHP 7.0.14 開始支持
opcache.validate_root "0" PHP_INI_SYSTEM 從 PHP 7.0.14 開始支持
opcache.preload "" PHP_INI_SYSTEM 從 PHP 7.4.0 開始支持
opcache.preload_user "" PHP_INI_SYSTEM 從 PHP 7.4.0 開始支持
有關 PHP_INI_* 樣式的更多詳情與定義,見 配置可被設定范圍

這是配置指令的簡短說明。

opcache.enable boolean

啟用操作碼緩存。如果禁用此選項,則不會優(yōu)化和緩存代碼。 在運行期使用 ini_set() 函數(shù)只能禁用 opcache.enable 設置,不可以啟用此設置。 如果在腳本中嘗試啟用此設置項會產(chǎn)生警告。

opcache.enable_cli boolean

僅針對 CLI 版本的 PHP 啟用操作碼緩存。 通常被用來測試和調(diào)試。

opcache.memory_consumption integer

OPcache 的共享內(nèi)存大小,以兆字節(jié)為單位。

opcache.interned_strings_buffer integer

用來存儲預留字符串的內(nèi)存大小,以兆字節(jié)為單位。 PHP 5.3.0 之前的版本會忽略此配置指令。

opcache.max_accelerated_files integer

OPcache 哈希表中可存儲的腳本文件數(shù)量上限。 真實的取值是在質(zhì)數(shù)集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一個大于等于設置值的質(zhì)數(shù)。 設置值取值范圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。

opcache.max_wasted_percentage integer

浪費內(nèi)存的上限,以百分比計。 如果達到此上限,那么 OPcache 將產(chǎn)生重新啟動續(xù)發(fā)事件。

opcache.use_cwd boolean

如果啟用,OPcache 將在哈希表的腳本鍵之后附加改腳本的工作目錄, 以避免同名腳本沖突的問題。 禁用此選項可以提高性能,但是可能會導致應用崩潰。

opcache.validate_timestamps boolean

如果啟用,那么 OPcache 會每隔 opcache.revalidate_freq 設定的秒數(shù) 檢查腳本是否更新。 如果禁用此選項,你必須使用 opcache_reset() 或者 opcache_invalidate() 函數(shù)來手動重置 OPcache,也可以 通過重啟 Web 服務器來使文件系統(tǒng)更改生效。

opcache.revalidate_freq integer

檢查腳本時間戳是否有更新的周期,以秒為單位。 設置為 0 會導致針對每個請求, OPcache 都會檢查腳本更新。

如果 opcache.validate_timestamps 配置指令設置為禁用,那么此設置項將會被忽略。

opcache.revalidate_path boolean

如果禁用此選項,在同一個 include_path 已存在的緩存文件會被重用。 因此,將無法找到不在包含路徑下的同名文件。

opcache.save_comments boolean

如果禁用,腳本文件中的注釋內(nèi)容將不會被包含到操作碼緩存文件, 這樣可以有效減小優(yōu)化后的文件體積。 禁用此配置指令可能會導致一些依賴注釋或注解的 應用或框架無法正常工作, 比如: Doctrine, Zend Framework 2 以及 PHPUnit。

opcache.load_comments boolean

如果禁用,則即使文件中包含注釋,也不會加載這些注釋內(nèi)容。 本選項可以和 opcache.save_comments 一起使用,以實現(xiàn)按需加載注釋內(nèi)容。

opcache.fast_shutdown boolean

如果啟用,則會使用快速停止續(xù)發(fā)事件。 所謂快速停止續(xù)發(fā)事件是指依賴 Zend 引擎的內(nèi)存管理模塊 一次釋放全部請求變量的內(nèi)存,而不是依次釋放每一個已分配的內(nèi)存塊。

從 PHP 7.2.0 開始,此配置指令被移除。 快速停止的續(xù)發(fā)事件的處理已經(jīng)集成到 PHP 中, 只要有可能,PHP 會自動處理這些續(xù)發(fā)事件。

opcache.enable_file_override boolean

如果啟用,則在調(diào)用函數(shù) file_exists(), is_file() 以及 is_readable() 的時候, 都會檢查操作碼緩存,無論文件是否已經(jīng)被緩存。 如果應用中包含檢查 PHP 腳本存在性和可讀性的功能,這樣可以提升性能。 但是如果禁用了 opcache.validate_timestamps 選項, 可能存在返回過時數(shù)據(jù)的風險。

opcache.optimization_level integer

控制優(yōu)化級別的二進制位掩碼。

opcache.inherited_hack boolean

該配置指令已被忽略。

opcache.dups_fix boolean

僅作為針對 “不可重定義類”錯誤的一種解決方案。

opcache.blacklist_filename string

OPcache 黑名單文件位置。 黑名單文件為文本文件,包含了不進行預編譯優(yōu)化的文件名,每行一個文件名。 黑名單中的文件名可以使用通配符,也可以使用前綴。 此文件中以分號(;)開頭的行將被視為注釋。

簡單的黑名單文件可能如下所示:

; 將特定文件加入到黑名單
/var/www/broken.php
; 以字符 x 文件打頭的文件
/var/www/x
; 通配符匹配
/var/www/*-broken.php
opcache.max_file_size integer

以字節(jié)為單位的緩存的文件大小上限。設置為 0 表示緩存全部文件。

opcache.consistency_checks integer

如果是非 0 值,OPcache 將會每隔 N 次請求檢查緩存校驗和。 N 即為此配置指令的設置值。 由于此選項對于性能有較大影響,請盡在調(diào)試環(huán)境使用。

opcache.force_restart_timeout integer

如果緩存處于非激活狀態(tài),等待多少秒之后計劃重啟。 如果超出了設定時間,則 OPcache 模塊將殺除持有緩存鎖的進程, 并進行重啟。

如果選項 opcache.log_verbosity_level 設置為 2 或者 2 以上的數(shù)值,當發(fā)生重啟時將在日志中記錄一條警告信息。

opcache.error_log string

OPcache 模塊的錯誤日志文件。 如果留空,則視為 stderr, 錯誤日志將被送往標準錯誤輸出 (通常情況下是 Web 服務器的錯誤日志文件)。

opcache.log_verbosity_level integer

OPcache 模塊的日志級別。 默認情況下,僅有致命級別(0)及錯誤級別(1)的日志會被記錄。 其他可用的級別有:警告(2),信息(3)和調(diào)試(4)。

opcache.preferred_memory_model string

OPcache 首選的內(nèi)存模塊。 如果留空,OPcache 會選擇適用的模塊, 通常情況下,自動選擇就可以滿足需求。

可選值包括: mmapshm, posix 以及 win32。

opcache.protect_memory boolean

保護共享內(nèi)存,以避免執(zhí)行腳本時發(fā)生非預期的寫入。 僅用于內(nèi)部調(diào)試。

opcache.mmap_base string

在 Windows 平臺上共享內(nèi)存段的基地址。 所有的 PHP 進程都將共享內(nèi)存映射到同樣的地址空間。 使用此配置指令避免“無法重新附加到基地址”的錯誤。

opcache.restrict_api string

僅允許路徑是以指定字符串開始的 PHP 腳本調(diào)用 OPcache API 函數(shù)。 默認值為空字符串 "",表示不做限制。

opcache.file_update_protection string

如果文件的最后修改時間距現(xiàn)在不足此項配置指令所設定的秒數(shù),那么這個文件不會進入到緩存中。 這是為了防止尚未完全修改完畢的文件進入到緩存。 如果你的應用中不存在部分修改文件的情況,把此項設置為 0 可以提高性能。

opcache.huge_code_pages string

啟用或者禁用將 PHP 代碼(文本段)拷貝到 HUGE PAGES 中。 此項配置指令可以提高性能,但是需要在 OS 層面進行對應的配置。

opcache.lockfile_path string

用來存儲共享鎖文件的絕對路徑(僅適用于 *nix 操作系統(tǒng))。

opcache.opt_debug_level string

出于對不同階段的優(yōu)化情況進行調(diào)試的目的,生成操作碼轉(zhuǎn)儲。 設置為 0x10000 會在進行優(yōu)化之前輸出編譯器編譯后的操作碼, 設置為 0x20000 會輸出優(yōu)化后的操作碼。

opcache.file_cache string

配置二級緩存目錄并啟用二級緩存。 啟用二級緩存可以在 SHM 內(nèi)存滿了、服務器重啟或者重置 SHM 的時候提高性能。 默認值為空字符串 "",表示禁用基于文件的緩存。

opcache.file_cache_only boolean

啟用或禁用在共享內(nèi)存中的 opcode 緩存。

opcache.file_cache_consistency_checks boolean

當從文件緩存中加載腳本的時候,是否對文件的校驗和進行驗證。

opcache.file_cache_fallback boolean

在 Windows 平臺上,當一個進程無法附加到共享內(nèi)存的時候, 使用基于文件的緩存,也即:opcache.file_cache_only=1。 需要顯示的啟用文件緩存。

警告

不鼓勵禁用此配置項, 禁用它可能會導致進程無法啟動。

opcache.validate_permission boolean

針對當前用戶,驗證緩存文件的訪問權限。

opcache.validate_root boolean

在 chroot 的環(huán)境中避免命名沖突。 為了防止進程訪問到 chroot 環(huán)境之外的文件,應該在 chroot 的情況下啟用這個選項。

opcache.preload string

指定要在服務器啟動時期進行編譯和緩存的 PHP 腳本文件, 這些文件也可能通過 include 或者 opcache_compile_file() 函數(shù) 來預加載其他文件。 所有這些文件中包含的實體,包括函數(shù)、類等,在服務器啟動的時候就被加載和緩存, 對于用戶代碼來講是“開箱可用”的。

opcache.preload_user string

考慮到安全因素,禁止以 root 用戶預加載代碼。該指令方便以其他用戶預加載。