上传JSON文件或textarea输入

时间:2018-02-08 20:36:35

标签: php json

我试图拥有一个包含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.

0 个答案:

没有答案