imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 07.08.2007, 12:36     # 1
GoodS
Newbie
 
Аватар для GoodS
 
Регистрация: 07.03.2006
Сообщения: 43

GoodS Путь к славе только начался
Проблемы с загрузкой файлов

Нужно сделать так чтобы пользователь не мог закачать файл больше чем установлено различными настройками сервера, в частности php: upload_max_filesize, post_max_size.

Форма закачки имеет стандартный вид:

Код:
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
значение MAX_FILE_SIZE я устанавливаю равным минимальному из upload_max_filesize, post_max_size.

Так вот, проблема в следующем:
Если размер файла больше чем значение поля MAX_FILE_SIZE в хтмл форме, то сначала файл грузится на сервер, при этом появляется предупреждение:
Код:
Warning: POST Content-Length of 8387342 bytes exceeds the limit of 5242880 bytes in Unknown on line 0
То есть первым проверяется размер пост запроса, а потом уже сравнивается значение поля MAX_FILE_SIZE и размера файла.

Я конечно понимаю что с точки зрения хттп протокола это правильно, но что? браузеры не смотрят чтоли значение этого поля?

Можно ли как нибудь сделать так чтобы на стороне клиента проверялся размер файла?
GoodS вне форума  
Старый 07.08.2007, 13:08     # 2
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
Цитата:
Сообщение от GoodS Посмотреть сообщение
Можно ли как нибудь сделать так чтобы на стороне клиента проверялся размер файла?
Нельзя. MAX_FILE_SIZE - придумка пхп-девелоперов, и, насколько мне известно, ни один из браузеров её не поддерживает. Кроме того, полагаться на данный лимит всё равно нельзя - я всегда могу модифицировать полученный от сервера HTML и убрать данный параметр, либо же вообще сам создать POST-запрос и отправить на сервер то, что мне нужно. Если нужен точный контроль - он должен производиться на сервере.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti

Последний раз редактировалось Saruman; 07.08.2007 в 13:11.
Saruman вне форума  
Старый 07.08.2007, 15:42     # 3
GoodS
Newbie
 
Аватар для GoodS
 
Регистрация: 07.03.2006
Сообщения: 43

GoodS Путь к славе только начался
Saruman, ты меня не понял. Мне нужно сделать так чтобы при закачке файла 100 мегабайт сообщение о том что лимит - 99, выскакивало до того как пользователь потратит кучу времени на его закачку!!! На серевере у меня все под контролем!!!!!!!

Последний раз редактировалось GoodS; 07.08.2007 в 15:45.
GoodS вне форума  
Старый 07.08.2007, 17:03     # 4
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
ок, сформулирую по другому - нет кросс-браузерного способа на стороне клиента контролировать размер закачиваемого файла. Javascript не предоставляет подобных возможностей, это возможно посредством ActiveX - но, ессно, результат будет IE-only (пример кода), либо же делать на флеше файл-аплоадер.

Если же тебе нужно кросс-браузерное решение - то его можно реализовать только на стороне сервера. В частности, при обнаружении параметра MAX_FILE_SIZE пхп проверяет переданный объём POST-запроса (из хедера content-length) на предмет превышения этого параметра, и если запрос (=закачиваемый файл) больше - то СРАЗУ выдаёт ошибку, не дожидаясь закачки всего файла, что тебе и нужно, как я понял. Ессно, для этого поле с MAX_FILE_SIZE должно идти до тела закачиваемого файла.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 07.08.2007, 21:48     # 5
GoodS
Newbie
 
Аватар для GoodS
 
Регистрация: 07.03.2006
Сообщения: 43

GoodS Путь к славе только начался
Мне нужно чтобы закачка вообще не начиналась когда файл слишком большой...
И ошибку превишение Content-Length'ом лимита пхп почему то выдвет после того как закачает файл на сервер!
Те насколько я понял нереально сделать так как я хочу?
GoodS вне форума  
Старый 08.08.2007, 00:38     # 6
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
Цитата:
Сообщение от GoodS Посмотреть сообщение
Мне нужно чтобы закачка вообще не начиналась когда файл слишком большой...
ActiveX, Flash. Чистым HTML/Javascript - невозможно.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 09.09.2007, 19:40     # 7
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Кстати, я тоже какое-то время назад столкнулся с этим, и для меня было удивительно и не понятно такое положение дел.


Saruman, понятно что на сервере все проверяется уже реально, и не для проверок это хотелось бы сделать, чтобы защититься от тех пользователей, которые будут сами формировать POST-запросы, а именно и только для удобства самого пользователя - тоесть чтобы не заставлять его ждать (тратить трафик, деньги) загрузки файла, который я (мой сервер) в итоге не примет!

Я понимаю что несекьюрно давать доступ к каким-либо операциям с файловой системой на JavaScript, или на запись в value <input type=file>, как это есть, все понимаю. Но почему нельзя тот же размер, вместе с именем файла, сделать для JavaScript доступным, для выбранного файла пользователя, вместе с его именем (не в Опере только. В ней мне так и не удалось получить имя, в остальных без проблем)?

Кстати, на счёт варианта, для IE и FireFox можно сделать на JavaScript разные реализации проверки, но при этом для FF надо будет скрипт подписывать, а для IE это будет использовать встроенный для таких целей ActiveX элемент для доступа к файловой системе пользователя. И в том и в другом случае, пользователю будет выдано предупреждение и запрос на разрешение небезопасной операции.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 03:12.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.