PHP代码突然被缓存的原因及位置排查求助
PHP 8.1.9 异常缓存问题排查思路
检查PHP OPcache配置
- 打开
php.ini,确认opcache.validate_timestamps是否设为1(开启自动校验文件更新),opcache.revalidate_freq是否设置合理间隔(比如2秒,而非过大的值) - 执行命令
php -i | grep -A 20 "opcache"查看当前OPcache状态,重点看Cached scripts列表和Last restart time,确认目标脚本是否被缓存 - 临时将
opcache.enable设为0,重启Web服务后测试,若问题消失则说明OPcache是根源
- 打开
排查服务器端代理/系统缓存
- 检查是否存在反向代理(如Nginx、Varnish)或本地CDN工具,这类服务可能会缓存响应内容,即使后端文件已修改
- Linux环境下执行
sync; echo 3 > /proc/sys/vm/drop_caches清空系统页缓存,再测试页面内容是否更新 - 确认Web服务的缓存配置,比如Apache的
mod_cache模块是否意外开启,查看httpd.conf中相关配置项
验证脚本执行路径
- 在脚本中添加
echo __FILE__; exit;,输出当前执行文件的绝对路径,确认是否在修改正确的文件(避免因include_path或软链接导致加载了其他目录的旧文件) - 检查PHP的
include_path配置,执行php -i | grep include_path,看是否有优先级更高的目录存在同名脚本
- 在脚本中添加
排查进程驻留问题
- Apache mod_php模式下,重启Apache服务,确认是否有旧进程残留导致内存中保留旧脚本内容
- Symfony内置服务器需完全关闭(杀掉所有相关进程)后重新启动,避免残留进程继续提供旧内容
- 查看PHP的
max_execution_time和memory_limit参数,确认是否存在进程异常挂起的情况
检查文件系统一致性
- 用
stat 你的脚本文件路径查看文件修改时间,确认修改操作是否立即同步了mtime(PHP依赖该时间判断是否重新加载脚本) - 若使用网络文件系统(NFS)或磁盘缓存策略,测试将脚本复制到本地磁盘后运行,看是否仍有缓存问题
- 用
内容的提问来源于stack exchange,提问作者Krann Sock
相关产品推荐
相关产品推荐

