curl_multi_exec传null至$still_running弃用警告环境差异问题排查
问题现象
在Magento 2的elasticsuite扩展中集成RingPHP库时,CI环境(运行PHP 8.1.7的Ubuntu Docker容器)全流程运行无异常,但部署到staging预发布环境后会触发PHP弃用警告,警告触发位置为RingPHP库CurlMultiHandler类的curl_multi_exec调用逻辑。
复现步骤
可通过n98-magerun2开发控制台稳定复现该问题:
- 执行命令进入开发控制台:
n98-magerun2 dev:con - 在控制台内执行测试代码:
$foo = curl_multi_init(); $still_running = null; curl_multi_exec($foo, $still_running);
- 控制台返回的弃用警告内容:
PHP Deprecated: curl_multi_exec(): Passing null to parameter #2 ($still_running) of type int is deprecated in phar:///usr/local/bin/n98-magerun2eval()'d code on line 3
- 校验当前环境错误报告级别,执行代码:
echo error_reporting();
返回值为32767。
经多环境交叉核对,CI与staging环境的
error_reporting配置完全一致,均为32767,对应E_ALL错误报告级别。
核心疑问
相同错误报告配置下,为什么该弃用警告仅在部分环境触发、其余环境完全无报错?除error_reporting参数外,还有哪些环境配置差异可能导致该现象?
临时规避方案
目前已验证可通过在问题代码行前增加空值初始化逻辑临时解决问题,代码片段如下:
if ($this->active === null) $this->active = 0;
上述修复逻辑已提交至RingPHP官方仓库的社区修复PR中。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

