Загрузка файлов на сервер

Загрузка файлов на сервер

Здесь будет рассмотрена загрузка файловна сервер по протоколу HTTP. Рассмотримдва варианта конфигурации PHP:

register_globals=On — все параметры передаваемые скрипту,  автоматически становятся глобальными переменными.register_globals=Off — параметры передаваемые скрипту заносятся в массивы $_GET, $_POST, $_FILES, $_COOKIE, …Upload файлов при register_globals=On

Напишем HTML форму для отправки файла насервер.

Содержание формы (файл upload.html):

Выберете файл:

После того как пользователь выбрал имяфайла и нажал кнопку Загрузить, PHPпомещает загружаемый файл во временнуюдиректорию указанную в параметре upload_tmp_dirфайла php.ini. В этой директории этот файлбудет храниться только во время запроса!После запроса PHP удалит этот временный файл.Поэтому загружаемый файл нужно куда-нибудьпереместить (если он вам понадобиться вдальнейшем). Явно удалить временный файлможно функцией unlink(string filename).

Здесь рассмотрим загрузку текстовогофайла и вывод его содержимого.

Скрипт обработки:

Пояснения:

$myfile — имя временного файла, в которомнаходятся загруженные данные;

Когда пользователь отправляет форму, PHPавтоматически определяет ещё несколькопеременных:

$myfile_name — имя файла на компьютерекомпьютере пользователя;

$myfile_type — MIME-тип файла.

$myfile_size — размер файла в байтах.

При загрузке текстовых файлов переменная$myfile_type = «text/plain», при загрузкеизображения gif переменная $myfile_type = «image/gif».

При register_globals=On можно пользоватьсямассивом $_FILES[].

 

Upload файлов при register_globals=Off

В этом случае PHP формирует массив $_FILES[]. Вэтом массиве храниться вся информация овсех загружаемых файлах. В нашем случаеструктура этого массива следующая:

$_FILES[«myfile»][«tmp_name»] — Имявременного файла
$_FILES[«myfile»][«name»] — Имя файла накомпьютере пользователя
$_FILES[«myfile»][«size»] — Размер файлав байтах
$_FILES[«myfile»][«type»] — MIME-тип файла
$_FILES[«myfile»][«error»] — код ошибки.

PHP код для обработки формы:

При загрузке можно проверятьразмер файла ($myfile_size) и если его размерпревышает требуемый, то вывод файла непроизводить.

Значения $_FILES[«myfile»][«error»]:

0 — ошибок не было, файлзагружен.
1 — размер загруженного файла превышаетразмер установленный параметром upload_max_filesizeв php.ini
2 — размер загруженного файла превышаетразмер установленный параметром MAX_FILE_SIZE вHTML форме.
3 — загружена только часть файла
4 — файл не был загружен (Пользователь вформе указал неверный путь к файлу).

Если вам необходимо сохранитьзагруженный файл, то это можно сделать спомощью функций:

copy ( string source, string dest);move_uploaded_file ( string filename, string destination);

Функция copy() копирует файл source в местоназначения dest.

Функция move_uploaded_file() перемещаетзагруженный файл filename в местоназначение указанное в параметре destination.

Ещё хочется отметить что приодновременной загрузке нескольких файлов т.е.когда HTML форма содержит:

массив $_FILES[] будет иметьследующую структуру:

$_FILES[«myfile1»][«tmp_name»] — Имявременного файла 1
$_FILES[«myfile1»][«name»] — Имя файла накомпьютере пользователя 1
$_FILES[«myfile1»][«size»] — Размер файла1 в байтах 
$_FILES[«myfile1»][«type»] — MIME-тип файла 1
$_FILES[«myfile1»][«error»] — код ошибкидля файла 1.

$_FILES[«myfile2»][«tmp_name»] — Имявременного файла 2
$_FILES[«myfile2»][«name»] — Имя файла накомпьютере пользователя 2
$_FILES[«myfile2»][«size»] — Размер файла2 в байтах 
$_FILES[«myfile2»][«type»] — MIME-тип файла 2
$_FILES[«myfile2»][«error»] — код ошибкидля файла 2.

$_FILES[«myfile3»][«tmp_name»] — Имявременного файла 3
$_FILES[«myfile3»][«name»] — Имя файла накомпьютере пользователя 3
$_FILES[«myfile3»][«size»] — Размер файла3 в байтах 
$_FILES[«myfile3»][«type»] — MIME-тип файла 3
$_FILES[«myfile3»][«error»] — код ошибкидля файла 3.

это пример для одновременной загрузкитрёх файлов.

Таким же образом можно загружать идвоичные файлы, например файлы картинок gif,jpeg и т.д. 

У меня все двоичные файлы загружались безповреждений (без глюков), но по словамДмитрия Бородина (http://php.spb.ru)возможно, что при загрузке двоичных файлову вас возникнут проблемы. Файлы будутзагружаться с перекодировкой.

Вот часть статьи «Какделать UPLOAD файлов на сервер и о возможныхглюках» сайта http://php.spb.ru,которая возможно поможет вам устранитьпричину проблемы:

ЦИТИРОВАНИЕ 

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

CharsetRecodeMultipartForms Off

Строку CharsetRecodeMultipartForms Off можно добавлять в разные места(один раз). Если вы совсем начинающий пользователь и не решите сами,куда писать эту строку, будьте аккуратнее при решении задачи методомтыка.

 

Мой блог находят по следующим фразам

Данная статья "Загрузка файлов на сервер" размещена на сайте Компьютерные сети и многоуровневая архитектура интернета (conlex.kz) в ознакомительных целях.

Уточнения, корректировки и обсуждения статьи "Загрузка файлов на сервер" - под данным текстом, в комментариях.

Ответственность, за все изменения, внесённые в систему по советам данной статьи, Вы берёте на себя.

Копирование статьи "Загрузка файлов на сервер", без указания ссылки на сайт первоисточника Компьютерные сети и многоуровневая архитектура интернета (conlex.kz), строго запрещено.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *