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.