如果php 8.5的测试进程报segmentation fault,且启用了opcache jit,可以先用相同测试入口做一次关闭jit的对照。php原始问题25220提供了php 8.5.12 cli的复现,另有开发者在laravel项目的github actions测试中反馈同类崩溃,并确认禁用jit后测试通过;这只证明所列条件下存在这条排查路径,不代表所有段错误都由jit造成。
先确认真正执行测试的配置
记录测试使用的PHP版本、CLI读取的配置文件,以及opcache.enable_cli、opcache.jit、opcache.memory_consumption等参数。报告中的关键条件包括opcache.jit=1235,崩溃回溯可能出现zend_jit_cleanup_func_info;只看到Laravel函数名不足以判断是框架业务代码的问题。
php -v
php --ini
php -r 'echo "jit=", ini_get("opcache.jit"), PHP_EOL;'

PHP官方手册中JIT模式的定义;disable与off的运行时行为不同
在同一入口禁用JIT做对照
PHP官方手册说明,opcache.jit=disable会完全禁用JIT,且运行期间不能重新开启。命令行-d可为本次PHP进程设置配置;已有PHPUnit项目可使用下面的形式,测试入口应替换为本项目实际执行的文件。
php -d opcache.jit=disable vendor/bin/phpunit
保持测试代码、数据与其他条件一致,再比较退出码和崩溃回溯。原帖的独立反馈确认,在其Laravel测试项目和提供的小型复现中,这种设置避开了崩溃;若关闭后仍失败,应继续按实际回溯排查,不能把这个配置当成通用修复。
这是规避路径,不是已发布补丁
报告者将问题定位到JIT初始化失败路径的失效指针,并提交修复PR。核验时PR仍未合并,因此不能宣称某个正式版本已经修复。对受影响测试环境,可先保留禁用JIT的局部配置及对照记录;后续是否恢复,应结合对应版本的正式修复说明与项目验证。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











