Заполненный $ _FILES не возвращает расширение файла - PullRequest
0 голосов
/ 22 ноября 2018

Я написал этот короткий скрипт для загрузки нескольких файлов, основываясь на старой теме из Stackoverflow: Как вы перебираете массив $ _FILES? (я не отвечал на него, так как ему 7 лет... Дайте мне знать, если я ошибся)

if(!empty($_FILES)) {
    $i = 0;
    foreach($_FILES['images']['tmp_name'] as $index => $tmpName) {
        if(!empty($tmpName) && is_uploaded_file($tmpName)) {
            $img_url = url_rewrite($intitule).'-' . time() . $i . '.'.strtolower(substr(strrchr($tmpName, '.'),1));
            $gallery = $gallery . '|' . $img_url;
            move_uploaded_file( $tmpName, $dir_upload . '/' . $img_url);
        }
        $i++;
    }
 }
 echo $gallery;

Итак, я отправляю несколько файлов в $ _FILES ['images'] и создаю уникальные имена перед загрузкой (используя time () + $я).Я никогда не получаю расширение файла, так как $ _FILES ['images'] ['name'] кажется пустым.Это не так, поскольку Var_dump возвращает полный массив со всем, что мне нужно:

array(1) {
  ["images"]=> array(5) { 
    ["name"]=> array(5) { 
      [0]=> string(13) "my-file-1.jpg" 
      [1]=> string(13) "my-file-2.jpg" 
      [2]=> string(13) "my-file-3.jpg" 
      [3]=> string(13) "my-file-4.jpg" 
      [4]=> string(13) "my-file-5.jpg" 
    }
    ["type"]=> array(5) { 
      [0]=> string(10) "image/jpeg" 
      [1]=> string(10) "image/jpeg" 
      [2]=> string(10) "image/jpeg" 
      [3]=> string(10) "image/jpeg" 
      [4]=> string(10) "image/jpeg" 
    }
    ["tmp_name"]=> array(5) { 
      [0]=> string(14) "/tmp/php1Nrgb4" 
      [1]=> string(14) "/tmp/phpnIJHZa" 
      [2]=> string(14) "/tmp/phpcAEf1c" 
      [3]=> string(14) "/tmp/phpbHgrVj" 
      [4]=> string(14) "/tmp/phpGu0FIp" 
    } 
    ["error"]=> array(5) { 
      [0]=> int(0) 
      [1]=> int(0) 
      [2]=> int(0) 
      [3]=> int(0) 
      [4]=> int(0) 
    } 
    ["size"]=> array(5) { 
      [0]=> int(262684) 
      [1]=> int(15644) 
      [2]=> int(32638) 
      [3]=> int(11897) 
      [4]=> int(103303) 
    }
  }
}

Мне также понадобится ['type'] для проверки файлов, но то же самое: я не могу вернуть массивcontent.

Видите ли вы что-то не так в этом скрипте?

1 Ответ

0 голосов
/ 22 ноября 2018

$_FILES['images']['tmp_name'] не содержит расширения, то есть временный файл PHP, созданный из загруженного файла.

Если вам нужно имя файла с расширением файла, который был загружен с ПК пользователя, вам нужно посмотреть $_FILES['images']['name']

Итак

foreach($_FILES['images']['tmp_name'] as $index => $tmpName) {
    if(!empty($tmpName) && is_uploaded_file($tmpName)) {
        $img_url = url_rewrite($intitule)
                    .'-' 
                    . time()
                    . $i 
                    . '.'
                    . strtolower(substr(strrchr($_FILES['images']['name'][$index], '.'),1));
                    // changed here -----------------------------^^^^^^^^^^^^^^^^
        $gallery = $gallery . '|' . $img_url;
        move_uploaded_file( $tmpName, $dir_upload . '/' . $img_url);
    }
    $i++;
}

Также выможет упростить тот набор функций, которые получают расширение до

        $img_url = url_rewrite($intitule)
                    .'-' 
                    . time()
                    . $i 
                    . '.'
                    . pathinfo($_FILES['images']['name'][$index], PATHINFO_EXTENSION);

        $gallery = $gallery . '|' . $img_url;
...