我试图拥有一个包含textarea和文件上传字段的表单,我可以: a)将JSON数据复制并粘贴到文本区域,或 b)上传与文本文件相同的数据
提交后,我希望PHP脚本处理数据(无论是哪一个,textarea或文件上传,都不会。)我可以让textarea版本正常工作,但添加文件上传不会。工作。脚本接受上传(我可以转储$ _FILES并获取数据),但是当我尝试处理上传的数据(来自文件输入字段)时,我得到的结果是NULL。
<?php
if ((!empty($_POST['json'])) || (!empty($_FILES['file']))) {
echo "<pre>\n";
// The following DOES work when uncommented
// var_dump(json_decode($_POST['json']));
// This shows me the correct details, file name, tmp name
print_r($_FILES);
// This does not work. All I get is NULL
var_dump(json_decode(file_get_contents($_FILES['file']['tmp_name'])));
exit;
} else {
echo <<<_END
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>JSON Test</title>
</head>
<body>
<div style="text-align: center;">
<form method="post" enctype="multipart/form-data">
<textarea rows="10" cols="80" name="json"></textarea><br /><br />
<input type="file" name="file">
<input type="submit">
</form>
</div>
</body>
</html>
_END;
}
?>
我很确定它正盯着我,我似乎无法弄清楚它失败的原因。
UPDATE:当我将JSON字符串粘贴到textarea中时,我可以解析它而没有错误并获取数据。正如我所指出的,这是有效的。但是如果相同的字符串保存在文件中并上传,那就失败了。在比较数据时,当我在粘贴时检查字符串长度时,我得到2154字节。但当它作为文本文件上传时,我得到2157个字节。所以那里有无关的角色。
这是$ _FILES [&#39;文件&#39;] [&#39; tmp_name&#39;]的var_dump:
Array
(
[file] => Array
(
[name] => 20180208023303.json
[type] => application/json
[tmp_name] => /tmp/php32oEwb
[error] => 0
[size] => 2157
)
)
当我查看相同字符串粘贴的长度时,strlen($ _ POST [&#39; json&#39;])返回2154.