Подтвердить что ты не робот

Загрузка HTML MAX_FILE_SIZE не работает

Мне интересно, как должно работать скрытое поле с именем MAX_UPLOAD_SIZE?

<form action="" method="post" enctype="multipart/form-data">
    <!-- in byes must preceed file field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" /> 
    <input type="file" name="upload" />

    <input type="submit" name="submit" value="Submit" />
</form>

Я загрузил файл 4MB +, но у меня не было предупреждения со стороны клиента (я не говорю о стороне сервера). Что он должен делать MAX_FILE_SIZE?

UPDATE

ОК, так что для PHP нужно ввести "мягкий" предел. Но есть ли разница между его использованием и проверкой чего-то типа $_FILES['upload']['size'] < 2000 в коде?

4b9b3361

Ответ 1

MAX_FILE_SIZE находится в байтах KB not. Вы были правы, это в байтах. Итак, для предела 4MB convert 4MB in bytes {1024 * (1024 * 4)} попробуйте:

<input type="hidden" name="MAX_FILE_SIZE" value="4194304" /> 

введите описание изображения здесь

Обновление 1

Как объясняют другие, вы никогда не получите предупреждение об этом. Он там просто накладывает мягкий лимит на стороне сервера.

Обновление 2

Чтобы ответить на ваш вопрос. Да, есть разница, вы НИКОГДА не доверяете пользователю. Если вы хотите всегда налагать ограничение, вы всегда должны проверять его размер. Не доверяйте тому, что делает MAX_FILE_SIZE, потому что он может быть изменен пользователем. Итак, да, вы должны проверить, чтобы он всегда был до или выше того размера, который вы хотите.

Разница в том, что если вы наложили MAX_FILE_SIZE на 2 МБ, и пользователь попытается загрузить файл размером 4 МБ, как только они достигнут примерно первой загрузки 2 МБ, передача завершится, и PHP перестанет принимать больше данных для этот файл. Он сообщит об ошибке в массиве файлов.

Ответ 2

Прежде чем начать, позвольте мне подчеркнуть, что размер файла должен быть проверен на серверная сторона. Если их не проверять на стороне сервера, злоумышленники могут переопределить ограничения на стороне клиента и загрузить огромные файлы на ваш сервер. НЕ ДОСТИГИТЕ ПОЛЬЗОВАТЕЛЯМ.

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

Код javascript ниже (протестирован в Firefox и Chrome), основанный на Matthew post, предупредит пользователя (хорошего, невинного) априори, чтобы загрузить большой файл, сохраняющий как трафик, так и время пользователя:

<form method="post" enctype="multipart/form-data" 
onsubmit="return checkSize(2097152)">    
<input type="file" id="upload" />
<input type="submit" />

<script type="text/javascript">
function checkSize(max_img_size)
{
    var input = document.getElementById("upload");
    // check for browser support (may need to be modified)
    if(input.files && input.files.length == 1)
    {           
        if (input.files[0].size > max_img_size) 
        {
            alert("The file must be less than " + (max_img_size/1024/1024) + "MB");
            return false;
        }
    }

    return true;
}
</script>

Ответ 3

Для всех, кто был удивлен, что некоторые файлы легко загружаются, а некоторые нет, это может быть проблемой размера. Я делюсь этим, поскольку я застрял в том, что мой PHP-код не загружал большие файлы, и я продолжал считать, что он не загружает файлы Excel. Итак, если вы используете PHP и хотите увеличить лимит загрузки файлов, перейдите в файл php.ini и внесите следующие изменения:

  • upload_max_filesize = 2M

чтобы изменить на

  • upload_max_filesize = 10M

  • post_max_size = 10M

или требуемый размер. Затем перезапустите сервер Apache, и загрузка начнет волшебно работать. Надеюсь, это поможет кому-то.

Ответ 4

На самом деле это не работает. Вы можете найти объяснение в одном из комментариев на странице руководства: http://www.php.net/manual/en/features.file-upload.php#74692

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

Ответ 5

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

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

Кажется, что встроенная поддержка загрузки в PHP - это использование этого значения поля.

Ответ 6

объяснение PHP.net о скрытом поле MAX_FILE_SIZE.

Скрытое поле MAX_FILE_SIZE (измеренное в байтах) должно предшествовать поле ввода файла, а его значение - максимальный размер файла, принятый PHP. Этот элемент формы всегда должен использоваться, поскольку он избавляет пользователей от необходимости ждать передачи большого файла только для того, чтобы обнаружить, что он слишком велик, и передача не удалась. Имейте в виду: обмануть этот параметр на стороне браузера довольно просто, поэтому никогда не полагайтесь на файлы с большим размером, которые блокируются этой функцией. Это просто удобная функция для пользователей на клиентской стороне приложения. Однако настройки PHP (на стороне сервера) для максимального размера не могут быть обмануты.

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

Ответ 7

В поле ввода скрытой формы клиента MAX_FILE_SIZE есть POINT.

php.ini может ограничить размер загруженного файла. Итак, пока ваш script соблюдает ограничение, наложенное php.ini, различные HTML-формы могут дополнительно ограничить размер загруженного файла. Таким образом, при загрузке видео форма может ограничивать * максимальный размер до 10 МБ, а при загрузке фотографий формы могут устанавливать ограничение в 1 Мб. И в то же время максимальный предел может быть установлен в php.ini, чтобы предположить, что все это возможно для 10mb.

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

  • HTML ничего не ограничивает. Он просто пересылает сервер всей переменной формы, включая MAX_FILE_SIZE и ее значение.

Надеюсь, что это помогло кому-то.