【问题标题】:"Undefined index" when uploading image using php使用php上传图像时的“未定义索引”
【发布时间】:2012-03-08 22:16:00
【问题描述】:

我有这个表格:

<form action="image_upload.php" method="post" enctype="multipart/form-data">
   Image 1: <input type="file" name="event_image" />
   <input type="submit" />
</form> 

还有这个php代码(image_upload.php):

print_r($_FILES);
if ((($_FILES["event_image"]["type"] == "image/jpeg")
|| ($_FILES["event_image"]["type"] == "image/pjpeg"))
&& ($_FILES["event_image"]["size"] < 200000))
  {
  if ($_FILES["event_image"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["event_image"]["error"] . "<br />";
    }
  else
    {
    if (file_exists("/images/events/" . $_FILES["event_image"]["name"]))
      {
      echo $_FILES["event_image"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["event_image"]["tmp_name"],
      "/images/events/" . $_FILES["event_image"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["event_image"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }

我不知道这是哪里出了问题,因为我以前也有过相同的代码。

我收到以下错误...

Array ([event_image] => Array ([name] => my_image.jpg [type] => image/jpeg [tmp_name] => /private/var/tmp/phpvIYmAZ [error] => 0 [size] => 48512 ) )

警告:move_uploaded_file(../../../images/events/my_image.jpg):无法打开流:第 25 行 /path/event_upload.php 中的权限被拒绝

警告:move_uploaded_file():无法在线将“/private/var/tmp/phpvIYmAZ”移动到/path/event_upload.php 中的“../../../images/events/my_image.jpg” 25 存储在:upload/my_image.jpg

注意:未定义索引:第 57 行 /path/event_upload.php 中的 event_image

【问题讨论】:

  • print_r($_FILES) 请在它的顶部。此外,在if 上,您应该添加条件isset($_FILES['event_image']) 作为要评估的第一个条件。如果这是错误的,你不应该评估其他任何东西,否则你会得到未定义的索引错误。
  • 图片在$_FILES中不存在,可能是因为一开始上传失败。检查是否设置了 $_POST['event_image'] 并验证您没有超过 max_upload_sizepost_max_size

标签: php image-upload


【解决方案1】:

$_FILES 数组在每个属性键下都有数字索引,以处理多次上传。

您必须使用$_FILES["event_image"]["type"][0]$_FILES["event_image"]["name"][0] 等对索引零进行硬编码。您必须在不使用数字索引的情况下更改使用$_FILES 的每一行。

注意:已编辑原始答案以修复数组中数字索引的正确位置。

【讨论】:

  • 这不是真的。 $_FILES 是一个关联数组,其名称字段映射为键:us.php.net/manual/en/reserved.variables.files.php
  • 你说得对,我搞砸了!多次上传的数字索引位于该数组的深处。考虑到正确的 $_FILES 结构,已编辑答案。
【解决方案2】:

好的...看来这是我本地计算机上的文件夹权限问题...只需要更改文件夹即可。

感谢所有建议。

【讨论】:

  • 您能否详细说明您对文件夹/文件权限做了什么来消除错误?
  • 就我而言,我使用的是 Dreamweaver。我右键单击文件窗口中的目录并选择“设置权限”,在那里我可以将权限更改为我需要的权限。
【解决方案3】:

让您知道 $_FILES 对象的样子,就在第 8 行之前,插入 echo "&lt;PRE&gt;" . print_r ($_FILES, true) . "&lt;/PRE&gt;";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多