Я пытаюсь загрузить файлы в облако разбора SDK, и технически это работает, но теперь я хочу ограничить максимальный размер файла, который пользователь сможет загрузить. Это код:
if ( isset( $_FILES['image'] ) ) {
// save file to Parse
$file = ParseFile::createFromData( file_get_contents( $_FILES['image']['tmp_name'] ), $_FILES['image']['name'] );
$file->save();
}
Если вы посмотрите на массив $_FILES
вы увидите, что есть кусок данных, переданных с каждым вызванным $_FILES['image']['size']
Если вы хотите ограничить размер на конце PHP, просто проверьте это поле
if ( isset( $_FILES['image'] ) ) {
if ( $_FILES['image']['size'] < 10000 ) {
// save file to Parse
$file = ParseFile::createFromData(
file_get_contents( $_FILES['image']['tmp_name'] ),
$_FILES['image']['name'] );
$file->save();
} else {
// return some sort of error
}
}
Просто помните, что $_FILES['image']['size']
записывается в BYTES.
Просто используйте оператор if и получите размер файла
$_FILES['image']['size']
//The size, in bytes, of the uploaded file.
что-то вроде
if($_FILES['image']['size'] < 10000000)
{
// save file to Parse
$file = ParseFile::createFromData( file_get_contents( $_FILES['image' ['tmp_name'] ), $_FILES['image']['name'] );
$file->save();
}
else
{
//Tell user that the file is too big, however you prefer
}
Материал на стороне клиента: прямо из документации PHP:
<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
URL-адрес в приведенном выше примере должен быть заменен и указывать на файл PHP.
Скрытое поле MAX_FILE_SIZE (измеренное в байтах) должно предшествовать поле ввода файла, а его значение - максимальный размер файла, принятый PHP. Этот элемент формы всегда должен использоваться, поскольку он избавляет пользователей от необходимости ждать передачи большого файла только для того, чтобы обнаружить, что он слишком велик, и передача не удалась. Имейте в виду: обмануть этот параметр на стороне браузера довольно просто, поэтому никогда не полагайтесь на файлы с большим размером, которые блокируются этой функцией. Это просто удобная функция для пользователей на клиентской стороне приложения. Однако настройки PHP (на стороне сервера) для максимального размера не могут быть обмануты.
Вы можете ограничить размер файла, прежде чем разбирать файл. Смотри ниже:
if ( isset( $_FILES['image'] ) ) {
$maxsize = 2097152; // 2MB
if(($_FILES['image']['size'] >= $maxsize) || ($_FILES["image"]["size"] == 0)) {
$message = 'File too large. File must be less than 2 megabytes.';
echo '<script type="text/javascript">alert("'.$message.'");</script>';
}
// save file to Parse
$file = ParseFile::createFromData( file_get_contents( $_FILES['image']['tmp_name'] ), $_FILES['image']['name'] );
$file->save();
}
попробуйте этот путь,
if(isset($_FILES['image']) {
if($_FILES['image']['size'] > 10485760) { //10 MB (size is also in bytes)
// File too big
} else {
$file = ParseFile::createFromData(
file_get_contents( $_FILES['image']['tmp_name'] ),
$_FILES['image']['name'] );
$file->save();
}
}