Проверка файла на размер в объекте file
// Проверка на размер файла
if($_FILES['photo']['size'] != 0 AND $_FILES['photo']['size'] > $razmphoto * 1024)
{
$error = true;
$errort.= 'Размер файла не должен превышать'.$razmphoto.'кб.<br>';
}
Код работает, если файл весит не более 2 мб.
Подскажите пожалуйста, как проверять файлы с большими размерами.
http://www.php.ru/manual/features.file-upload.html
Код работает, если файл весит не более 2 мб.
Я что-то не понял смысл умножения на 1024. В $_FILES['photo']['size'] значение хранится в миллибайтах?
Ясно, что в данном случае ограничение в 2 мб вызвано максимальным значением 32-битного целого типа: 2 млн * 1024 => предел.
А если наоборот - не $razmphoto умножать, а $_FILES['photo']['size'] делить на 1024?
Так что нет никакого ограничения в 2мб, вызванным 32 битами. Так как этим числом можно закодировать, как максимум, размер в 4Гб, а уж никак 2Мб.
Так что нет никакого ограничения в 2мб, вызванным 32 битами. Так как этим числом можно закодировать, как максимум, размер в 4Гб, а уж никак 2Мб.
Да, конечно, я знаю, какие значения могут храниться в 32 битах. Отсюда и считал: размер 2 Мб ~ 2 000 000 * 1024 = max signed = 2 147 483 647. Потому и предлагаю не умножать, а делить.
А если наоборот - не $razmphoto умножать, а $_FILES['photo']['size'] делить на 1024?
Вообще то нужно наоборот. Либо $_FILES['photo']['size'] умножать на 1024, либо $razmphoto делить на 1024.
И в байтовом исчислении размерности меньше байта просто нет. Это минимально возможная величина.
РОФЛ РОФЛ! 2 Мб = 1024*1024*2. По-твоему 2 мегабайта - это два миллиарда? В миллибайтах считаешь?
Чегооооо??
Razmphoto равно у нас порядка 100, ['size'] порядка 100000, так что в оригинале всё правильно умножалось.
Да нет же! Я имею в виду, что если в $razmphoto значение от нуля до двух миллионов (размер файла до двух мегабайт), то при умножении на 1024 не происходит переполнения и скрипт работает нормально. А если значение в $razmphoto превысит 2 097 152, то при умножении на 1024 произведение превышает max signed = 2 147 483 647. Потому код, приведённый автором темы, и не работает с файлами более 2 Мб.
Вот меня и интересует, откуда в ['size'] такие большие значения? По идее, и в $_FILES['photo']['size'] и в $razmphoto должны быть значения в байтах, и тогда можно обойтись без умножений/делений.
[color=gray]
Ну, про миллибайты я писал шутя. Думал, понятно. Право слово, не ставить же после каждой фразы смайлики? :)[/color]
[color=gray] Ну, про миллибайты я писал шутя. Думал, понятно. Право слово, не ставить же после каждой фразы смайлики? :)[/color]
[color=gray]Учитывая количество времени прошедшее с момента регистрации, то стоит.
Когда такое пишет проверенный старичок, то понятно, что шутит. Когда же новичок, то не всегда это очевидно.[/color]
Умножая на 1024 я получаю значение в байтах.
Проверка работает верно я 100 раз проверял.
А огрничение снимается в php.ini в строке upload_max_filesize = 2M.
Только на хосте я этого сделать не смогу.
Спасибо огоромное.
Два мегабайта - это 2048, а не два миллиона. Два миллиона - это два гигабайта. Переменная содержит размер в килобайтах, не забывай.
Потому что в байтах. А $razmphoto по условию в килобайтах.