Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Загрузка файла на HTTP-сервер (размер файла)


Автор: СтудентИзРоссии 31.3.2007, 23:44
Добрый вечер!

Используется стандартная HTML-форма для загрузки файла на HTTP-сервер:
http://php.net/manual/en/features.file-upload.php

Возможно ли без полной загрузки файла на HTTP-сервер получить размер загружаемого файла?

Автор: BuShaRt 1.4.2007, 19:02
http://phpclub.ru/detail/article/upload
а именно:
$_FILES['userfile']['size'] - размер загруженного файла;

Автор: Golda 1.4.2007, 19:19
Не уверена. Но вот ограничить максимальный размер загружаемого файла легко. Он задается зарезервированным параметром MAX_FILE_SIZE.
Код

<input type="hidden" name="MAX_FILE_SIZE" value="30000" />


BuShaRt, насколько я понимаю, у JS нет доступа к файловой системе. Соответственно, нет возможности узнать размер какого-либо файла. Более того, на уровне JS из соображений безопасности нет даже доступа к value поля типа file. Что Вы имели в виду? (Надеюсь, этот вопрос не будет расценен как offtopic. Не увидела возможности задать его по другому).  

Автор: skyboy 1.4.2007, 20:04
Цитата(СтудентИзРоссии @  31.3.2007,  22:44 Найти цитируемый пост)
Возможно ли без полной загрузки файла на HTTP-сервер получить размер загружаемого файла? 

специфика такова, что РНР-скрипт(указанный в ACTI|ON для формы) запускается уже после загрузки файла на сервер. потому без полной загрузки - только если написать модуль для Apache(или какой у вас там Web-сервер используется). можешь зайти в форум по ActionScript и поинтересоваться там о подобном механизме.

Автор: СтудентИзРоссии 7.4.2007, 19:02
BuShaRt, к сожалению, массив $_FILES можно получить только
после полной загрузки файла на сервер.

Golda, к сожалению, этот метод не безопасный.

skyboy, спасибо за совет, попробуем. На http://rapidshare.com
и http://ifolder.ru каким-то образом эту задачу решили.

Автор: capitan 11.4.2007, 16:12
Что значит полная загрузка на сервер? При uploade  файла, передаётся массив $_FILES. В котором есть все данные о файле. Дальше используем например функцию move_uploaded_file или copy/ Кому что нравиться и файл загружается на сервер. Перед вызовом этих функций можно прочитать массив и если что-то не устраивает,- файл не грузить. Так например идёт проверка на тип , размер  аватара при загрузки его на форум.  Поясните что значит полная и неполная загрузка?

Автор: skyboy 11.4.2007, 17:06
Цитата(capitan @  11.4.2007,  15:12 Найти цитируемый пост)
Поясните что значит полная и неполная загрузка? 

а значит это, что файл, даже до того, как ты его делаешь move/copy_uploaded_file, уже загружен на сервер в папку tmp_dir. И, если файл занимает, скажем, 100 Мб, был загружен не за одну секунду. В такой ситуации очень обидно фильтровать файлы "пост фактум" - было бы хорошо(автору треда) определять размер файла ДО того, как файл будет загружен на сервер и появится в папке tmp_dir и массиве $_FILES ;-)

Автор: mishaSL 11.4.2007, 17:25
Цитата(capitan @  11.4.2007,  16:12 Найти цитируемый пост)
При uploade  файла, передаётся массив $_FILES

массив $_FILES - создается после загрузки файла на сервер.
Цитата(capitan @  11.4.2007,  16:12 Найти цитируемый пост)
Дальше используем например функцию move_uploaded_file или copy

Эти функции работают с уже загруженными файлами.

Цитата(СтудентИзРоссии @  31.3.2007,  23:44 Найти цитируемый пост)
Возможно ли без полной загрузки файла на HTTP-сервер получить размер загружаемого файла? 

Получить размер файла до загрузки на чистом PHP(без использования других языков) на сколько мне известо нельзя. Можно установить максимальный размер загружаемого файла - директива upload_max_filesize, если файл больше чем установленный размер, то информация об этом будет в $_FILES['userfile']['error'] (подробнее http://ru2.php.net/manual/ru/features.file-upload.errors.php)

Автор: СтудентИзРоссии 3.6.2007, 20:58
Цитата(skyboy @ 1.4.2007,  20:04)
Цитата(СтудентИзРоссии @  31.3.2007,  22:44 Найти цитируемый пост)
Возможно ли без полной загрузки файла на HTTP-сервер получить размер загружаемого файла? 

специфика такова, что РНР-скрипт(указанный в ACTI|ON для формы) запускается уже после загрузки файла на сервер. потому без полной загрузки - только если написать модуль для Apache(или какой у вас там Web-сервер используется). можешь зайти в форум по ActionScript и поинтересоваться там о подобном механизме.

Нашли решение для Apache 2.X - mod_uploader: http://acapulco.dyndns.org/mod_uploader/

Может кто-то знает, что-нибудь подобное для Apache 1.3.X?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)