Как загрузить на сервер несколько файлов?
<input type="file" name="upfile[]" multiple>
<?php
if (isset($_FILES["upfile"]["name"]) && @$_FILES["upfile"]["name"]!='') {
$count_files = count($_FILES['upfile']['name']);
for($img_count=1;$i<$count_files;$img_count++) {
$tmp_name = $_FILES['upfile']["tmp_name"][$img_count];
$file = 'picture'.$img_count.'.jpg';
if (@move_uploaded_file($tmp_name, $_SERVER['DOCUMENT_ROOT']."/images/$file")){
$img_count++;
}
}
}
?>
Пытаюсь загрузить на сайт несколько файлов в цикле, страница уходит в долгую загрузку, и потом вылетает по таймауту скрипта. Что я делаю не так? Спасибо! UPD Причём, если убрать multiple, и грузить одну картинку без цикла, то всё нормально работает. В цикле же даже одна картинка не загружается.
Ответы (1 шт):
Проще всего сделать загрузку нескольких файлов, если у каждого инпута будет уникальное имя. Например
<input type="file" name="file1">
<input type="file" name="file2">
<input type="file" name="file3">
В этом случае перебрать полученный массив можно простейшим циклом
foreach ($_FILES as $file) {
// тут обрабатываем как единственный файл
// Только обращаемся не к $_FILES['userfile'] используем $file
// например $file['tmp_name'] и так далее
}
Но с точки зрения фронтенда удобнее когда у всех файлов одно и то же имя, например
<input type="file" name="upfile[]" multiple>
В этом случае каждый элемент массива $_FILES превращается в массив. И перебирать надо один из них, используя полученный индекс для обращения к остальным массивам
foreach($_FILES['upfile']['error'] as $i => $error) {
if ($error !== UPLOAD_ERR_OK) {
// сделать что-то ужасное
die;
}
$tmp_name = $_FILES['upfile']["tmp_name"][$i];
$orig_name = $_FILES['upfile']["name"][$i];
$file = 'picture'.$img_count.'.jpg';
move_uploaded_file($tmp_name, $_SERVER['DOCUMENT_ROOT']."/images/$file");
}
Если файлы вообще не загружаются, то проверить значения настроек
upload_max_filesize
post_max_size