Действительно странное поведение PHP с загрузкой нескольких файлов, мой плохой? - PullRequest
0 голосов
/ 17 декабря 2011

Странное поведение здесь. Ток upload_max_filesize равен 2M. Что-то не так с моей установкой PHP?

<?php if(isset($_FILES['images'])) var_dump($_FILES['images']); ?>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    </head>
    <body>
        <form method="post" action="processupload.php"
            enctype="multipart/form-data">
            <input id="images[]" name="images[]" type="file" multiple="" />
            <input name="submit" type="submit" value="Upload" />
        </form>
    </body>
</html>

Тестирование показывает другое поведение:

  • Файл mp3 большого размера (12M): $_FILES['images'] не установлен
  • MP3-файл среднего размера (4M): $_FILES['images'] существует , но $_FILES['images']['type'] пуст и $_FILES['images']['size'] пуст

РЕДАКТИРОВАТЬ : нашел себя, но пока не могу ответить на свой вопрос:

  • В случае 12M файл $_FILES['images'] пуст, потому что сумма (размер) данных поста больше, чем post_max_size ( подробности здесь )
  • В случае файла 4M type и size пустые, поскольку размер загрузки на больше, чем upload_max_filesize

Ответы [ 3 ]

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

Вы можете просто проверить вывод

print_r($_FILES);

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

$_FILES['images']['size'][<index>]
$_FILES['images']['type'][<index>]
$_FILES['images']...
0 голосов
/ 18 декабря 2011

вы можете поместить эти строки в начало вашего кода, поскольку ваши глобальные настройки в PHP.ini ограничены, вы можете изменить это программным путем, используя строки ниже

ini_set('post_max_size', '25M');
ini_set('upload_max_filesize', '20M');

В то время как вы увеличиваете размер POSTданные, вы должны увеличить время выполнения скрипта, иначе это вызовет фатальную ошибку, вы можете увеличить время выполнения скрипта на

ini_set('max_execution_time', 0);

здесь я упомянул как 0, что не ограничено, в целях безопасности вы должны проверитьс вашим сервером и ограничить его несколькими секундами.

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

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

$_FILES[<current_index_for_file>]['images']['error']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...