PHP. Загрузка файлов на сервер
Автор статьи: Бардин Павел
Сайт Автора: proger.ru
E-mail Автора: bardin-pavel@yandex.ru
Дата публикации: 06.05.2005
Здесь будет рассмотрена загрузка файлов на сервер по протоколу HTTP. Рассмотрим два варианта конфигурации PHP: register_globals=On - все
параметры передаваемые скрипту, автоматически становятся глобальными
переменными. register_globals=Off - параметры передаваемые
скрипту заносятся в массивы $_GET, $_POST, $_FILES, $_COOKIE, ...
Upload файлов при register_globals=On <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).
<?php
// Загрузка файлов на сервер
// Если register_globals=On
print("Имя файла на нашем сервере (во время запроса): ".$myfile."<br>");
print("Имя файла на компьютере пользователя: ".$myfile_name."<br>");
print("MIME-тип файла: ".$myfile_type."<br>");
print("Размер файла: ".$myfile_size."<br><br>");
// Получаем содержимое файла
$fp = fopen($myfile,"r");
$content = fread($fp, filesize($myfile));
fclose($fp);
// Вывод содержимого файла
print($content);
?>
Пояснения: Upload файлов при register_globals=Off
<?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."<br>");
print("Имя файла на компьютере пользователя: ".$myfile_name."<br>");
print("MIME-тип файла: ".$myfile_type."<br>");
print("Размер файла: ".$myfile_size."<br><br>");
// Получаем содержимое файла
$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. <INPUT NAME="myfile1" TYPE="file"> <INPUT NAME="myfile2" TYPE="file"> <INPUT NAME="myfile3" TYPE="file"> массив $_FILES[] будет иметь следующую структуру:
Попробуйте аплодить таким способом на сервер бинарные файлы. Скорее всего файлы окажутся "битыми": фотки не будут показываться, программы не запустятся, архивы не распакуются. Текстовые файлы (почти точно) не повредятся. Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки. <Location /> CharsetRecodeMultipartForms Off </Location> Строку CharsetRecodeMultipartForms Off можно добавлять в разные места (один раз). Если вы совсем начинающий пользователь и не решите сами, куда писать эту строку, будьте аккуратнее при решении задачи методом тыка. |
|
"PHP. Загрузка файлов на сервер" Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2007. Перепечатка материалов разрешается, только после письменного разрешения автора (e-mail). При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны. |
|
|