Оглавление

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

Загрузка файлов на сервер осуществляется с помощью формы, у которой параметр enctype  равен multipart/form-data. Создадим файл file_load.html  с содержимым, приведенным в листинге 48.

 
Листинг 48. Содержимое файла file_load.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>Загрузка файлов</title>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
 <h1>Загрузка файлов</h1>
 <form action="file.php" method="POST" enctype="multipart/form-data">
  <div>
    <input type="file" name="file_name" size="20">
    <input type="submit" value="Загрузить">
  </div>
 </form>
</body>
</html>

 

 

Далее создаем файл file.php и добавляем в него код, представленный в листинге 49.

 

 Листинг 49. Содержимое файла file.php

<?php
if (isset($_FILES['file_name'])) {
   if ($_FILES['file_name']['error'] == 0 && 
      $_FILES['file_name']['size'] > 0) {
      $path = "C:\\Apache2\\htdocs\";
      $path .= basename($_FILES['file_name']['name']);
      if (@move_uploaded_file($_FILES['file_name']['tmp_name'], $path)) {
         echo 'Файл загружен';
      }
      else {
         echo 'Ошибка при загрузке';
      }
   }
   else echo 'Ошибка при загрузке';
}
?>

 

При  выборе файла  с помощью  кнопки Обзор и нажатии кнопки Загрузить файл будет отправлен серверу. Например, отправляем файл banner.gif. Получив файл, сервер сохраняет его в каталоге для временных файлов и создает
переменные окружения со следующими значениями:
  $_FILES["file_name"]["name"] => banner.gif
  $_FILES["file_name"]["type"] => image/gif
  $_FILES["file_name"]["tmp_name"] => C:\php5\tmp\phpDB.tmp
  $_FILES["file_name"]["error"] => 0
  $_FILES["file_name"]["size"] => 14987
Значение  file_name  здесь  может  изменяться —  это  название  поля  выбора файла  в HTML-форме, —  а  остальные  параметры  неизменны,  и  соответствующие им элементы ассоциативного массива содержат следующие данные:
□ name — первоначальное название файла;
□ type — MIME-тип файла;
□ tmp_name — путь и название временного файла;
□ size — размер файла;

□ error — код ошибки. Может принимать следующие значения:
    •  0 — UPLOAD_ERR_OK —  ошибок  нет,  файл  был  успешно  загружен  на сервер;
    •  1 — UPLOAD_ERR_INI_SIZE — размер принятого файла превысил максимально  допустимый  размер, 

                который  задан  директивой upload_max_filesize конфигурационного файла php.ini;
    •  2 — UPLOAD_ERR_FORM_SIZE —  размер  загружаемого файла превысил значение MAX_FILE_SIZE,

                указанное в HTML-форме;
    •  3 — UPLOAD_ERR_PARTIAL —  загружаемый  файл  был  получен  только частично;
    •  4 — UPLOAD_ERR_NO_FILE — файл не загружен.

 
Итак, файл  загружен в каталог временных файлов. Теперь необходимо проверить, не возникло ли проблем с загрузкой. Если все в порядке, то переменная окружения $_FILES["file_name"]["error"] будет содержать значение 0.
Затем нужно скопировать файл из каталога временных файлов в нужный каталог.  Если  файл  не  скопировать  из  каталога  временных  файлов,  то  по  завершению работы сценария он будет удален. Скопировать файл можно с помощью двух функций: copy() и move_uploaded_file().

 

С функцией copy() мы уже  знакомы, она просто копирует файлы. Функция move_uploaded_file() имеет следующий формат:
move_uploaded_file(<Загруженный файл>, <Куда копируем>);

 

Она перемещает загруженный файл в новое место, первоначально проверяя, является  ли файл  загруженным на  сервер (переданным по протоколу POST). Если файл действительно  загружен на сервер, он будет перемещен в место,  указанное  во  втором  параметре. Если  он не  является  загруженным файлом, никаких  действий  не  предпринимается,  и  функция  возвращает  false.  Если файл,  указанный  во  втором  параметре,  уже  существует,  он  будет  перезаписан. Если файл был успешно перемещен, то функция возвратит true.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити