如何使用输入类型=文件上传json文件 - php

我想在名为process.php的php脚本上发送JSON文件,将文件保存在文件夹中,然后将此文件发送到python脚本。
目前的html代码是这样的:

<form method="post" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple>
    <input type="submit" value="Upload File" name="submit">
</form>

而javascript代码是这样的:

 const url = 'process.php';
 const form = document.querySelector('form');

 form.addEventListener('submit', e => {
      e.preventDefault();
      const files = document.querySelector('[type=file]').files;
      const formData = new FormData();

      for (let i = 0; i < files.length; i++) {
          let file = files[i];
          formData.append('files[]', file);
       }

      fetch(url, {
          method: 'POST',
          body: formData
      }).then(response => {
           console.log(response);
     });
 });

最后,我的PHP是这样的:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['files'])) {
    $errors = [];
    $path = 'uploads/';
    $extensions = ['json'];

    $all_files = count($_FILES['files']['tmp_name']);

    for ($i = 0; $i < $all_files; $i++) {
        $file_name = $_FILES['files']['name'][$i];
        $file_tmp = $_FILES['files']['tmp_name'][$i];
        $file_type = $_FILES['files']['type'][$i];
        $file_size = $_FILES['files']['size'][$i];
        $file_ext = strtolower(end(explode('.', $_FILES['files']['name'][$i])));

        $file = $path . $file_name;

        if (!in_array($file_ext, $extensions)) {
            $errors[] = 'Extension not allowed: ' . $file_name . ' ' . $file_type;
        }

        if ($file_size > 2097152) {
            $errors[] = 'File size exceeds limit: ' . $file_name . ' ' . $file_type;
        }

        if (empty($errors)) {
            move_uploaded_file($file_tmp, $file);
        }

    }

    if ($errors) print_r($errors);
}

}

在PHP中,如果我尝试打印$ file_name,则文件名会正确打印,但是如果我尝试打印其他信息,则结果为空字符串,或者在$ file_size为0的情况下。
那么,怎么了?我是否必须在apache配置中设置一些内容以将文件上传到Web服务器上,或者我在代码中犯了一些错误?

参考方案

您需要使用文件的临时名称,函数is_uploaded_file()不接受客户端计算机上发送的文件名,请尝试以下操作:

 if (is_uploaded_file ($_FILES['upload_cont_file']['tmp_name'] ))
    echo 'file uploaded ';
 else
 echo 'error';

如何在PHP中设置get_file_contents的时间限制? - php

有时get_file_contents花费的时间太长,这会挂起整个脚本。有什么方法可以设置get_file_contents的超时限制,而无需修改脚本的最大执行时间?编辑:由于该文件不存在,因此花费了很长时间。我收到“无法打开流:HTTP请求失败!”错误。但这需要永远。 参考方案 通过使用timeout option创建上下文,似乎在PHP> 5.2.…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…