Ответ 1
Клиентская загрузка Загрузка Отмена
В современных браузерах (FF >= 3.6, Chrome >= 19.0, Opera >= 12.0 и багги на Safari) вы можете использовать API файлов HTML5. Когда значение входного файла изменяется, этот API позволит вам проверить, соответствует ли размер файла вашим требованиям. Конечно, это, а также MAX_FILE_SIZE
, можно подделать, поэтому всегда используйте проверку на стороне сервера.
<form method="post" enctype="multipart/form-data" action="upload.php">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
<script>
document.forms[0].addEventListener('submit', function( evt ) {
var file = document.getElementById('file').files[0];
if(file && file.size < 10485760) { // 10 MB (this size is in bytes)
//Submit form
} else {
//Prevent default and display error
evt.preventDefault();
}
}, false);
</script>
Отмена загрузки на стороне сервера
На стороне сервера невозможно остановить загрузку из PHP, поскольку после того, как PHP был вызван, загрузка уже завершена. Если вы пытаетесь сохранить пропускную способность, вы можете запретить загрузку со стороны сервера с настройкой ini upload_max_filesize
. Проблема с этим заключается в том, что это относится ко всем загрузкам, поэтому вам придется выбирать что-то либеральное, которое работает для всех ваших загрузок. Использование MAX_FILE_SIZE
обсуждалось в других ответах. Я предлагаю прочитать руководство по нему. Знайте, что он, наряду с любой другой клиентской стороной (включая проверку javascript), может быть изменен, поэтому вы всегда должны иметь валидацию на стороне сервера (PHP).
Проверка PHP
На стороне сервера вы должны подтвердить, что файл находится в пределах ограничений по размеру (потому что все до этой точки, за исключением установки INI, может быть изменено). Вы можете использовать массив $_FILES
, чтобы узнать размер загрузки. (Документы о содержимом $_FILES
можно найти ниже MAX_FILE_SIZE
docs)
upload.php
<?php
if(isset($_FILES['file']) {
if($_FILES['file']['size'] > 10485760) { //10 MB (size is also in bytes)
// File too big
} else {
// File within size restrictions
}
}