array_keys()期望参数1为数组,给定null

时间:2016-12-31 19:02:10

标签: php arrays upload

我的代码问题一直困扰着我。我只是无法弄清楚导致此错误的原因。

所以,我在CMS中制作了一个上传表单。如果我上传9张照片,它可以正常工作。如果我上传超过9个文件,它会给我这个错误:

array_keys() expects parameter 1 to be array, null given in C:...upload.php on line 18

有人可以帮帮我吗?

代码:

$file_ary = reArrayFiles($_FILES['ufile']);
  //Reorganising the $_FILES:

  function reArrayFiles(&$file_post) {

      $file_ary = array();
      $file_count = count($file_post['name']);
      $file_keys = array_keys($file_post);

      for ($i=0; $i<$file_count; $i++) {
          foreach ($file_keys as $key) {
              $file_ary[$i][$key] = $file_post[$key][$i];
          }
      }

      return $file_ary;
  }


  foreach ($file_ary as $file) {
      $dir = "imgs/" . $last_fotoid . "/";

      if (!file_exists($dir)) {
        mkdir("imgs/" . $last_fotoid . "/");
      }


      $target_file = $dir . basename($file["name"]); 

      move_uploaded_file($file["tmp_name"], $target_file);

}

我的表格:

<form  method="post" action="upload.php" enctype="multipart/form-data">
          Select image to upload:<br>
          <input type="file" name="ufile[]" multiple>
          <input type="submit" value="Upload Image" name="submit">
</form> 

1 个答案:

答案 0 :(得分:0)

错误明确指出:colorscheme default所以有一种情况是你要调用 reArrayFiles()方法但是使用null参数而不是期望的数组(在这种情况下是文件) )。您可以在将$file_keys = array_keys($file_post);传递给方法之前检查$_FILES['ufile']的值来确认这一点。

当您访问包含表单的页面时,是否会发生这种情况?或者只有在您提交表格时才会发生?没有看到您的完整代码很难成为%100,但我认为您已经忘记执行代码仅当它是POST请求作为结果提交表格。

基本上确保只有在收到预期文件后才开始处理。