OPcache 在 Web 环境未加载,首要确认 phpinfo() 中 “Loaded Configuration File” 路径,并确保该文件中 zend_extension 行已启用、路径正确、扩展状态为 Enabled;CLI 加载成功不等于 Web 进程加载。

OPcache 在 Web 环境根本没加载?先确认 phpinfo() 里的 Loaded Configuration File
很多人改完 php.ini 就以为开了,结果网站还是慢——因为 PHP-FPM 或 Apache 根本没读你改的那个文件。命令行里 php -m | grep opcache 成功,只说明 CLI 模式加载了,和网页请求完全无关。
必须用浏览器访问一个 info.php(内容为 <?php phpinfo(); ?>),然后搜索:
- “Loaded Configuration File”:记下这个路径,后面所有修改都得针对它
- “Opcode Caching”:状态必须是 Enabled,且旁边
opcache.enable显示 On - 如果搜不到 “Opcode Caching” 区块,或
opcache_get_status()在网页中报Call to undefined function opcache_get_status(),说明扩展压根没进 Web 进程
zend_extension=opcache.so 这一行写错就全白搭
Linux/macOS 下必须用 zend_extension=opcache.so,不是 extension=opcache.so;Windows 下必须是 zend_extension=php_opcache.dll,且路径要绝对——XAMPP、phpEnv、宝塔等环境常因路径不对静默失败。
实操要点:
立即学习“PHP免费学习笔记(深入)”;
- 打开
phpinfo()显示的Loaded Configuration File,搜索zend_extension - 删掉前面的分号
;,确保这行未被注释 - Windows 用户务必检查 DLL 文件是否存在:
C:\phpenv\versions\php-8.2-x64\ext\php_opcache.dll这类路径要真实存在 - 宝塔用户注意:点“一键启用”只加基础参数,但可能漏掉
zend_extension行,需手动补上
opcache.validate_timestamps=0 是生产环境最大陷阱
设成 0 意味着 OPcache 永远不检查文件是否更新,代码上线后页面白屏、Class not found、路由失效全由此引发——这不是性能问题,是功能故障。
正确做法:
- 开发环境:
opcache.validate_timestamps=1+opcache.revalidate_freq=2(每 2 秒检查) - 生产环境:
opcache.validate_timestamps=1+opcache.revalidate_freq=5~60(根据发布频率权衡) - 若用容器或只读文件系统必须关时间戳验证,发布后必须调
opcache_reset()(CLI 执行php -r 'opcache_reset();'),不能靠 reload 服务
重启服务只 restart PHP-FPM,别碰 Nginx/Apache
改完 php.ini 后,只重启 Nginx 或 Apache 完全无效;只 reload PHP-FPM 也不保险——必须完整 restart。
对应操作:
- 宝塔用户:PHP 设置页点“保存”,它会自动执行
systemctl restart php84-fpm(服务名以你实际版本为准) - 手动操作:运行
sudo systemctl restart php84-fpm,不是reload - Apache + mod_php 场景:才需要重启
apache2或httpd,和 PHP-FPM 无关 - 改完立刻刷新
phpinfo()页面,确认 “Opcode Caching” 区块还在、状态仍是 Enabled
最常被忽略的是:同一台机器上 CLI 和 Web 共用一份 php.ini 文件,但 PHP-FPM 进程启动时可能加载了另一个配置(比如 /etc/php/8.4/fpm/php.ini),而你改的是 /usr/local/etc/php/php.ini。验证前,先盯死 phpinfo() 里那行 “Loaded Configuration File”。



















