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