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

时间:2015-05-07 01:48:06

标签: php arrays image upload

我有以下代码:

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

我收到以下错误:

  

注意:未定义的索引:名称在   第30行/home/matthew/www/cart/admin/process.php

但是当我var_dump( $_FILES['add_prod_image']['name']);

我明白了:

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

我试图用一张图片进行测试,

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

这假设我的代码段中的HTML与您的类似。

这适用于具有多个

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

&#34;适当&#34;检索多个图像的方法是:

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类型。

&#13;
&#13;
<!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>
&#13;
&#13;
&#13;

在某些浏览器中没有HTML5文档类型可能会有效。 multiple是HTML5功能,需要HTML5 Doc Type。浏览器通常会修复错误,但最好不要出错。如果您使用HTML5功能,请使用HTML5 doc Type。

索引(键)无用时使用

foreach($array as $value){}。如果要使用索引(键)值,请使用: foreach($array as $key => $value){}=>key => value的PHP数组语法。