必须确认opcache.enable=1且加载进php-fpm进程,仅安装扩展不生效;需用phpinfo()验证web环境启用状态,检查zend_extension加载方式、关键参数(如max_accelerated_files=20000)、并重启php74-fpm服务。

Opcache 在宝塔 PHP 7.4 中默认已编译但常被禁用,仅安装扩展不等于生效,必须确认 opcache.enable=1 且加载进 PHP-FPM 进程。
为什么网站还是慢?先查 OPcache 是否真在 Web 环境运行
很多人点完“安装 opcache”就以为加速了,结果页面照旧卡顿。根本原因是:CLI(命令行)和 Web(PHP-FPM)用的是两套配置,php -m | grep opcache 成功不代表网页能用。
- 在网站根目录建一个
info.php,内容为<?php phpinfo(); ?>,用浏览器访问它 - 搜索
Loaded Configuration File,确认你编辑的php.ini是这一行指向的路径 - 再搜
Opcode Caching,状态必须是Enabled;同时检查opcache.enable行显示On - 如果
opcache_get_status()在网页中报Call to undefined function opcache_get_status(),说明扩展压根没加载进 Web SAPI
宝塔 PHP 7.4 的 opcache.so 加载方式不能写错
宝塔 PHP 7.4 基于 Zend 引擎,必须用 zend_extension 加载,写成 extension=opcache.so 无效,且不会报错——静默失败。
- 进入宝塔 → 软件商店 → 找到已安装的 PHP 7.4 → 设置 → 配置修改
- 搜索
[opcache],若没有该区块,手动添加一行:zend_extension=opcache.so - 确保该行未被注释(前面不能有分号
;或#) - Windows 用户注意:
zend_extension=php_opcache.dll必须写绝对路径,例如zend_extension="C:\php\ext\php_opcache.dll"
PHP 7.4 下关键参数必须手动调,否则缓存命中率暴跌
宝塔“一键启用”给的默认值(如 opcache.max_accelerated_files=2000)对现代框架(Laravel、ThinkPHP)或含大量 Composer 包的项目完全不够,缓存频繁淘汰,反而拖慢响应。
-
opcache.memory_consumption=256:小型站可 128,中大型建议 256(单位 MB) -
opcache.max_accelerated_files=20000:避免哈希冲突,比默认 2000 高 10 倍;WordPress 插件多或 vendor 文件超 15000 时必调 -
opcache.validate_timestamps=1:生产环境必须为 1,否则代码更新后出现白屏或Class not found -
opcache.revalidate_freq=60:设为 0 就等于每次请求都扫描文件时间戳,失去加速意义 -
opcache.enable_cli=0:CLI 模式一般不启用,避免干扰部署脚本或 Artisan 命令
改完配置不重启 PHP-FPM,等于没改
宝塔界面上点“保存”只是写入文件,PHP-FPM 进程仍用旧配置运行。只重启 Nginx 或 Apache 完全无效。
- 改完
php.ini后,在终端执行:sudo systemctl restart php74-fpm(服务名以宝塔实际显示为准,常见还有php-fpm74) - 验证是否生效:
php -r "var_dump(opcache_get_status()['opcache_statistics']['opcache_enabled']);"输出bool(true)才算成功 - 如果
top里php-fpm进程 CPU 占用长期 >300%,或 Nginx 报 502,大概率是 OPcache 内存不足或与 xdebug 冲突,记得禁用xdebug扩展
最容易被忽略的一点:OPcache 缓存的是编译后的字节码,不是 HTML 或静态资源。代码更新后页面不刷新,不是 CDN 问题,而是 opcache.validate_timestamps=0 或 revalidate_freq 设得太大。上线前务必确认这两个值符合发布节奏。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











