php не загружает несколько файлов

287
02 января 2018, 16:10

Есть вот такой код:

<?php
foreach ($_POST as $index => $value) {
    $$index = $value;
}

$uploaddir = './files/';
for ($i=0; $i<=count($_FILES); $i++) {
    $uploadFile = $uploadDir.basename($_FILES['userFile']['name'][$i]);
    if (copy($_FILES['userFile']['tmp_name'][$i], $uploadFile))
    {
    echo "<h3>Файл успешно загружен на сервер</h3>";
    }
    else { echo "<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>";}
}
?>

<form action="mce.php" method="post" enctype="multipart/form-data">
    <input name="userFile[]" type="file" multiple><br>
    <input type="submit" value="Загрузить">
</form>

По идее должно загружать много файлов, но больше двух файлов не грузит. Я понимаю, что какая то ошибка в цикле, но что то не могу сообразить как исправить. Что не так?

Answer 1

В вашем примере count($_FILES) всегда будет единичкой, так как $_FILES['userfile'] будет содержать подмассив информации о нескольких файлах, а не сам $_FILES.

Также ошибка в этой строке $i < count($_FILES['userFile']['name'], у вас стояло <=, но надо ставить просто знак меньше, так как отчет от нуля.

Ну и применяйте move_uploaded_file, по крайней мере по этому пути пошли разработчики.

<form action="uploadfiles.php" enctype="multipart/form-data" method="post">
    <input type="file" name="userFile[]" multiple>
    <input type="submit" name="submit">
</form>
<?php
if (isset($_POST['submit'])) {
    $uploaddir = __DIR__ . '/files/';
    for ($i = 0; $i < count($_FILES['userFile']['name']); $i++) {
        $uploadFile = $uploaddir . basename($_FILES['userFile']['name'][$i]);
        echo $uploaddir . basename($_FILES['userFile']['name'][$i]);
        if (move_uploaded_file($_FILES['userFile']['tmp_name'][$i], $uploadFile)) {
            echo "<h3>Файл успешно загружен на сервер</h3>";
        } else {
            echo "<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>";
        }
    }
}
READ ALSO
Mirror драйвера

Mirror драйвера

Задача состоит в получении изменённых областей экрана с большой скоростьюНасколько известно мне, для этого используются mirror драйвера

224
SFML C++ gif анимация

SFML C++ gif анимация

Доброго времени суток! С принципом создания анимации из изображения я знаком, а есть способы использовать gif для воспроизведения анимации...

360
Ввод массива неизвестной длины

Ввод массива неизвестной длины

В строку вводятся n чисел, n неизвестноКак лучше реализовать подобный ввод массива?

231
Неожиданное потребление памяти

Неожиданное потребление памяти

Пишу алгоритм бинарной сортировки (в целях обучения)Компилятор - MinGW-w64 с флагом оптимизации -o0

276