Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка файла на размер в объекте file

27K
19 октября 2009 года
alexmalyaev
35 / / 25.07.2008
Здравствуйте.
// Проверка на размер файла
if($_FILES['photo']['size'] != 0 AND $_FILES['photo']['size'] > $razmphoto * 1024)
{
$error = true;
$errort.= 'Размер файла не должен превышать'.$razmphoto.'кб.<br>';
}

Код работает, если файл весит не более 2 мб.
Подскажите пожалуйста, как проверять файлы с большими размерами.
244
19 октября 2009 года
UAS
2.0K / / 19.07.2006
Почитать в интернете про параметры загрузки файлов, устанавливаемые в php.ini
http://www.php.ru/manual/features.file-upload.html
Цитата:
Смежные замечания по конфигурации: Также ознакомьтесь с описанием директив file_uploads, upload_max_filesize, upload_tmp_dir, max_input_time и post_max_size конфигурационного файла php.ini

297
20 октября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: alexmalyaev
if($_FILES['photo']['size'] != 0 AND $_FILES['photo']['size'] > $razmphoto * 1024)

Код работает, если файл весит не более 2 мб.


Я что-то не понял смысл умножения на 1024. В $_FILES['photo']['size'] значение хранится в миллибайтах?

Ясно, что в данном случае ограничение в 2 мб вызвано максимальным значением 32-битного целого типа: 2 млн * 1024 => предел.
А если наоборот - не $razmphoto умножать, а $_FILES['photo']['size'] делить на 1024?

244
20 октября 2009 года
UAS
2.0K / / 19.07.2006
koodeer, вообще-то, max unsigned 2^32 = 4 294 967 295, max signed = 2 147 483 647. $_FILES['photo']['size'] - в байтах.
Так что нет никакого ограничения в 2мб, вызванным 32 битами. Так как этим числом можно закодировать, как максимум, размер в 4Гб, а уж никак 2Мб.
297
20 октября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: UAS
koodeer, вообще-то, max unsigned 2^32 = 4 294 967 295, max signed = 2 147 483 647. $_FILES['photo']['size'] - в байтах.
Так что нет никакого ограничения в 2мб, вызванным 32 битами. Так как этим числом можно закодировать, как максимум, размер в 4Гб, а уж никак 2Мб.


Да, конечно, я знаю, какие значения могут храниться в 32 битах. Отсюда и считал: размер 2 Мб ~ 2 000 000 * 1024 = max signed = 2 147 483 647. Потому и предлагаю не умножать, а делить.

12
20 октября 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: koodeer

А если наоборот - не $razmphoto умножать, а $_FILES['photo']['size'] делить на 1024?


Вообще то нужно наоборот. Либо $_FILES['photo']['size'] умножать на 1024, либо $razmphoto делить на 1024.

И в байтовом исчислении размерности меньше байта просто нет. Это минимально возможная величина.

366
21 октября 2009 года
int
668 / / 30.03.2005
Цитата:
2 Мб ~ 2 000 000 * 1024

РОФЛ РОФЛ! 2 Мб = 1024*1024*2. По-твоему 2 мегабайта - это два миллиарда? В миллибайтах считаешь?

Цитата:
Либо $_FILES['photo']['size'] умножать на 1024, либо $razmphoto делить на 1024.

Чегооооо??
Razmphoto равно у нас порядка 100, ['size'] порядка 100000, так что в оригинале всё правильно умножалось.

297
21 октября 2009 года
koodeer
1.2K / / 02.05.2009
Какое-то массовое взаимное непонимание...
Цитата: int
РОФЛ РОФЛ! 2 Мб = 1024*1024*2. По-твоему 2 мегабайта - это два миллиарда? В миллибайтах считаешь?


Да нет же! Я имею в виду, что если в $razmphoto значение от нуля до двух миллионов (размер файла до двух мегабайт), то при умножении на 1024 не происходит переполнения и скрипт работает нормально. А если значение в $razmphoto превысит 2 097 152, то при умножении на 1024 произведение превышает max signed = 2 147 483 647. Потому код, приведённый автором темы, и не работает с файлами более 2 Мб.

Цитата:
Razmphoto равно у нас порядка 100, ['size'] порядка 100000, так что в оригинале всё правильно умножалось.


Вот меня и интересует, откуда в ['size'] такие большие значения? По идее, и в $_FILES['photo']['size'] и в $razmphoto должны быть значения в байтах, и тогда можно обойтись без умножений/делений.

[color=gray]

Цитата: alekciy
И в байтовом исчислении размерности меньше байта просто нет. Это минимально возможная величина.

Ну, про миллибайты я писал шутя. Думал, понятно. Право слово, не ставить же после каждой фразы смайлики? :)[/color]

12
21 октября 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: koodeer

[color=gray] Ну, про миллибайты я писал шутя. Думал, понятно. Право слово, не ставить же после каждой фразы смайлики? :)[/color]


[color=gray]Учитывая количество времени прошедшее с момента регистрации, то стоит.

Когда такое пишет проверенный старичок, то понятно, что шутит. Когда же новичок, то не всегда это очевидно.[/color]

27K
22 октября 2009 года
alexmalyaev
35 / / 25.07.2008
переменная $razmphoto содержит у меня значение в кб.
Умножая на 1024 я получаю значение в байтах.
Проверка работает верно я 100 раз проверял.
А огрничение снимается в php.ini в строке upload_max_filesize = 2M.
Только на хосте я этого сделать не смогу.
Спасибо огоромное.
366
22 октября 2009 года
int
668 / / 30.03.2005
Цитата: koodeer
Я имею в виду, что если в $razmphoto значение от нуля до двух миллионов (размер файла до двух мегабайт)

Два мегабайта - это 2048, а не два миллиона. Два миллиона - это два гигабайта. Переменная содержит размер в килобайтах, не забывай.

Цитата:
откуда в ['size'] такие большие значения?

Потому что в байтах. А $razmphoto по условию в килобайтах.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог