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

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

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

  1. <s-cript type=text/j-avascript>
  2.  
  3. function dropInputform(btn)
  4. {
  5. if(document.getElementById)
  6. {
  7. while(btn.tagName != 'TR') btn = btn.parentNode;
  8. btn.parentNode.removeChild(btn);
  9. }
  10. }
  11.  
  12. function addInputform(btn)
  13. {
  14. if(document.getElementById)
  15. {
  16. while(btn.tagName != 'TR') btn = btn.parentNode;
  17. var newTr = btn.parentNode.insertBefore(btn.cloneNode(true), btn.nextSibling);
  18. }
  19. }
  20.  
  21. </script>
  22. <form enctype="multipart/form-data" method="post">
  23. <table>
  24. <tr><td><input class="input" type="file" size="40" value="" name="att[]"></td>
  25. <td><input class="inputsubmit" type="button" name="drop" value=" - "
  26. on-click="dropInputform(this);">
  27. <input class="inputsubmit" type="button" name="add" value=" + "
  28. on-click="addInputform(this);"></td>
  29. </tr>
  30. </tr>
  31. </table>
  32. <input type="submit" value="Загрузить">
  33. </form>
  34. </body>
  35. </html>
  36.  

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

  1. <?php
  2.  
  3. // Обработчик HTML-формы
  4. // Загружаем все файлы на сервер
  5. for($i=0; $i<count($_FILES['att']['name']); $i++)
  6. {
  7. // ПЕремещаем файл из временного каталога сервера в
  8. // каталог files Web-приложения
  9. if(copy($_FILES['att']['tmp_name'][$i], "files/".$_FILES['att']['name'][$i]))
  10. {
  11. unlink($_FILES['att']['tmp_name'][$i]);
  12.  
  13. // Изменяем права доступа к файлу
  14. chmod("files/".$_FILES['att']['name'][$i], 0644);
  15. }
  16. }
  17.  
  18. // Осущесвляем автоматическую перезагрузку страницы,
  19. // если содержимое суперглобального массива $_POST
  20. // не является пустым
  21. if(!empty($_POST))
  22. {
  23. echo "<HTML><HEAD>
  24. <M-ETA HTTP-EQUIV='Refresh' CONTENT='0; URL=".$_SERVER['PHP_SELF']."'></HEAD></HTML>";
  25. }
  26.  

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

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

Прочитано 4483 раз

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


Защитный код
Обновить