PHP读取XML发布到我的PHP页面

时间:2010-08-04 20:22:02

标签: php xml

我有一个PHP页面需要读取发布到此页面的XML。 帖子将由content-type:application / xml(不是application / x-www-form-urlencoded)完成。

例如,我的页面名为test.php,另一台服务器将XML发布到此页面(test.php)。 我的问题是如何创建一个代码到这个test.php页面来读取发布到它的xml?

更新

首先,非常感谢答案和花时间来帮助我。 我会尝试更好地解释我的问题。 我正在创建一个Messenger Robot。 我正在使用名为“botplataform”的平台。 更多信息请访问:http://code.google.com/p/botplatform/wiki/RobotServiceHostedOnWebServer

Basicaly这个plataform的工作原理如下: 我在我的instante messager(在本例中为MSN)上键入了一条消息,我键入的消息通过XML POST发送到我的PHP页面。 关于这种平台如何做到这一点的信息是这样的:

  

“帖子请求内容类型是   应用/ XML(未   应用程序/ x-WWW窗体-urlencoded)。所以   你应该读整个身体   xml数据,你无法读取任何数据   参数“。

我的PHP文件需要“读取”此XML以了解用户在MSN上输入的内容。他们将我的回答发回给将信息发送给用户的botplataform。

我可以发送botplataform的答案,但是我无法读取botplataform发送到我的php文件的XML。

如果您想测试,只需将广告主机(at)xquad(点)com(点)br与您的MSN进行对话即可。 它只会是“Em manutencao” 但是它有效,php创建了一个XML并回应它。

非常感谢,Flávio

1 个答案:

答案 0 :(得分:4)

您可以使用$HTTP_RAW_POST_DATAmanual entry)或php://input信息流。

来自the manual

  

php://input可让您阅读原始POST数据。它是$HTTP_RAW_POST_DATA的内存密集型替代品,不需要任何特殊的php.ini指令。 php://input无法使用enctype="multipart/form-data"

更新:也许一些例子可能会有所帮助。

这是一个我称之为input.php的简单脚本:

<?php
  echo file_get_contents('php://input');
?>

使用cURL形成命令行:

curl -d "<xml><stuff>test</stuff></xml>" http://localhost/input.php

甚至设置内容类型:

curl -H "Content-Type: application/xml" -d ...

输出是(正如预期的那样):<xml><stuff>test</stuff></xml>

但是,如果您尝试上传文件,通常会将 enctype 设置为multipart/form-data(注意,不是{ {1}})你什么也得不到。

示例文件(content-type):

test.xml

使用cURL上传文件:

<xml> <stuff>test</stuff> </xml>

curl -F "name=@test.xml" http://localhost/input.php

两者都不会从curl -F "name=@test.xml;type=application/xml" http://localhost/input.php输出任何内容。但是,如果您修改脚本以查看input.php数组(或者您将正常上传到PHP),那么您将获得内容。

我会调用新脚本$_FILES

form.php

使用curl上传文件:

<?php echo file_get_contents($_FILES['name']['tmp_name']); ?>

将输出curl -F "name=@test.xml;type=application/xml" http://localhost/form.php

的内容

在这两种方法之间,您应该能够处理来自其他服务器的test.xml文件或数据。

第二次更新:以这种方式强制POST会阻止application/xml停止工作,但之后又会回到$_FILES工作:

php://input