php 8.6 中 opcache.enable_cli 默认关闭且不推荐开启,仅当运行长期驻留 cli 进程(如 swoole、octane)并满足高命中率等条件时才可谨慎启用。

PHP 8.6 中 opcache.enable_cli 默认仍是关闭的,不能靠“开启”来让它在命令行下生效——它本就设计为「可配置但不推荐启用」。是否设为 1,取决于你的真实使用场景,而非单纯“开启”。
先确认:CLI 和 FPM 配置完全独立
PHP 的 CLI(如 php -v、composer install)和 Web 服务(如 Nginx + PHP-FPM)加载的是两套不同的 php.ini:
- CLI 配置路径:运行
php --ini查看 “Loaded Configuration File” - FPM 配置路径:通常为
/etc/php/8.6/fpm/php.ini或宝塔中对应版本的配置文件 - 改错文件 = 白改;不重载服务 = 不生效
opcache.enable_cli=1 真有必要吗?
绝大多数情况下不需要也不建议开启,原因很实际:
- CLI 脚本生命周期极短(毫秒级),OPcache 来不及预热就退出,缓存命中率接近零
- 可能引发意外行为:比如 Artisan 或 PHPUnit 运行时因缓存旧字节码导致逻辑不一致
- 内存白占:分配的
opcache.memory_consumption在每次 CLI 进程启动时都重新初始化,无法复用 - PHP 官方默认关掉,正是基于此设计哲学
什么情况才考虑设为 1?
仅当满足以下全部条件时,才可谨慎开启:
- 你运行的是长期驻留的 CLI 进程(如 Swoole Worker、Laravel Octane、自研守护进程)
- 该进程反复执行同一组 PHP 文件(非一次性脚本),且有明显编译开销
- 你已通过
opcache_get_status()观察到缓存命中率持续 >85% - 你同时调高了
opcache.max_accelerated_files和opcache.memory_consumption,避免频繁驱逐
正确配置步骤(以 CLI 场景为例)
若你确需启用,请严格按顺序操作:
- 编辑 CLI 对应的 php.ini(不是 FPM 的!)
- 确保扩展加载方式为
zend_extension=opcache(Linux/macOS)或zend_extension=php_opcache.dll(Windows) - 在
[opcache]段落下添加或修改:opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.max_accelerated_files=20000
- 保存后,执行
php -m | grep opcache确认扩展已加载 - 再运行
php -r "var_dump(opcache_get_status()['opcache_enabled']);",输出bool(true)才算真正生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











