Laravel Tinker调用opcache_status返回false、OpCache生效检测异常
OpCache CLI下返回false问题排查方案
你提供的配置中,web场景OpCache开关已开启,但CLI场景开关为关闭状态:
- opcache.enable => On => On
- opcache.enable_cli => Off => Off
核心原因
你测试使用的php artisan tinker、php -a都属于PHP CLI运行模式,CLI模式的OpCache开关和web场景相互独立,默认关闭状态下调用opcache_status()自然返回false,不属于配置异常,也不影响web服务的OpCache正常运行。
基础说明
- 官方默认关闭CLI模式OpCache的逻辑:CLI进程单次执行结束就会销毁,缓存的字节码无法被后续请求复用,开启反而会增加不必要的性能开销
opcache.enable配置仅作用于PHP-FPM、Apache mod_php等web运行场景,不会影响CLI模式的OpCache状态
验证web场景OpCache是否正常
新建可web访问的测试文件,写入如下代码:
<?php // 打印opcache状态,返回数组即代表正常运行 var_dump(opcache_status()); // 也可以查看phpinfo详情确认状态 phpinfo();
通过web地址访问该文件,若返回的opcache_status()结果为数组,或phpinfo页面中Opcode Caching字段显示Up and Running,说明OpCache配置完全正常。
特殊场景开启CLI OpCache的方法
如果有常驻CLI进程、长时间运行CLI脚本等场景需要开启CLI模式的OpCache,修改php.ini配置文件:
opcache.enable_cli = On
修改后重启对应CLI进程即可生效,之后再在CLI下执行opcache_status()就会返回正常的状态数据。
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

