注意,只能使现有文件失效。
您需要在删除文件之前调用 opcache_invalidate,而不是从您已删除的 opcache 中删除文件。
(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL ZendOpcache >= 7.0.0)
opcache_invalidate — 使缓存的脚本失效
此函数使 opcode 缓存中的特定脚本失效。如果 force
未设置或为 false
,则只有在脚本的修改时间比缓存的 opcode 新时,才会使脚本失效。此函数仅使内存缓存失效,而不是文件缓存。
filename
要使失效的脚本的路径。
force
如果设置为 true
,则无论是否需要使失效,都会使脚本失效。
注意,只能使现有文件失效。
您需要在删除文件之前调用 opcache_invalidate,而不是从您已删除的 opcache 中删除文件。
opcache_invalidate 尝试获取 SHM 锁。当无法获取锁时,opcache_invalidate 将返回 FALSE。在多个并发 opcache_invalidate 调用期间,该函数将更可能返回 FALSE。
请注意,失效不会真正从缓存中逐出任何东西,它只是强制重新编译。您可以通过调用 opcache_get_status() 来验证这一点,并查看失效的脚本实际上并没有从“脚本”中删除。这意味着它不能用作 opcache_reset() 的更优雅的替代方案,当缓存已满时(状态中的“cache_full”:true)。如果您通过更改 Web 服务器的文档根目录来进行 PHP 代码的原子部署,缓存最终会填满并拒绝缓存新请求。opcache_reset() 似乎是阻止这种情况的唯一方法,但 opcache_reset() 可能会在尝试重启时禁用缓存任何时间,从而导致负载峰值。