PHP的file_get_contents突然抛出Invalid IP错误该如何修复
修复方案
错误根因
你此前使用的0:0是bindto参数的简写写法,PHP在7.4后续维护版本、8.0及以上版本中,增加了对socket上下文bindto参数的格式强校验,简写的0不再被识别为合法的IPv4地址,因此抛出Invalid IP Address: 0的警告。但底层socket实现仍兼容该简写格式,所以功能可以正常运行,仅会抛出错误提示。
修复代码
将bindto的取值替换为标准的IPv4通配符格式即可,功能和原有逻辑完全一致,不会产生额外影响:
file_get_contents($url, false, stream_context_create([ 'socket' => ['bindto' => '0.0.0.0:0'] ]));
0.0.0.0:0的含义是绑定本机任意可用IPv4地址、使用随机端口发起请求,和你原来的需求完全匹配,可强制请求走IPv4协议。
特殊现象说明
你在ErrorHandler的__construct方法中调用对应封装函数没有看到报错,是因为错误触发阶段PHP的错误报告级别被临时调整,或是自定义错误 handler 初始化阶段默认屏蔽了E_WARNING级别的错误提示,该报错实际仍然存在,只是没有被输出而已。
内容的提问来源于stack exchange,提问作者A. Eaxon
相关产品推荐
相关产品推荐

