PHP如何通过webhook接收XML数据?php://input读取为空如何解决
问题原因及解决方法
- 首先排查测试方式错误
你当前直接通过Firefox访问PHP地址的请求是GET类型,这类请求默认没有请求体,php://input读取的是HTTP请求的原始正文内容,所以自然读取到空值,后续XML解析、XSLT转换都会无输出。
测试时需要使用接口调试工具(如Postman、Apipost)或curl命令发送POST请求,请求头配置Content-Type: application/xml,请求体填入测试用的XML内容后再调用接口。 - 补充错误校验逻辑
现有代码没有任何异常判断,无法定位具体故障节点,建议添加输入校验、XML解析校验逻辑:$input = file_get_contents('php://input'); // 校验输入是否为空 if (empty($input)) { // 可根据需求添加日志记录逻辑 exit("请求体为空"); } // 校验XML解析是否成功 $xml = simplexml_load_string($input); if (!$xml) { $parseErrors = libxml_get_errors(); var_dump($parseErrors); exit("XML格式错误,解析失败"); } - 修复代码冗余问题
你代码开头初始化了$xml = new DOMDocument,后续又用simplexml_load_string直接覆盖了该变量,属于无用代码。建议统一使用DOMDocument类型加载XML,避免SimpleXML和DOM混用引发的兼容问题:$xml = new DOMDocument; $xml->loadXML($input); - 额外排查方向
如果确认测试请求没有问题仍拿到空输入,可以先将$input写入本地日志文件,确认实际拿到的请求原始内容是否符合预期,排查是否存在请求压缩、编码不兼容的问题。
内容的提问来源于stack exchange,提问作者alaserdolphin
相关产品推荐
相关产品推荐

