Добавление цикла для загрузки нескольких файлов - PullRequest
0 голосов
/ 28 июля 2011

В настоящее время у меня есть этот скрипт загрузки, который отлично работает для одного изображения, но я надеюсь, что простое добавление цикла for позволит этому же сценарию обрабатывать несколько файлов.

<input type="file" size="20" name="filename">

Вот текущий скрипт, я просто не смог получить ни одного цикла for, который пытался работать.

<?php


    $filename = @basename($_FILES['filename']['name']);
    $tmp_filename = $_FILES['filename']['tmp_name'];


    if (!@move_uploaded_file($tmp_filename , DESTINATION_FOLDER . $dest_filename)) {
      $errors[] = "Could not upload file (6).";
      break;
    }
?>

Ответы [ 2 ]

1 голос
/ 19 сентября 2013

Однако подход, предложенный Марком Б., является хорошим решением (поскольку он также поддерживает более старые браузеры), существует более эффективный способ решения этой проблемы с момента введения HTML5.Используя тэг «множественный» (http://www.w3schools.com/tags/att_input_multiple.asp)) намного быстрее позволить пользователю выбрать несколько файлов одновременно. Единственное, что все же должно присутствовать - это [] в имени файла (превращение результата вмассив).

HTML-код:

<input type='file' name='filedata[]' multiple/>

PHP:

if(isset($_FILES)) print_r($_FILES);

Результат:

[filedata] => Array
        (
            [name] => Array
                (
                    [0] => images.jpg
                    [1] => logo-2013.jpg
                )
            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                )
            [tmp_name] => Array
                (
                    [0] => /tmp/phpWGKNMX
                    [1] => /tmp/phpfIHDpH
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )
            [size] => Array
                (
                    [0] => 2521
                    [1] => 76585
                )
        ) 
1 голос
/ 28 июля 2011

OK. теперь, когда оно сжато, чтобы загружать несколько файлов стандартным способом, отличным от HTML5, вы должны предоставить несколько файловых входов. Есть два способа сделать это. Использование записи массива PHP, чтобы каждый входной файл имел одинаковое имя и преобразовывался в массив файловых данных после загрузки, или давая каждому входному файлу уникальное имя:

версия массива:

<input type="file" name="filedata[]" /> 
<input type="file" name="filedata[]" /> 
<input type="file" name="filedata[]" /> 

версия с уникальным именем:

<input type="file" name="filedata1" />
<input type="file" name="filedata2" />
<input type="file" name="filedata3" />

PHP будет создавать массив $ _FILES по-разному в зависимости от используемой версии. Что касается массива, вы получите

$_FILES['filedata'] = array(
    'name' => array(
         0 => 'name of first file',
         1 => 'name of second file',
         2 => 'name of third file',
    ), 
    'size' => array(0 => 'size of first file', 1 => 'size of second file', etc...
etc...

Обратите внимание, что каждый из файлов получает собственную запись в соответствии с отдельными параметрами. Если вы выберете версию с уникальным именем, вы получите:

$_FILES['filedata1'] = array('name' => ..., 'size' => ... );
$_FILES['filedata2'] = array('name' => ..., 'size' => ... );
etc...

где каждый файл получает свою собственную выделенную запись в $ _FILES.

Независимо от того, с чем вы идете, все те же данные файла присутствуют, просто расположены по-разному, что влияет на то, как вы будете зацикливаться на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...