我如何正确引用 $_FILES 中的索引?

How do i properly refer to the indexes within $_FILES?

我有以下代码:

   foreach($_FILES['add_prod_image'] as &$image){ 
$target_file = $target_dir . basename($image["name"]); 
$uploadOk = 1; 
$imageFileType
    = pathinfo($target_file,PATHINFO_EXTENSION);

我收到以下错误:

Notice: Undefined index: name in /home/matthew/www/cart/admin/process.php on line 30

然而当我var_dump( $_FILES['add_prod_image']['name']);

我得到:

array(1) {
    [0]=> string(16) "plate with 5.jpg"
} 

我正在尝试仅使用一张图片进行测试,

输出是正确的,名称 tmp_name 和我需要的所有其他东西都在那里,但是一旦我尝试将它存储在变量中(例如 $image = $_FILES['add_prod_image']),我就开始获取索引错误...

有什么想法吗?

您缺少在我的示例代码中指定为 $index 的索引:

这是假设您在我的代码段中的 HTML 与您的相似。

这适用于具有多个

的输入
foreach ($_FILES["add_prod_image"]["name"] as $index=> $image) {
  $target_file = $target_dir . basename($image["name"][$index]);
}

检索多张图片的"proper"方法是:

foreach ($_FILES["add_prod_image"]["error"] as $key => $error) {
  if ($error == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES["add_prod_image"]["tmp_name"][$key];
    $target_file = $target_dir . basename($_FILES["add_prod_image"]["name"][$key]);
    move_uploaded_file($tmp_name, $target_file);
  }
}

array (
  'add_prod_image' => 
  array (
    'name' => 
    array (
      0 => 'image1.jpg',
      1 => 'image2gif',
      2 => 'image3.gif',
    ),
    'type' => 
    array (
      0 => 'image/jpeg',
      1 => 'image/gif',
      2 => 'image/gif',
    ),
    'tmp_name' => 
    array (
      0 => '/tmp/phpS3tMZx',
      1 => '/tmp/php31MQBf',
      2 => '/tmp/phpyHuUdX',
    ),
    'error' => 
    array (
      0 => 0,
      1 => 0,
      2 => 0,
    ),
    'size' => 
    array (
      0 => 535,
      1 => 506,
      2 => 507,
    ),
  ),
)
$['add_prod_image']['name'][$index]
$['add_prod_image']['type'][$index]
$['add_prod_image']['tmp_name'][$index]
$['add_prod_image']['size'][$index]

需要 HTML5 DOC 类型。

<!DOCTYPE html>
<html lang="en"><head><title>Test Bed</title></head></body>

<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="add_prod_image" multiple="multiple"/>
</form>

它可能在某些浏览器中没有 HTML5 文档类型时也能正常工作。 multiple 是一项 HTML5 功能,需要 HTML5 文档类型。浏览器通常会修复错误,但最好不要有错误。如果您使用 HTML5 功能,请使用 HTML5 文档类型。

foreach($array as $value){}在索引(key)没有用的时候使用。当您想使用索引(键)值时,请使用: foreach($array as $key => $value){}=>key => value 的 PHP 数组语法。