ityouth.ru Четверг, 2012-05-24, 3:19 PM
Привет Посетитель | RSS | Feedburner
Главная | Каталог статей | Регистрация | Вход
» Меню сайта

» Категории раздела
SYS | Программирование [2]
Web | Программирование [4]
XP | Vista | Server [14]
Linux | Unix | FreeBSD [2]
Веб мастер | БД [19]
Internet | LAN | Протоколы [14]
Хакинг | Защита [19]
Службы | Сервисы [5]
SEO | Продвижение [14]
Hardware | News [5]
Невероятно | Факты [2]
Другое | ETC [17]

» Теги
продвижение сайта конвертер смартфон Android защита Thunderbolt Samsung apple планшет Dell Thermaltake NVIDIA Cooler Master GIGABYTE хакинг SEO APU CES 2012 ультрабук Android 4.0 OCZ Sony Panasonic Buffalo USB 3.0 HP pny SSD Toshiba ноутбук вебмастеру Lenovo google Radeon HD 7900 OLED безопасность корпус монитор Ivy Bridge LG I-O Data nokia MSI his Radeon HD 7000 LTE GeForce GTX 680 антивирус Intel Z77 браузер Мультимедиа Fujitsu Intel AMD HTC asus Acer Android 2.3 Canon Galaxy

» Архив новостей
2005 год 2006 год 2007 год 2008 год 2009 год

» Категории файлов
Antivirus and Spyware [22]
Антивирусы и Антитрояны
Firewalls and Security [6]
Фаерволы и Защита
Cleaning and Tweaking [13]
Реестр и Чистка
Compression and Restore [7]
Архивация и Восстановление
File Transfer and P2P [4]
Передача фалов и Пиринг
CD and DVD Tools [8]
Работа с CD и DVD
Messaging and Chat [12]
Мессенжеры и Чаты
Browsers and Plugins [12]
Браузеры и Плагины
Desktop and Interface [3]
Рабочий стол и Интерфейс
Programming and Tools [4]
Программирование и Плагины
Hack and Frick [14]
Хакинг и Фрикинг
Audio and Video [25]
Аудио и Видео
Drivers [4]
Драйверы
Webmaster and Designer [27]
Вебмастер и Дизайнер
Bisness and Books [14]
Бизнес и Книги
Office and PDF [5]
Офис и PDF
Operation System [9]
Операционные Системы
Utilities and Other [19]
Утилиты и Прочее

» Категории статей
SYS | Программирование [2]
Web | Программирование [4]
XP | Vista | Server [14]
Linux | Unix | FreeBSD [2]
Веб мастер | БД [19]
Internet | LAN | Протоколы [14]
Хакинг | Защита [19]
Службы | Сервисы [5]
SEO | Продвижение [14]
Hardware | News [5]
Невероятно | Факты [2]
Другое | ETC [17]

» Фото

» --

Главная » Статьи » Веб мастер | БД

Загрузка файлов на сервер по протоколу HTTP
Конкретно

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

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

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

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

Содержание формы (файл upload.html):
<html>
<body>
<FORM ENCTYPE="multipart/form-data" ACTION="myup.php" METHOD=POST>
Выберете файл: <INPUT NAME="myfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Загрузить">
</FORM>
</body>
</html>

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

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

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

// Загрузка файлов на сервер
// Если register_globals=On

print("Имя файла на нашем сервере (во время запроса): ".$myfile."
");
print("Имя файла на компьютере пользователя: ".$myfile_name."
");
print("MIME-тип файла: ".$myfile_type."
");
print("Размер файла: ".$myfile_size."

");

// Получаем содержимое файла
$fp = fopen($myfile,"r");
$content = fread($fp, filesize($myfile));
fclose($fp);

// Вывод содержимого файла
print($content);
?>

Пояснения:

$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 код для обработки формы:

// Загрузка файлов на сервер
// Если register_globals=Off

// Если upload файла
if(isset($_FILES["myfile"]))
{
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];

// Если ошибок не было
if($error_flag == 0)
{
print("Имя файла на нашем сервере (во время запроса): ".$myfile."
");
print("Имя файла на компьютере пользователя: ".$myfile_name."
");
print("MIME-тип файла: ".$myfile_type."
");
print("Размер файла: ".$myfile_size."

");

// Получаем содержимое файла
$fp = fopen($myfile,"r");
$content = fread($fp, filesize($myfile));
fclose($fp);

// Вывод содержимого файла
print($content);

} // end of if 2
} // end of if 1
?>

При загрузке можно проверять размер файла ($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 форма содержит:

<INPUT NAME="myfile1" TYPE="file">
<INPUT NAME="myfile2" TYPE="file">
<INPUT NAME="myfile3" TYPE="file">

массив $_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) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки.

<Location />
CharsetRecodeMultipartForms Off
</Location>

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





Похожие материалы:


Материал входит в категории: Веб мастер | БД, Web | Программирование



Источник: http://webprofy.org.ru
Категория: Веб мастер | БД | Добавил: (2009-11-20) | Автор: Victor
Просмотров: 3201 | Рейтинг: 0.0/0
Всего комментариев: 1
0  
1 r-guliev   (2012-01-09 10:52 PM)
юзаем php.su там вся инфа по пхп

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
» Форма входа
Логин:
Пароль:

» Поиск


» Игры

» Окажи помощь

» Реклама

» Почта
Логин:
@ityouth.ru
Пароль:
Не удается войти в аккаунт?

» Подписаться на новости
Подписаться через RSS2Email

ИТ новости и ПО




» Всего материалов
Comments: 2522
Forum: 448/5147
Photo: 118
Blog: 18
News: 2092
Downloads: 193
Publisher: 98
Directory: 13534
Ad-board: 17
Games: 218
FAQ: 15
Guestbook: 147
Tests: 34

» Статьи

» Файлы

» Кнопка сайта

ИТ молодежь


» Статистика

Онлайн всего: 7
Гостей: 7
Пользователей: 0

» Корзина
Ваша корзина пуста



имхо | ссылки | киса

Copyright © 2008 [ ityouth.ru ]

Техническая поддержка: icq [263-504]
Пишите нам: [ Обратная связь ]
Используются технологии uCoz