PHP $ _FILES проблема загрузки нескольких файлов - PullRequest
6 голосов
/ 18 сентября 2011

У меня небольшая проблема с загрузкой нескольких файлов в PHP,

У меня есть эта HTML-форма:

<form method="post" action="upload.php" enctype="multipart/form-data">
    <input type="file" name="myfile[]"  />
    <input type="submit" />
</form>

и это upload.php:

<?php print_r( $_FILES ); ?> 

когда я отправляю файл, он показывает мне это:

 Array
(
[myfile] => Array
    (
        [name] => Array
            (
                [0] => Krw_Qe4QKmI.mp3
            )

        [type] => Array
            (
                [0] => 
            )

        [tmp_name] => Array
            (
                [0] => 
            )

        [error] => Array
            (
                [0] => 1
            )

        [size] => Array
            (
                [0] => 0
            )

    )

 )

пока все хорошо.

проблема начинается, когда я обновляю свою форму до этой:

<form method="post" action="upload.php" enctype="multipart/form-data">
    <input type="file" name="myfile[]"  />
    <input type="file" name="myfile[]"  />
    <input type="submit" />
</form>

Теперь, когда я отправляю 2 файла, он показывает мне следующее:

Array
(
)

Итак, в чем здесь проблема? спасибо, Мор.

Ответы [ 7 ]

2 голосов
/ 18 сентября 2011

Держу пари, что вы превысили post_max_size, а PHP просто проигнорировал загруженные файлы.

Это 8 МБ по умолчанию. Если вы попытаетесь загрузить один файл размером 5 МБ, все будет работать. Если вы попытаетесь загрузить 2 файла размером 5 МБ, он превысит 8 МБ, а PHP игнорирует опубликованные данные.

Попробуйте увеличить значение post_max_size в вашем php.ini.

1 голос
/ 11 декабря 2011

Здесь много предложений.Я попробую.Это основано на комментарии @Pekka.

Я вижу, вы тестируете mp3-файлы, которые, вероятно, превышают лимит загрузки PHP.Это потому, что в вашем первом примере у вас фактически есть код ошибки загрузки 1: The uploaded file exceeds the upload_max_filesize directive in php.ini..Так что даже ваша первая загрузка не сработала.При успешной загрузке всегда используется код ошибки 0.

Измените ваш php.ini с помощью upload_max_filesize = 10M (или 20M, или 300M; будьте внимательны с этим M - что означает мегабайт - как опущено, приносит много головной боли.

Я предлагаю протестировать файлы меньшего размера, так как я вижу, что у вас есть ограничение на загрузку 2M.

Далеечтение .

0 голосов
/ 11 декабря 2011

У меня была та же проблема. Все мои усилия были напрасны, но в конце концов я нашел довольно хорошую заметку в руководстве по PHP.Это просто, но подходит мне идеально ...

"Многократная загрузка может не работать, если вы используете таблицу для отображения ввода формы, когда <form> элемент внутри элемент <table>. В этом случае будет загружен только первый файл .

Поместите элемент <form> снаружи , чтобы получить егона работу. "

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

http://php.net/manual/en/features.file-upload.multiple.php

0 голосов
/ 27 сентября 2011

Чтобы сделать несколько файлов одновременно, попробуйте указать индекс, подобный этому:

<? For ( $count = 0; count < SOME_MAXIMUM; ++$count; ): ?>
<input type="file" name="myfile[<? Echo $count; ?>]"  />
<? endfor; ?>
0 голосов
/ 18 сентября 2011

Проблема - ваш атрибут name="myfile[]" в вашем элементе input.

Вы не можете использовать referer позже в своем файле на PHP, если у вас нет идентификатора для него.PHP-документация дает вам ту же подсказку: http://www.php.net/manual/en/features.file-upload.multiple.php

Можно загружать несколько файлов, используя разные имена для ввода.

Поэтому измените имя на «myfile1»и "myfile2" (или как-то лучше;)) должны решить вашу проблему.

0 голосов
/ 18 сентября 2011

Файл php.ini должен выглядеть примерно так:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 50M


; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

Измените значения upload_max_filesize, а затем перезапустите сервер

0 голосов
/ 18 сентября 2011

Проверьте настройки max_file_uploads - больше 1?

echo ini_get('max_file_uploads');
...