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

Для того, чтобы обеспечить произвольное количество полей под загружаемые файлы, необходимо воспользоваться клиентским языком JavaScript, который позволит динамически сформировать HTML-форму. Для рабаты скрипта необходимо, чтобы в том же каталоге, где расположено Web-приложение, имелся подкаталог file, содержащий файл, права доступ к которым были настроены таким образом, чтобы скрипт имел право записи в каталог.

HTML-форма загрузки

<script type=text/javascript>
 
function dropInputform(btn)
{
    if(document.getElementById)
    {
        while(btn.tagName != 'TR') btn = btn.parentNode;
    btn.parentNode.removeChild(btn);
  }
}
 
function addInputform(btn)
{
  if(document.getElementById)
  {
    while(btn.tagName != 'TR') btn = btn.parentNode;
    var newTr = btn.parentNode.insertBefore(btn.cloneNode(true), btn.nextSibling);
  }
}
 
</script>
<form enctype="multipart/form-data" method="post">
<table>
<tr><td><input class="input" type="file" size="40" value="" name="att[]"></td>
<td><input class="inputsubmit" type="button" name="drop" value=" - " 
onclick="dropInputform(this);">
<input class="inputsubmit" type="button" name="add" value=" + " 
onclick="addInputform(this);"></td>
</tr>
</tr>
</table>
<input type="submit" value="Загрузить">
</form>
</body>
</html>

Обработчик HTML-формы

<?php
 
// Обработчик HTML-формы
// Загружаем все файлы на сервер
for($i=0; $i<count($_FILES['att']['name']); $i++)
{
  // ПЕремещаем файл из временного каталога сервера в
  // каталог files Web-приложения
  if(copy($_FILES['att']['tmp_name'][$i], "files/".$_FILES['att']['name'][$i]))
  {
    unlink($_FILES['att']['tmp_name'][$i]);
 
    // Изменяем права доступа к файлу
    chmod("files/".$_FILES['att']['name'][$i], 0644);
  }
}
 
// Осущесвляем автоматическую перезагрузку страницы,
// если содержимое суперглобального массива $_POST
// не является пустым
if(!empty($_POST))
{
  echo "<HTML><HEAD>
  <META HTTP-EQUIV='Refresh' CONTENT='0; URL=".$_SERVER['PHP_SELF']."'></HEAD></HTML>";
}

Атрибут enctype формы определяет вид кодировки, которую браузер применяет к параметрам формы. Чтобы отправка файла на сервер действовала, атрибуту enctype необходимо присвоить значение multipart/form-data. По умолчанию этот атрибут имеет значение application/x-www-form-urlencoded. Если данный атрибут не объявляется, загрузка файла на сервер невозможна.

HTML-форма состоит из произвольного количества полей типа file. Если в качестве имен нескольких элементов управления HTML-формы выступает массив, в обработчике формы значение из данного элемента можно получить, обратившись к суперглобальному элементу $_POST[‘имя_массива’][]. В HTML-форме все поля типа file объединяются в массив под одним именем att[], доступ к которому в обработчике осуществляется при помощи массива $_POST[‘att’]. Индексы массива нумеруются с нуля. Это приводит, к тому, что обработка файла производится в цикле. При помощи функции copy() файл копируется из временного каталога в каталог значения files. Потом временный файл уничтожается при помощи функции unlink(), а файлу в каталоге files назначаются права доступа 0644.

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

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