運(yùn)行時(shí)配置

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

OPcache 配置選項(xiàng)
名字 默認(rèn) 可修改范圍 更新日志
opcache.enable "1" PHP_INI_ALL  
opcache.enable_cli "0" PHP_INI_SYSTEM 在 PHP 7.1.2 至 7.1.6 (含)的版本,默認(rèn)值是"1"
opcache.memory_consumption "128" PHP_INI_SYSTEM 在 PHP 7.0.0 之前,默認(rèn)值是 "64"
opcache.interned_strings_buffer "8" PHP_INI_SYSTEM 在 PHP 7.0.0 之前,默認(rèn)值是 "4"
opcache.max_accelerated_files "10000" PHP_INI_SYSTEM 在 PHP 7.0.0 之前,默認(rèn)值是 "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 開(kāi)始被移除
opcache.fast_shutdown "0" PHP_INI_SYSTEM 從 PHP 7.2.0 開(kāi)始被移除
opcache.enable_file_override "0" PHP_INI_SYSTEM  
opcache.optimization_level "0x7FFFBFFF" PHP_INI_SYSTEM 從 PHP 5.6.18 開(kāi)始,默認(rèn)值從 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 開(kāi)始支持
opcache.file_cache_only "0" PHP_INI_SYSTEM 從 PHP 7.0.0 開(kāi)始支持
opcache.file_cache_consistency_checks "1" PHP_INI_SYSTEM 從 PHP 7.0.0 開(kāi)始支持
opcache.file_cache_fallback "1" PHP_INI_SYSTEM 從 PHP 7.0.0 開(kāi)始支持,僅適用于 Windows 平臺(tái)
opcache.validate_permission "0" PHP_INI_SYSTEM 從 PHP 7.0.14 開(kāi)始支持
opcache.validate_root "0" PHP_INI_SYSTEM 從 PHP 7.0.14 開(kāi)始支持
opcache.preload "" PHP_INI_SYSTEM 從 PHP 7.4.0 開(kāi)始支持
opcache.preload_user "" PHP_INI_SYSTEM 從 PHP 7.4.0 開(kāi)始支持
有關(guān) PHP_INI_* 樣式的更多詳情與定義,見(jiàn) 配置可被設(shè)定范圍

這是配置指令的簡(jiǎn)短說(shuō)明。

opcache.enable boolean

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

opcache.enable_cli boolean

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

opcache.memory_consumption integer

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

opcache.interned_strings_buffer integer

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

opcache.max_accelerated_files integer

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

opcache.max_wasted_percentage integer

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

opcache.use_cwd boolean

如果啟用,OPcache 將在哈希表的腳本鍵之后附加改腳本的工作目錄, 以避免同名腳本沖突的問(wèn)題。 禁用此選項(xiàng)可以提高性能,但是可能會(huì)導(dǎo)致應(yīng)用崩潰。

opcache.validate_timestamps boolean

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

opcache.revalidate_freq integer

檢查腳本時(shí)間戳是否有更新的周期,以秒為單位。 設(shè)置為 0 會(huì)導(dǎo)致針對(duì)每個(gè)請(qǐng)求, OPcache 都會(huì)檢查腳本更新。

如果 opcache.validate_timestamps 配置指令設(shè)置為禁用,那么此設(shè)置項(xiàng)將會(huì)被忽略。

opcache.revalidate_path boolean

如果禁用此選項(xiàng),在同一個(gè) include_path 已存在的緩存文件會(huì)被重用。 因此,將無(wú)法找到不在包含路徑下的同名文件。

opcache.save_comments boolean

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

opcache.load_comments boolean

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

opcache.fast_shutdown boolean

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

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

opcache.enable_file_override boolean

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

opcache.optimization_level integer

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

opcache.inherited_hack boolean

該配置指令已被忽略。

opcache.dups_fix boolean

僅作為針對(duì) “不可重定義類”錯(cuò)誤的一種解決方案。

opcache.blacklist_filename string

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

簡(jiǎn)單的黑名單文件可能如下所示:

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

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

opcache.consistency_checks integer

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

opcache.force_restart_timeout integer

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

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

opcache.error_log string

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

opcache.log_verbosity_level integer

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

opcache.preferred_memory_model string

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

可選值包括: mmap,shm, posix 以及 win32

opcache.protect_memory boolean

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

opcache.mmap_base string

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

opcache.restrict_api string

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

opcache.file_update_protection string

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

opcache.huge_code_pages string

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

opcache.lockfile_path string

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

opcache.opt_debug_level string

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

opcache.file_cache string

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

opcache.file_cache_only boolean

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

opcache.file_cache_consistency_checks boolean

當(dāng)從文件緩存中加載腳本的時(shí)候,是否對(duì)文件的校驗(yàn)和進(jìn)行驗(yàn)證。

opcache.file_cache_fallback boolean

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

警告

不鼓勵(lì)禁用此配置項(xiàng), 禁用它可能會(huì)導(dǎo)致進(jìn)程無(wú)法啟動(dòng)。

opcache.validate_permission boolean

針對(duì)當(dāng)前用戶,驗(yàn)證緩存文件的訪問(wèn)權(quán)限。

opcache.validate_root boolean

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

opcache.preload string

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

opcache.preload_user string

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