PHP - определить первое изображение в массиве файлов ввода

0

У меня есть следующий код PHP для загрузки изображений и перемещения их в указанный каталог:

<?php

$i = 0;
foreach($_FILES['images']['name'] as $file) {

    $tmpFilePath = $_FILES['images']['tmp_name'][$i];

    $is_main = (($_FILES['images']['name'][0] == $file)) ? 'main' : $i;

    //Make sure we have a filepath
    if ($tmpFilePath != ""){

        $newFilePath = "./files/" . $is_main."_".$_FILES['images']['name'][$i];

        //Upload the file into the temp dir
        if(move_uploaded_file($tmpFilePath, $newFilePath)) {

        //Handle other code here

        }
    }
    $i++;
}

?>

Это мой ввод HTML:

<input type="file" name="images[]" accept="image/*" multiple />

Я использую плагин, в котором вы можете изменить порядок элементов. Ниже вы можете увидеть, что я могу успешно загружать изображения, и когда я делаю print_r ($ _ POST), вывод, который я получаю, следующий:

Array (
    [title] => 
    [images] => Array
        (
           [0] => 2.png <---- correct order (I switched file 1.png with file 2.png so it works)
           [1] => 1.png
           [2] => 3.png
           [3] => 4.png
        )

    [submit] => Submit
)

Но когда я загружаю файлы и переименовываю их (см. Код PHP в первом полевом коде), я устанавливаю переменную с именем $ is_main, если файл [0] ее следует называть "основным", а остальные не имеют большого значения. Как я могу это сделать?

Текущий вывод состоит в том, что первое выбранное мной изображение является основным, но после переупорядочения оно остается основным.

  • 0
    Почему бы не использовать свой итератор $i ? $is_main = $i==0 ? 'main' : $i;
  • 0
    @showdev Звучит логично, но это не сработает
Показать ещё 1 комментарий
Теги:
arrays
upload

2 ответа

1

используя ваш цикл $i UPDATE для цикла.

$tmpFilePath = $_FILES['images']['tmp_name'];
$is_main = $_FILES['images']['name'];
for ($i=0; $i < count($is_main); $i++) { 
    $tmp_image = $is_main[$i];
    $tmp_file = $tmpFilePath[$i];

    if($tmp_image == $is_main[0]){
        $ext = explode('.', $tmp_image); //getting an  extension
       $tmp_image = 'main.'.$ext[1]; // renaming the file
     }

    //Make sure we have a filepath
   if ($tmpFilePath != ""){

         $newFilePath = "./files/" . $tmp_image;

       //Upload the file into the temp dir
        if(move_uploaded_file($tmp_file, $newFilePath)) {

       //Handle other code here

       }
     }

    }
  • 0
    Спасибо за ваш ответ, но я все еще получаю тот же результат, первое изображение не называется "основным"
  • 0
    @Daniel проверьте мой обновленный ответ.
Показать ещё 4 комментария
0

В первый раз вам нужно взять контрольную сумму файла и сохранить ее на СЕССИИ, например:

session_start();
$_SESSION['main_file'] = md5_file($files['images'][0]);

И когда вы делаете повторный заказ или переименовываете или что-то еще, вам нужно прокручивать каждое изображение и видеть, совпадает ли он с md5 с тем, который вы сохранили на сеансе, если это произойдет, чем это основное изображение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню