Четверг, 16.05.2024, 22:56
DigitalBox
Приветствую Вас Гость | RSS
Главная Загрузка файлов Регистрация Вход
Меню сайта

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



Зачастую необходимо обеспечить, чтобы пользователи могли удаленно загружать файпы на Web-узел. Например, на Web-узел вакансий необходимо загружать резюме, а в электронный фотоальбом — фотографии.


Использование форм для загрузки файлов

Для обеспечения загрузки файлов на Web-узел можно разработать специальную HTML-форму, которая может иметь следующий вид:

<form enctype="multipart/form-data"
          action="processfile.php" method="POST">
     <input type="hidden" name="MAX_FILE_SIZE" value="30000">
     <input type="file" name="user_file">
     <input type="submit" value="Загрузить файл">
</form>

Рассмотрим элементы формы более подробно:

  • Атрибут enctype дескриптора <form>. Для обеспечения корректной загрузки файла этот атрибут должен иметь значение multipart/form-data.
  • Скрытое поле, в котором указан максимальный размер загружаемого файла MAX_FILE_SIZE (в байтах). Пользователь не сможет загрузить файл, размер которого превышает MAX_FILE_SIZE. Однако перед использованием значения MAX_FILE_SIZE в конфигурационный файл php.ini нужно внести следующие изменения.
  1. upload_max_filesize. Значение MAX_FILE_SIZE не может превышать значение upload_max_filesize. Если необходимо загрузить файлы большего размера, следует изменить значение upload_max_filesize в файле php.ini. По умолчанию оно составляет 2 Мбайт.
  2. post_max_size. Эта переменная определяет максимальный объем информации, который можно передать с использованием метода POST. По умолчанию значение post_max_size равно 8 Мбайт, но его можно изменить.
  • Поле file, которое используется для удаленной загрузки файла.

Значение MAX_FILE_SIZE должно быть установлено перед удаленной загрузкой файла. Лишь в этом случае можно ограничить его размер.

При загрузке файла он сохраняется во временном каталоге. Поскольку после завершения выполнения сценария этот файл из временного каталога удаляется, следует скопировать его в другое место. С помощью функции phpinfо() можно определить, где расположен временный каталог. Его можно изменить с помощью директивы upload_tmp_dir файла php.ini. Если же в файле php.ini путь не указан, то используется временный каталог, установленный по умолчанию.


Получение информации о загружаемом файле

Кроме самого файла, вместе со значениями полей формы передается и информация о самом файле. Эта информация сохраняется во встроенном массиве $_FILES, который можно использовать для получения данных о каждом загружаемом файле. При этом доступ к информации осуществляется посредством имен полей. Общий формат извлечения информации о файле имеет вид:

$_FILES['имя-поля']['name']
$_FILES['имя-поля']['type']
$_FILES['имя-поля']['tmp_name']
$_FILES['имя-поля'] [ 'size']

Пусть, например, файл загружается с помощью следующего поля формы:

<input type="file" name="user_file">

Тогда при загрузке файла test.txt информацию о нем можно получить следующим образом:

$_FILES[user_file][name] = test.txt
$_FILES[user_file][type] = text/plain
$_FILES[user_file][tmp_name] = D:\WINNT\php92C.tmp
$_FILES[user_file][size] = 435

В массиве _FILES значение name определяет имя загружаемого файла; type — его тип; tmp_name— путь или имя временного файла; size — размер файла. Обратите внимание, что в поле name содержится только имя файла, а в поле tmp_name — полный путь и имя.

Если же размер файла оказался слишком большим, то в поле tmp_name будет содержаться значение попе, а в поле size — 0.

По умолчанию загружаемые файлы временно сохраняются в системном каталоге Windows (Windows — в системе Win98/XP и Winnt — в Win2000) и в каталоге /tmp систем Unix/Linux. Чтобы изменить временный каталог, нужно модифицировать файл php.ini. Для этого найдите в этом файле строку

;upload_tmp_dir =

Затем удалите в начале строки точку запятой и задайте требуемый путь. Например:

upload_tmp_dir = d:\tempfiles

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


Перемещение файлов в требуемый каталог

Для перемещения загруженных файлов из временного каталога в требуемое местоположе предназначена функция move_uploaded_file() со следующим общим синтаксисом:

move_uploaded_file(путь/имя_временного_файла, путь/имя_постоянного_файла);

В элементе tmp_name массива $_FILES хранится временное имя файла и его местоположение. Так что для перемещения файла, например в каталог с:\data\new_file.txt, можно воспользоваться функцией move_uploaded_file() следующим образом:

move_uploaded_file($_FILES['user_file'] ['tmp_name'], 'с:\data\new_file.txt');

Следует заметить, что каталог, в который перемещается файл (в приведенном примере с:\data\) , должен быть предварительно создан, поскольку функция move_upload_file() этого не делает.

С точки зрения обеспечения безопасности удаленная загрузка файлов может оказаться достаточно опасным делом. Эти файлы могут содержать опасное содержимое. Поэтому перед сохранением файла необходимо тщательно проверить его формат и размер. Иногда для обеспечения большей защищенности стоит даже изменить имя и расширение загруженного файла.


Совмещая все вместе

Пример полноценного сценария приведен в листинге А. Этот сценарий отображает форму для загрузки файлов изображений и позволяет сохранять эти файлы. Кроме того, после проверки файла и его успешной загрузки выводится соответствующее сообщение. Форма для загрузки изображений показана на рисунке ниже.

Листинг A. Сценарий для загрузки файлов с помощью формы с методом POST

‹?php
/* Имя сценария:    uploadFile.php
  * Описание:             загружает файл с помощью протокола HTTP
  *                                  и формы с методом POST.
  */

     if(!isset($_POST['Upload']))      #5
     {
          include("form_upload.inc");
     } # endif
     else                                                   #9
     {
          if($_FILES['pix']['tmp_name'] == "none")     #11
          {
               echo "<b>Файл не был загружен. Проверьте его
                                    размер. Размер файла должен быть менее 500K.<br>",
               include("form_upload.inc");
               exit();
          }
          if(!ereg("image", $_FILES['pix']['type']))      #16
          {
               echo "<b>Файл не является изображением.
                           Попробуйте загрузить другой файл.</b><br>";
               include("form_upload.inc");
               exit();
          }
          else      #23
          {
               $destination = 'c:\data'. "\\".$_FILES['pix']['name'];
               $temp_file = $_FILES['pix']['tmp_name'];
               move_uploaded_file($temp_file, $destination);
               echo "<р><b>Файл успешно загружен:</b>
                          {$_FILES['pix']['name']}
                           ({$_FILES['pix']['size']})</p>";
          } 
     }
?›

В листинге A заслуживают внимания следующие строки:

  • В строке 5 с использованием условного оператора if проверяется, были ли значения из формы переданы пользователем. Если нет, исходная форма отображается путем включения файла, приведенного в листинге В.
  • Строка 9. В блоке else обрабатывается файл и вся полученная информация.
  • В строке 11 с использованием оператора if проверяется успешность загрузки файла. Если файл не был загружен, выводится соответствующее сообщение об ошибке и исходная форма отображается повторно.
  • В строке 16 проверяется корректность формата файла. Если загружаемый файл не является изображением, выводится соответствующее сообщение об ошибке и исходная форма отображается заново.
  • Строка 23. В блоке else (т.е. при успешной загрузке) загруженный файл перемещается в требуемое местоположение и выводится соответствующее сообщение.

В листинге В приведен код включаемого файла, который обеспечивает отображение исходной формы для загрузки изображений:

<!-- Имя сценария:      form_upload.inc
        Описание:               отображает форму для загрузки файла -->
<html>
<head><title>3arpyзкa фaйлa</title></head>
<body>
<оl><li>Введите имя изображения, которое вы
                 хотите поместить в архив, или воспользуйтесь
                 кнопкой Обзор, чтобы указать его
                 местоположение.</li>
         <li>После появления пути к файлу в
                 текстовом поле щелкните на кнопке Загрузить
                 изображение.</li>
</ol>
<div align="center"><hr>
<form enctype="multipart/form-data"
             action="uploadFile.php" method="POST">
     <input type="hidden" name="MAX_FILE_SIZE" value="500000">
     <input type="file" name="pix" size="60">
     <p><input type="submit" name= "Upload"
                value="Загрузить изображение">
</form>
</body></html>

Обратите внимание, что в этом файле содержится только HTML-код.

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

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

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz