0

0

PHPOPcache缓存怎样刷新生效_OPcache刷新生效法【即时】

雪夜

雪夜

发布时间:2026-02-08 13:23:45

|

525人浏览过

|

来源于php中文网

原创

OPcache 修改PHP文件未生效是因为其默认缓存字节码且不实时校验源文件变更;开发环境应设opcache.validate_timestamps=1并调低opcache.revalidate_freq,生产环境推荐reload PHP-FPM而非opcache_reset()。

phpopcache缓存怎样刷新生效_opcache刷新生效法【即时】

OPcache 缓存为什么改了 PHP 文件却没生效

因为 OPcache 默认把编译后的字节码常驻内存,不检查源文件是否变更。哪怕你 touch 了文件、重启了 Web 服务(如 Apache),只要 OPcache 没被清空或重载,旧字节码就还在跑。

常见现象包括:修改了 index.php 但页面输出仍是旧逻辑;var_dump(__FILE__) 显示路径正确,但内容未更新;用 opcache_get_status() 查看发现 opcache.hit_rate 很高,但 opcache.files_count 和实际文件数对不上。

  • 开发环境建议关闭 opcache.validate_timestamps(设为 1),否则它只在每次请求时按固定间隔(默认 2 秒)检查一次时间戳,不是实时的
  • opcache.revalidate_freq 值越大,延迟越明显;设为 0 才真正“每次请求都校验”,但会牺牲性能
  • 某些 Docker 或容器化部署中,宿主机改文件、容器内 PHP 进程可能因挂载方式看不到 mtime 变更,导致 validate 失效

手动刷新 OPcache 的三种可靠方式

不是所有方式都“即时”——关键看是否触发了字节码重编译,以及是否影响全部 worker 进程。

  • 调用 opcache_reset():必须在脚本中执行,且该脚本本身不能被 OPcache 缓存(否则函数根本不会运行)。推荐放在独立的 opcache-reset.php 中,并确保该文件不在 opcache.blacklist_filename 里,访问一次即重置全站缓存
  • 调用 opcache_invalidate($script, $force):只清指定文件,$force = true 才跳过时间戳校验强制重载。注意路径必须是绝对路径(可用 realpath(__FILE__) 获取)
  • 重启 PHP-FPM 进程:sudo systemctl reload php*-fpmkill -USR2 $(cat /var/run/php/php*-fpm.pid)。这是最彻底的方式,但会造成短暂请求失败(取决于进程管理策略)

别用 opcache_compile_file() 单独预热——它不触发自动依赖解析,require 的其他文件仍可能走旧缓存。

立即学习PHP免费学习笔记(深入)”;

DeepSider
DeepSider

浏览器AI侧边栏对话插件,集成多个AI大模型

下载

如何确认 OPcache 刷新已生效

不能只看页面输出,得查底层状态。

  • 执行 var_dump(opcache_get_status()['scripts']),找目标文件的 timestamp 字段,对比 filemtime() 是否一致
  • 检查 opcache_get_status()['opcache_enabled'] 是否为 true,避免误操作关掉了 OPcache
  • 留意 opcache_get_status()['memory_usage']['used_memory'] 是否在 opcache_reset() 后显著下降,再缓慢回升,说明重载发生了
  • 如果用了 opcache.file_cache(启用磁盘缓存),还需清空对应目录(如 /tmp/opcache/),否则下次启动仍可能加载旧文件

生产环境慎用的“即时刷新”陷阱

所谓“即时”,在多 worker、多实例、FPM 动态子进程场景下根本不存在单点控制。

  • opcache_reset() 只作用于当前请求所在的 PHP 进程,其他 worker 进程缓存未清——你以为刷完了,其实只有 1/8 的请求看到新代码
  • 负载均衡后端有多个 PHP-FPM 实例?每个都要单独调用 opcache_reset(),或统一发信号 reload,否则必然出现新旧混跑
  • 某些云平台(如 AWS Elastic Beanstalk阿里云函数计算)禁止执行系统命令或写临时文件,opcache.file_cacheopcache_reset() 都不可用,只能靠部署时清空缓存目录 + 重启

最稳的做法其实是:部署流程中加入 systemctl reload php*-fpm,并配合健康检查确保所有 worker 已切换。临时调试才用 opcache-reset.php,且务必加 IP 白名单和随机 token 验证。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

470

2023.11.27

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6326

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

830

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1077

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1483

2024.03.01

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

264

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

505

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

406

2024.04.08

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号