У меня есть следующий код 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] ее следует называть "основным", а остальные не имеют большого значения. Как я могу это сделать?
Текущий вывод состоит в том, что первое выбранное мной изображение является основным, но после переупорядочения оно остается основным.
используя ваш цикл $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
}
}
}
В первый раз вам нужно взять контрольную сумму файла и сохранить ее на СЕССИИ, например:
session_start();
$_SESSION['main_file'] = md5_file($files['images'][0]);
И когда вы делаете повторный заказ или переименовываете или что-то еще, вам нужно прокручивать каждое изображение и видеть, совпадает ли он с md5 с тем, который вы сохранили на сеансе, если это произойдет, чем это основное изображение.
$i
?$is_main = $i==0 ? 'main' : $i;