Simplexml_load_string可以直接链接到XML文件,但不能与file_get_contents('php:// input')一起使用

时间:2012-05-08 11:24:00

标签: php xml post simplexml

在StackOverflow和Google上对此进行了大量搜索,但似乎无法找到这种特定情况的答案

我正在使用通过PHP POST向我发送XML文件的客户端,这是我使用的代码:

$xml = file_get_contents('php://input');
$xmlStripped = stripslashes($xml);
$xmlContent = simplexml_load_string($xmlStripped);
print_r($xmlContent);

为了进行测试,我还将XML文件直接上传到我的服务器,并按照以下方式执行:

$xml = file_get_contents('http://www.site.com/linktoxml.xml');
$xmlStripped = stripslashes($xml);
$xmlContent = simplexml_load_string($xmlStripped);
print_r($xmlContent);

然后它工作正常,它将XML打印为对象。

我用来上传的表单是这样的:

<form action="http://app.site.com/upload" method="POST">
<input type="file" name="file" id="file ">
<input type="submit" value="upload">
</form>

2 个答案:

答案 0 :(得分:0)

尝试使用

中的实际文件
$_FILES['userfile']['tmp_name'] 

而不是

"php://input"

如果您坚持使用php://输入,请尝试此hack

答案 1 :(得分:0)

file_get_contents('php://input');通常会为您提供原始RFC 1867数据,而不是文件本身。文件数据被包含在此请求数据中。在你的情况下,它给出一个空字符串,因为PHP在处理它之后丢弃这些数据以节省内存。

然而,PHP会自动处理和解码RFC 1867数据。你要做的是(除了验证$_FILES['file']['tmp_name']存在并且是一个字符串):

$xml = file_get_contents($_FILES['file']['tmp_name']);