opcache需分别验证cli和web环境:cli执行php -m | grep opcache及php -i | grep "opcache.enable"确认加载与启用;web端通过phpinfo()查看“loaded configuration file”路径并确认“opcode caching”为enabled,且必须重启php-fpm或apache服务才生效。

PHP 8.3+ 默认已内置 OPcache,但默认不启用;不改配置、不重启服务,它就等于没装。
怎么确认 OPcache 真的在跑
很多人改完 php.ini 就以为搞定了,结果 phpinfo() 里压根没有 “Opcode Cache” 区块——说明它根本没加载。关键点在于:CLI 和 Web(PHP-FPM/Apache)用的是两套配置文件,必须分别验证。
- CLI 环境:运行
php -m | grep opcache,有输出才表示 CLI 加载了;再执行php -i | grep "opcache.enable"确认值为1 - Web 环境:建个
info.php(内容为<?php phpinfo(); ?>),访问后搜索Opcode Cache,看到Enabled才算生效;注意看页面顶部 “Loaded Configuration File” 路径,确保你改的是这个文件 - Docker 或宝塔用户特别注意:面板后台或容器内可能覆盖了配置,别只改宿主机上的
php.ini;宝塔需进「PHP 设置 → 配置修改」里手动开opcache.enable=1,然后点「重载配置」
必须改的三个核心参数(2026 年实测有效)
默认值对现代项目(Laravel、WordPress 多插件、Composer vendor 超 5k 文件)完全不够用,不调就会频繁触发 Cache full,反而升高 CPU 和 TTFB。
-
opcache.memory_consumption=256:单位是 MB;小站可设 128,中大型建议 256;设 512 前先查opcache_get_status()['opcache_statistics']['oom_count']是否 > 0,否则纯属浪费内存 -
opcache.max_accelerated_files=32531:不是随便写的数字,这是质数,能减少哈希冲突;用find /path/to/www -name "*.php" | wc -l算出真实文件数,取比它大的最近质数(如 7963、32531、65449) -
opcache.validate_timestamps=0:生产环境必须关;开著等于每次请求都stat()所有脚本,缓存形同虚设;开发环境可留 1,但得配opcache.revalidate_freq=2避免太卡
改完不重启 = 白改
OPcache 是进程级共享内存,改完 php.ini 后只重启 Nginx/Apache 完全无效,必须重启 PHP 的实际处理进程。
- PHP-FPM:运行
systemctl restart php83-fpm(把83换成你实际版本号);Ubuntu/Debian 可能是php8.3-fpm - Apache + mod_php:需
systemctl restart apache2,因为模块是 Apache 进程加载的 - 验证是否真重启:改完立刻执行
php -r "print_r(opcache_get_status()['opcache_statistics']['start_time']);",两次时间戳不同才算成功
上线后缓存没更新?别急着删文件
代码部署后页面还是旧的,大概率不是 OPcache 没清,而是你没触发它该清的时机。直接 opcache_reset() 有风险(会清空所有缓存,瞬间命中率为 0),更稳妥的是配合部署流程做定向失效。
- 用
opcache_invalidate('/path/to/changed.php', true)清单个文件;true表示也清它的依赖(比如被include的文件) - 写个部署脚本,在
git pull后自动跑php -r "opcache_reset();",但仅限低流量时段 - 更推荐预加载(Preload):PHP 7.4+ 支持,把常用类提前编译进内存,不受文件时间戳影响;配置项是
opcache.preload,指向一个 PHP 文件,里面用opcache_compile_file()显式加载
最容易被忽略的是:OPcache 只加速 PHP 脚本编译,不加速数据库查询、HTTP 请求或模板渲染。如果 TTFB 没降,先用 opcache_get_status() 查 hit_rate ——低于 90% 才值得调参,高于 95% 还慢,问题肯定在别处。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











