需用file_get_contents("php://input")读取原始XML数据,再用simplexml_load_string或DOMDocument解析;旧版PHP可兼容$HTTP_RAW_POST_DATA;若需验签,应提取HTTP头签名并与原始XML体比对。
如果您在开发PHP应用时需要接收外部系统推送的XML格式实时数据,则可能是由于客户端通过HTTP POST方式将XML内容发送至PHP脚本。以下是实现此功能的几种常用方式:
PHP默认不会自动解析XML格式的POST数据,当Content-Type为application/xml或text/xml时,$_POST为空,必须直
接读取原始请求体。
1、确保PHP脚本位于可被外部HTTP请求访问的路径下,例如receive.php。
2、在脚本开头添加header设置,防止编码问题:header('Content-Type: text/plain; charset=utf-8');
3、调用file_get_contents("php://input")获取完整XML字符串:$xmlString = file_get_contents("php://input");
4、检查字符串是否为空:if (empty($xmlString)) { die("No XML data received"); }
5、使用simplexml_load_string()解析XML:$xml = simplexml_load_string($xmlString, 'SimpleXMLElement', LIBXML_NOCDATA);
在PHP 5.6及更早版本中,若启用always_populate_raw_post_data指令,可通过该超全局变量获取原始POST数据,但自PHP 7.0起已被移除,仅作兼容性说明。
1、确认PHP版本低于7.0且php.ini中设置always_populate_raw_post_data = -1。
2、直接访问变量:$xmlString = $HTTP_RAW_POST_DATA;
3、验证数据有效性:if ($xmlString === false || trim($xmlString) === '') { exit('Invalid raw POST data'); }
4、加载为SimpleXML对象:$xml = simplexml_load_string($xmlString);
某些实时数据接口要求接收方校验数字签名,此时需在接收后立即提取签名头并与XML体计算比对。
1、从HTTP请求头中读取签名字段:$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
2、获取原始XML数据:$xmlRaw = file_get_contents('php://input');
3、使用约定密钥与哈希算法(如HMAC-SHA256)重新生成签名:$expected = hash_hmac('sha256', $xmlRaw, 'your_shared_secret');
4、严格比较签名:if (!hash_equals($expected, $signature)) { http_response_code(401); exit('Signature mismatch'); }
当接收到的XML可能包含命名空间、特殊字符或格式不规范时,DOMDocument比SimpleXML更具可控性和错误捕获能力。
1、初始化DOMDocument实例:$dom = new DOMDocument();
2、关闭内部错误报告以避免警告干扰:$dom->preserveWhiteSpace = false;
3、加载XML字符串并启用libxml错误处理:$dom->loadXML($xmlRaw, LIBXML_NOERROR | LIBXML_NOWARNING);
4、检查加载是否成功:if ($dom->parseError->error_code !== 0) { throw new Exception('XML parsing failed: ' . $dom->parseError->message); }
5、按标签名提取节点:$nodes = $dom->getElementsByTagName('item');
# php
# node
# 编码
# app
# mac
# curl
# ai
# php脚本
# red
# if
# 命名空间
# die
# throw
# xml
相关文章:
香港服务器如何优化才能显著提升网站加载速度?
外贸公司网站制作哪家好,maersk船公司官网?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
建站之星如何取消后台验证码生成?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
宝塔面板如何快速创建新站点?
如何通过老薛主机一键快速建站?
建站之星备案是否影响网站上线时间?
已有域名和空间如何搭建网站?
广州建站公司哪家好?十大优质服务商推荐
建站主机类型有哪些?如何正确选型
营销式网站制作方案,销售哪个网站招聘效果最好?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
电商网站制作价格怎么算,网上拍卖流程以及规则?
宝塔新建站点为何无法访问?如何排查?
如何使用Golang table-driven基准测试_多组数据测量函数效率
实例解析angularjs的filter过滤器
企业微网站怎么做,公司网站和公众号有什么区别?
如何通过万网虚拟主机快速搭建网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Android使用GridView实现日历的简单功能
建站之星如何实现网站加密操作?
建站之星后台密码遗忘或太弱?如何重置与强化?
建站主机如何选?高性价比方案全解析
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
大连网站设计制作招聘信息,大连投诉网站有哪些?
高防服务器租用指南:配置选择与快速部署攻略
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何自定义建站之星网站的导航菜单样式?
如何设置并定期更换建站之星安全管理员密码?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何实现建站之星域名转发设置?
如何配置FTP站点权限与安全设置?
制作网站的软件免费下载,免费制作app哪个平台好?
智能起名网站制作软件有哪些,制作logo的软件?
如何选择高效便捷的WAP商城建站系统?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
如何彻底删除建站之星生成的Banner?
如何选择高效响应式自助建站源码系统?
网站制作话术技巧,网站推广做的好怎么话术?
北京制作网站的公司,北京铁路集团官方网站?
如何高效完成自助建站业务培训?
盐城做公司网站,江苏电子版退休证办理流程?
济南网站制作的价格,历城一职专官方网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。