php -i | grep opcache.validate_timestamps // 或在脚本里临时清理 opcache_reset();
改了 header.php 的一行文案,刷新前台还是旧内容,文件时间戳明明变了,重启 PHP-FPM 后才生效,过一会儿又复现。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,opcache.validate_timestamps 设成 0 时,PHP 只按缓存里的编译结果执行,不再检查文件修改时间,改模板等于没改。revalidate_freq 设得过大也会出现同样的延迟。
「opcache 模板缓存」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
处理上按这个顺序:查看 opcache 配置,确认 validate_timestamps 是否为 1;开发环境把 revalidate_freq 设为 0,改完立即生效;生产环境保留校验但把频率调到几十秒,改完用 opcache_reset 手动清一次。
改完只确认一件事:改完模板刷新就能看到新内容,不需要重启 PHP-FPM。
