讲师中心 微信公众号
AI工具推荐 视频效率加速

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

秋雪大大_8538

秋雪大大_8538

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

|

625人浏览过

|

来源于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*-fpm 或 kill -USR2 $(cat /var/run/php/php*-fpm.pid)。这是最彻底的方式,但会造成短暂请求失败(取决于进程管理策略)

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

Docker Compose Optimizer
Docker Compose Optimizer

优化 Docker Compose 配置,适用于开发和生产环境——审计服务、网络、卷、健康检查和资源管理。

下载

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

如何确认 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_cache 和 opcache_reset() 都不可用,只能靠部署时清空缓存目录 + 重启

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

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
require的用法
require的用法

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

1975

2023.11.27

登录token无效
登录token无效

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

14886

2023.09.14

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

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

1745

2023.09.14

token怎么获取
token怎么获取

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

4137

2023.12.21

token什么意思
token什么意思

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

6301

2024.03.01

k8s和docker区别
k8s和docker区别

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

785

2023.07.24

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

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

6419

2024.04.08

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

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

7537

2024.04.08

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn