PHP读取发布到我的PHP页面的XML
我有一个PHP页面,需要读取发布到此页面的XML。 文章将按内容类型完成:application/xml(而不是application/x-www-form-urlencoded) 例如,我的页面名为test.php,另一台服务器将把XML发布到此页面(test.php)。 我的问题是如何为test.php页面创建一个代码来读取发布到该页面的xml 更新 首先,非常感谢你的回答和花时间帮助我。 我会尽力更好地解释我的问题。 我正在创造一个信使机器人。 我正在使用一个叫做“botplataform”的平台表单。 更多信息请点击此处: 基本上,这个平台的工作原理如下: 我在Instant messager(在本例中为MSN)上键入一条消息,我键入的消息通过XML POST发送到我的PHP页面。 该平台形式如何实现这一点的信息如下: “post请求内容类型为 应用程序/xml(非 application/x-www-form-urlencoded) 你应该把整个身体读作 xml数据,您无法读取任何 参数。” 我的PHP文件需要“读取”这个XML,才能知道用户在MSN上键入了什么。然后我将我的答案发送回botplataform,botplataform将消息发送给用户 我可以将答案发送到botplataform,但是我无法读取botplataform发送到我的php文件的XML 如果你想测试,只需在你的MSN上安装一个ad mainframe(at)xquad(dot)com(dot)br,并与之交谈即可。 它只会回答“Em manutencao” 但是它可以工作,php创建一个XML并对其进行响应PHP读取发布到我的PHP页面的XML,php,xml,Php,Xml,我有一个PHP页面,需要读取发布到此页面的XML。 文章将按内容类型完成:application/xml(而不是application/x-www-form-urlencoded) 例如,我的页面名为test.php,另一台服务器将把XML发布到此页面(test.php)。 我的问题是如何为test.php页面创建一个代码来读取发布到该页面的xml 更新 首先,非常感谢你的回答和花时间帮助我。 我会尽力更好地解释我的问题。 我正在创造一个信使机器人。 我正在使用一个叫做“botplataform
非常感谢,Flávio您可以使用
$HTTP_RAW_POST_DATA
()或php://input
stream
发件人:
php://input
允许您读取原始POST
数据。它是$HTTP\u RAW\u POST\u DATA
的一种内存占用较少的替代方案,不需要任何特殊的php.ini指令<代码>php://input不适用于enctype=“多部分/表单数据”
更新:也许一些例子会有所帮助
下面是一个简单的脚本,我将调用input.php
:
<?php
echo file_get_contents('php://input');
?>
<?php
echo file_get_contents($_FILES['name']['tmp_name']);
?>
使用cURL上载文件:
curl-F“name=@test.xml”http://localhost/input.php
curl-F“name=@test.xml;type=application/xml”http://localhost/input.php
两者都不会从input.php
输出任何内容。但是,如果您修改脚本以查看$\u文件
数组(或者以处理正常上载到PHP的方式),您将获得内容
我将调用新脚本form.php
:
<?php
echo file_get_contents('php://input');
?>
<?php
echo file_get_contents($_FILES['name']['tmp_name']);
?>
使用curl进行文件上载:
curl-F“name=@test.xml;type=application/xml”http://localhost/form.php
将输出test.xml
的内容
在这两种方法之间,您应该能够处理来自另一台服务器的POST
文件或数据
第二次更新:以这种方式强制应用程序/xml
将停止$\u文件
的工作,但随后您将返回到php://input
再次工作:
curl-F“name=@test.xml”-H“内容类型:application/xml”
您可以使用$HTTP\u RAW\u POST\u DATA
()或php://input
stream
发件人:
php://input
允许您读取原始POST
数据。它是$HTTP\u RAW\u POST\u DATA
的一种内存占用较少的替代方案,不需要任何特殊的php.ini指令<代码>php://input不适用于enctype=“多部分/表单数据”
更新:也许一些例子会有所帮助
下面是一个简单的脚本,我将调用input.php
:
<?php
echo file_get_contents('php://input');
?>
<?php
echo file_get_contents($_FILES['name']['tmp_name']);
?>
使用cURL上载文件:
curl-F“name=@test.xml”http://localhost/input.php
curl-F“name=@test.xml;type=application/xml”http://localhost/input.php
两者都不会从input.php
输出任何内容。但是,如果您修改脚本以查看$\u文件
数组(或者以处理正常上载到PHP的方式),您将获得内容
我将调用新脚本form.php
:
<?php
echo file_get_contents('php://input');
?>
<?php
echo file_get_contents($_FILES['name']['tmp_name']);
?>
使用curl进行文件上载:
curl-F“name=@test.xml;type=application/xml”http://localhost/form.php
将输出test.xml
的内容
在这两种方法之间,您应该能够处理来自另一台服务器的POST
文件或数据
第二次更新:以这种方式强制应用程序/xml
将停止$\u文件
的工作,但随后您将返回到php://input
再次工作:
curl-F“name=@test.xml”-H“内容类型:application/xml”
你好,蒂姆php://input 是否可以使用application/xml?因为他正在为我返回空白。我使用的代码是“文件获取内容(”php://input“”;“ThanksIt应该可以工作,除非它是由提到的enctype发送的(在这种情况下,可以进行一些黑客攻击,但没有一个是真正令人愉快的)。TIm,是的,xml是由应用程序/xml enctype发布的:(你知道在这种情况下我能做些什么吗?application/xml不是enctype,而是mimetype。我添加了一些示例代码和测试,也许更多关于发布的代码的信息会有所帮助。你好,Timphp://input 将与application/xml一起使用吗?因为为我返回空白。我使用此代码“file\u get\u contents(”php://input“”;“ThanksIt应该可以工作,除非它是由提到的enctype发送的(在这种情况下,可以进行一些黑客攻击,但没有一个是真正令人愉快的)。TIm,是的,xml是由应用程序/xml enctype发布的:(你知道在这种情况下我能做什么吗?application/xml不是enctype,而是mimetype。我添加了一些示例代码和测试,也许更多关于发布的代码的信息会有所帮助。