Несколько загрузок не работают должным образом - PullRequest
1 голос
/ 18 мая 2011

У меня есть форма, которая позволяет пользователю добавлять столько форм загрузки, сколько они хотят. Итак, изначально есть один, и вы можете нажать «Добавить еще», чтобы ... добавить больше. Имеет смысл. Каждый вход выглядит так:

<input type="file" name="userfile[]" id="userfile[]">

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

$dir = random_string('alnum', 10);
mkdir('/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir);

$this->load->library('upload');
$error = 0;

for ($i = 0; $i < count($_FILES['userfile']['name']); $i++):
    $_FILES['userfile']['name']                = $_FILES['userfile']['name'][$i];
    $_FILES['userfile']['type']                = $_FILES['userfile']['type'][$i];
    $_FILES['userfile']['tmp_name']        = $_FILES['userfile']['tmp_name'][$i];
    $_FILES['userfile']['error']            = $_FILES['userfile']['error'][$i];
    $_FILES['userfile']['size']                = $_FILES['userfile']['size'][$i];

    $config['upload_path']                         = '/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir;
    $config['allowed_types']                    = 'jpg|jpeg|gif|png';

    $this->upload->initialize($config);

    if ($this->upload->do_upload('userfile')):
        $error += 0;
    else:
        $error += 1;
    endif;
endfor;

if ($error > 0):
    $error = array('error' => $this->upload->display_errors());
    print_r($error);
else:
    $data = array('upload_data' => $this->upload->data());
    print_r($data);
endif;

Если я добавлю echo count($_FILES['userfile']['name']; перед циклом for, он правильно отобразит количество файлов. Если я использую его после цикла for, он неправильно отображает 1.

Есть идеи, что я здесь не так делаю?

Ответы [ 3 ]

2 голосов
/ 18 мая 2011

Мое лучшее предположение заключается в том, что после входа в цикл вы перезаписываете значения, используя следующие строки:

$_FILES['userfile']['name']                = $_FILES['userfile']['name'][$i];
$_FILES['userfile']['type']                = $_FILES['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']        = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']            = $_FILES['userfile']['error'][$i];
$_FILES['userfile']['size']                = $_FILES['userfile']['size'][$i];

Попробуйте изменить это на что-то вроде этого:

$_FILES['userfile_tmp']['name']                = $_FILES['userfile']['name'][$i];
$_FILES['userfile_tmp']['type']                = $_FILES['userfile']['type'][$i];
$_FILES['userfile_tmp']['tmp_name']        = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile_tmp']['error']            = $_FILES['userfile']['error'][$i];
$_FILES['userfile_tmp']['size']                = $_FILES['userfile']['size'][$i];

А затем с помощью if ($this->upload->do_upload('userfile_tmp')):

1 голос
/ 18 мая 2011

Я столкнулся с этой проблемой несколько месяцев назад и расширил базовую библиотеку, чтобы разрешить либо отдельный файл, либо также массив файлов (как вы этого хотите) и соответственно отображать ошибки и т. Д.

Кажется, это работает для того, для чего я его использовал, не могу гарантировать 100%, но посмотрите, помогает ли это вообще, я думаю, что я прокомментировал различные разделы с изменениями, которые я сделал:

https://github.com/tgriesser/Codeigniter-Libraries/blob/master/MY_Upload.php

0 голосов
/ 18 мая 2011

Проблема в следующих строках:

$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i];

Вы перезаписываете свою переменную, массив, другим значением, строку.

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