2011-12-17 5 views
0

Странное поведение здесь. Текущий upload_max_filesize - 2M. Что-то не так с моей установкой PHP?Действительно странное поведение 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> 

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

  • Большой размер (12M) mp3 файл: $_FILES['images'] не выставиться
  • Средний размер (4M) mp3 файл: $_FILES['images'] существует но$_FILES['images']['type'] пусто и $_FILES['images']['size'] не заполнено

EDIT: нашел себя, но я не могу ответить на мой собственный вопрос еще:

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

ответ

0

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

$_FILES[<current_index_for_file>]['images']['error'] 
+0

Неправда. '$ _FILES [0] ['images']' пуст, даже если выбрано несколько файлов. – Polmonino

+0

$ _FILES ['images'] [] ['error']? – djot

+0

Извините, забудьте о ['error'], настроен правильно, мой плохой, Но странное поведение по типу и размеру все еще остается. – Polmonino

0

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

print_r($_FILES); 

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

$_FILES['images']['size'][<index>] 
$_FILES['images']['type'][<index>] 
$_FILES['images']... 
+0

Нашел решение, спасибо, в любом случае. – Polmonino

0

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

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

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

ini_set('max_execution_time', 0); 

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

+0

Совершенно неправильно. Сценарий выполняется ПОСЛЕ загрузки данных. По этой причине max_execution_time бесполезен. И post_max_size/upload_max_filesize не может быть изменен, поскольку данные уже загружены. Btw правильный anwser в моем первом сообщении. – Polmonino

+0

@Polmonino вы можете иметь эти коды как общие для обеих страниц (страница формы и страница действия), и вы должны знать, где разместить эти коды хорошо. не говорите полностью неправильно, прежде чем анализировать что-либо. cool buddy .. –

+0

Опять же, вы ошибаетесь. Неважно, где вы помещаете 'post_max_size' и' upload_max_filesize', потому что они являются PHP_INI_PERDIR (значит, вы не можете их изменить в сценариях). И 'max_execution_time' бесполезен, потому что скрипт выполняется только после завершения загрузки! – Polmonino

Смежные вопросы