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

Searched a lot for this on StackOverflow and Google but can't seem to find an answer to this specific situation

I'm working with a client that sends me an XML file via PHP POST and this is the code I use:

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

For testing I also uploaded the XML file directly to my server and did it like this:

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

And then it works fine, it prints out the XML as an object.

The form I use to upload is like this:

<form action="http://app.site.com/upload" method="POST">
<input type="file" name="file" id="file ">
<input type="submit" value="upload">
</form>
dongpiao0731
dongpiao0731 $xml打印file=xmlfilename.xml,$xmlStripped为空
大约 8 年之前 回复
duanjianfu1398
duanjianfu1398 你在即时阶段得到了什么?第一种情况下$xml和$xmlStripped变量的内容是什么?
大约 8 年之前 回复

2个回答



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

但是,PHP会自动处理和解码RFC 1867数据。 你需要做的是(除了验证 $ _ FILES ['file'] ['tmp_name'] </ code>存在并且是一个字符串):</ p>

   $ xml = file_get_contents($ _ FILES ['file'] ['tmp_name']); 
</ code> </ pre>
</ div>

展开原文

原文

file_get_contents('php://input'); would normally give you the raw RFC 1867 data, not the file itself. The file data is enveloped inside this request data. In your case, it gives an empty string because PHP discards such data after processing it in order to save memory.

PHP, however, automatically processes and decodes the RFC 1867 data. What you have to do is (besides validating that $_FILES['file']['tmp_name'] exists and is a string):

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

douhunkuang8955
douhunkuang8955 谢谢!! 这固定了!
大约 8 年之前 回复



尝试使用</ p>

  $ _ FILES ['userfile']中的实际文件[  'tmp_name'] 
</ code> </ pre>

而不是</ p>

 “php:// input”
</ code > </ pre>

如果你坚持使用php://输入,试试这个黑客攻击 </ p>
</ div>

展开原文

原文

Try using the actual file from

$_FILES['userfile']['tmp_name'] 

instead of the

"php://input"

If you insist on using the php://input, try this hack

duanpao4172
duanpao4172 谢谢!! 这固定了!
大约 8 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问