Можно ли узнать размер картинки до загрузки на сайт

Leonid

PHP? нет, не слышал...
У меня на сайте пользователи имеют возможность загружать фотографии, сервер их сам уменьшает потом до нужного размера. Но бывают вставляют огромные фотки, более 3000х2000 и сервер от этого виснет, сайт вылетает с interrnal server error. Проверка размера уже после загрузки не всегда помогает, т.к. сайт зависает еще при загрузке фотки, т.к. она более 5 Мб

Так вот, можно ли как-то еще до отправки формы узнать размер картинки?
 

tz-lom

Продвинутый новичок
Leonid
можно ограничить максимальный размер загружаемого файла,смотри php.ini
 

Leonid

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

установка на форме MAX_FILE_SIZE почему-то не помогает, я думал что из-за нее файл не будет грузиться на сайт, если он большего веса, но загрузка все равно почему-то идет...
 

craz

Нестандартное звание
Я не понимаю как вы хотите узнать вес/размер/ад что угодно какого угодна файла без загрузки на сервер...

Если получиться обязательно напишите в эту тему, очень интересно
 

Leonid

PHP? нет, не слышал...
Ну вроде как при загрузке файла через POST отправляются заголовки, в которых в часности размер файла указан. Или я что-то путаю?

А javaScript работает на том же клиентском компе, что и файл. Т.е. теоретически можно через него узнать размер файла, если конечно это принципиально не запрещено..
 

tz-lom

Продвинутый новичок
craz
вариант узнать - очень простой,читаете заголовки от браузера- там будет размер,после чего рвёте соединение,но на PHP такое не сваять,он сам этими заголовками рулит
я так понимаю у ТС задача не размер узнать,а чтобы сервак не веселился от больших POST запросов
Leonid
вариант с JS поддерживается только бетами хрома
вам нужно выставлять post_max_size и да,это можно прописывать и в .htaccess
 

craz

Нестандартное звание
Ну вроде как при загрузке файла через POST отправляются заголовки, в которых в часности размер файла указан. Или я что-то путаю?

А javaScript работает на том же клиентском компе, что и файл. Т.е. теоретически можно через него узнать размер файла, если конечно это принципиально не запрещено..
Вроде как не путаетесь только заголовки сервер получает ВМЕСТЕ с файлом, а не так что получил заголовки, чего-то подождал и начал загружать - не параллельная операция, а последовательная.

Работать то она работает вроде как но в поле формы вы получаете только путь до файла в вашей файловой системе и не более.

Теоретически я думаю можно сделать чтение блоками файла из tmp, то есть при загрузке читать файл... другим наверное процессом(демоном) - и если заголовок(именно файла пришел), найти там размер, и если размер больше нужного, то убить процесс загрузки...

Я вот как то так себе представляю это(это было бы логично), но я могу серьезно ошибаться - не все в жизни логично
 

craz

Нестандартное звание
craz
вариант узнать - очень простой,читаете заголовки от браузера- там будет размер,после чего рвёте соединение,но на PHP такое не сваять,он сам этими заголовками рулит
я так понимаю у ТС задача не размер узнать,а чтобы сервак не веселился от больших POST запросов
Leonid
вариант с JS поддерживается только бетами хрома
вам нужно выставлять post_max_size и да,это можно прописывать и в .htaccess
Как он написал в первом посте он хочет именно узнать, а не поставить лимит - но да ему поможет именно лимит.
 

tz-lom

Продвинутый новичок
craz
крупно ошибаетесь,для начала сервак не получает путь до файла в вашей ФС,только имя
сначала идут заголовки а потом кодированные по multipart блоки с параметрами (среди которых и файл)
правда я тут тоже не прав , в POST идёт content-length , но это размер всего POST включая заголовки
но в принципе если исходить из того что файл будет последним параметром (так ли это на самом деле ещё вопрос) то рассчитать размер файла можно и не принимая его
ещё момент - сервак обрывает соединение,а значит клиент получает ошибку,что не есть гуд (хотя может быть можно посылать ответ не дожидаясь загрузки? вот этого момента я не знаю)
 

Leonid

PHP? нет, не слышал...
вписал в .htaccess

php_value post_max_size 1M
php_value upload_max_filesize 1M

но все равно, файлы большего размер начинают грузиться...
 

Leonid

PHP? нет, не слышал...
phpinfo() при этом показывает для этих параметров 8М и 20М
 

craz

Нестандартное звание
craz
крупно ошибаетесь,для начала сервак не получает путь до файла в вашей ФС,только имя
Я не говорил что получает сервак, я говорил форма получает.
crazсначала идут заголовки а потом кодированные по multipart блоки с параметрами (среди которых и файл)
это понятно да. КО.
crazправда я тут тоже не прав , в POST идёт content-length , но это размер всего POST включая заголовки
тоже КО.
crazно в принципе если исходить из того что файл будет последним параметром (так ли это на самом деле ещё вопрос) то рассчитать размер файла можно и не принимая его
не встречал реализации...
craz
ещё момент - сервак обрывает соединение,а значит клиент получает ошибку,что не есть гуд (хотя может быть можно посылать ответ не дожидаясь загрузки? вот этого момента я не знаю)
я тоже(

P.s. КО - не вам лично, а в том смысле, что очевидно.
 

tz-lom

Продвинутый новичок
Leonid
значит не подхватились,ищите в чём проблема
 

Leonid

PHP? нет, не слышал...
техподдержка ответила -
php5 на вашем аккаунте стоит как cgi, поэтому менять параметрые для него
нельзя.
 

tz-lom

Продвинутый новичок
Leonid
ругайтесь с ТП , в частности почему не подхватываются параметры из .htaccess , всё это жалкие отмазы и хостинг за 120 рублей
 
Сверху