Надоел медленный Интернет?  Попробуй Ускоритель!
Marketscore - сервис, практически вдвое увеличивающий в Интернете скорость работы вашего браузера. В среднем, скорость загрузки вэбстраниц с графикой и текстом ускоряется на 75%. 
Особенно заметен выигрыш, если у вас медленный модем или вы выходите в Интернет на маленьких скоростях (до 56 Кб/сек).
Подробнее...

реклама у нас

***

UPLOAD файлов. Взгляд со стороны HTML

Евгений Шубин

Данная статья является продолжением рассказа о применении HTML форм как средства придания интерактивности сайту (Izone № 364). В ней пойдет речь о том, как при помощи HTML формы организовать передачу файла с компьютера посетителя на Ваш сервер и какими средствами на стороне сервера принять и обработать этот файл.

Наверное, большинству читателей известно выражение DOWNLOAD, ведь если Вы читаете этот выпуск Izone, то по всей вероятности Вам пришлось загрузить его из сети. Ну а тот, кому это выражение было неизвестно, уже догадался, что DOWNLOAD - это загрузка файла с сервера на компьютер посетителя. Полной противоположностью DOWNLOAD, есть UPLOAD. UPLOAD - это кода посетитель сайта загружает (копирует) файл с своего компьютера на сервер, на котором расположен Ваш сайт. И так, с тем что, откуда и куда копируется, как будто разобрались. Теперь посмотрим, что необходимо сделать для организации UPLOADа на своем сайте. Основным средством, реализующим большинство наших идей на страницах сайта, является HTML. Решаемая задача не является исключением, и в HTML имеется специальная конструкция для реализации UPLOADа:

Если этот код вставить на одной из страничек сайта, то получим страничку с формой, содержащей: поле для ввода имени файла, кнопку "обзор" и кнопку "отправить". Посетителю сайта, пожелавшему отправить файл, необходимо нажать кнопку "обзор", что приведет к появлению диалогового окна позволяющего выбрать файл для отправки, далее ему необходимо выбрать файл и нажать кнопку отправить. Вследствие таких действий посетителя файл будет отправлен на сервер для последующей обработки скриптом, адрес сервера и имя скрипта указываются в поле значения атрибута ACTION тега FORM.

Рассмотрим подробнее приведенный код HTML формы.

Как и все формы, данная форма начинается с тега FORM, назначение атрибутов которого было приведено в предыдущей статье (Izone № 362). Единственно, чем отличается данный заголовок формы от обычных, это значение атрибута ENCTYPE указывающего механизм кодирования, вместо используемого по умолчанию /x-www-form-url-кодирования, необходимо задать /multipart/form-data -кодирование.

Второй особенностью является применение скрытого поля, задаваемого тегом INPUT с атрибутом типа TYPE="hidden". Тип hidden указывает на то, что данное поле скрытое и пользователь не будет его наблюдать. Значение value атрибута name="MAX_FILE_SIZE" задает максимально допустимый размер файла (в байтах) для передачи.

Третья и последняя особенность - это тэг INPUT с атрибутом типа TYPE="file" и атрибутом NAME="userfile", который создает поле ввода имени файла и кнопку "обзор" для вызова окна диалога выбора файла.

Теперь рассмотрим, что необходимо сделать, чтобы сервер принял и сохранил файл, отправленный посетителем сайта. Сразу замечу, что данный вопрос будет рассмотрено в общих чертах, так его рассмотрение требует знание основ CGI программирования, что выходит за рамки данной статьи.

И так, как было отмечено выше после выбора файла посетителем и нажатия кнопки "отправить" файл будет отправлен серверу, адрес которого указано в атрибуте ACTION. В результате файл будут сохранены в заданном по умолчанию временном каталоге сервера, но если он не будет перемещен или переименован, то в конце запроса принятый файл будет удален. Чтобы этого не произошло нам необходимо написать скрипт (программу) которая будет копировать данный файл с временного каталога в заданный нами каталог, а при необходимости выполнять определенные действия над ним. Если Вы внимательно рассмотрите значение атрибута ACTION, то заметите, что кроме url адреса сервера, данный атрибут содержит также путь к скрипту (/php/upload.php), на который и возложена задача по обработке данного файла. Я не буду приводить здесь пример возможного варианта данного скрипта, его Вы сможете найти во многих коллекциях в сети. А вот об одной довольно часто возникающей проблеме возникающей при реализации UPLOADа, я Вам поведаю.

При загрузке файлов таким способом на сервер, бинарные файлы, скорее всего, окажутся "битыми": фотографии не будут показываться, программы не будут запускаться, архивы не будут распаковываться. Текстовые файлы не повредятся. Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующую строку -

CharsetRecodeMultipartForms Off

Если у вас нет доступа к этому файлу, то попросите об этом админа сервера. Вот вроде бы и все.

Кого интересует первоисточник, по организации отправки файлов HTML формами, привожу ссылку на RFC1867 (http://www.ietf.org/rfc/rfc1867.txt).

Для тех кто не пожелает искать скрипт, могу предложить воспользоваться готовым скриптом, не требующим настройки на http://msform.hut.ru. Ежели Вам нужен специфический скрипт напишите мне и в меру своей возможности я Вам помогу.

Сайт автора: http://msform.hut.ru

 


Copyright © "Internet Zone"info@izcity.com 
Копирование и использование данных материалов разрешается только в случае указания на журнал "Internet Zone", как на источник получения информации. При этом во всех ссылках обязательно явное указание адреса вэб-сайта http://www.izcity.com/.
При наличии у копируемого материала авторов и источника информации - их также нужно указывать, наряду со ссылкой на нас. Подробнее условия использования материалов смотрите здесь.