Код KISS с некоторыми пояснениями:
Ниже приведен полностью функциональный простой код для начала работы. Вы можете добавить проверку ошибок, максимальный размер и т. Д. После того, как получите что-то простое.
Массив $ _FILES - это трехмерный массив, встроенный в PHP, в котором хранится вся информация о загруженном файле.
Для каждой части 'name =' тега HTML INPUT будет только ОДИН элемент.
Так что, если ваш тэг INPUT выглядит так:
<INPUT name="InpFile[]" type="file" />
В массиве $ _FILES будет один верхний элемент массива с именем 'InpFile'.
Также обратите внимание на [] после InpFile ....., который сообщает PHP, что каждый раз, когда вы используете входной тег с тем же именем, он добавляет его в тот же самый верхний элемент массива $ _FILES.
В этом одном элементе есть 5 других элементов массива с именами: «name», «type», «tmp_name», «error» и «size».
И каждый из этих элементов массива будет содержать данные для каждого загружаемого файла.
Ваше первое загруженное имя файла будет в $ _FILES ['InpFile'] ['name'] ['0']
И другая информация о вашем первом загруженном файле также будет в массиве таким же образом, например, размер первого файла будет в $ _FILES ['InpFile'] ['size'] ['0']
Каждое последующее имя файла будет находиться в $ _FILES ['InpFile'] ['name'] [1], $ _FILES ['InpFile'] ['name'] [2] .... и т. Д.
После загрузки каждый файл будет иметь случайное временное имя в элементе $ _FILES ['InpFile'] ['tmp_name'] [0 ... n], который используется для первой загрузки файлов. во временную зону.
ТАК, после загрузки вам нужно переместить файлы из временной области туда, куда вы хотите.
Это делается с помощью этого утверждения:
move_uploaded_file($_FILES['InpFile']['tmp_name'][$Key],
$_FILES['InpFile']['name'][$Key] )
or die("Move from Temp area failed");
В приведенном ниже операторе foreach $ Key и $ Name присутствуют только для того, чтобы $ Key получал назначенные увеличивающиеся числа для каждой итерации ... т.е. 0, 1, 2 ..... и т. Д., И затем вы можете использовать $ Key для ссылки на имя, tmp_name и т. Д. Каждого файла в массиве.
Этот код позволяет вам делать все это на одной странице, поскольку форма фактически вызывает себя (action = "") для публикации. Таким образом, при первой загрузке страницы вы получите сообщение об ошибке в коде php, поскольку $ _FILES еще не установлен ...... поэтому весь код находится в операторе If: If ($ _FILES).
После того, как вы отправите форму, она выполнит свою задачу, а затем отобразит состояние каждого файла после его перемещения в вашу область.
Кроме того, этот код будет загружать файл в тот же каталог, в котором находится страница ... вы можете изменить все это, используя информацию из других сообщений на SO.
<FORM action="" method="post" enctype="multipart/form-data">
<P align="center"><B>Choose Files</B><BR>
<BR>
File One:
<INPUT name="InpFile[]" type="file" />
<BR>
<BR>
File Two:
<INPUT name="InpFile[]" type="file" />
<BR>
</P>
<P align="center"><BR>
<INPUT type="submit" name="submit" value="UpLoad">
</P>
</FORM>
<H3 align="center"> </H3>
<H3 align="center">Status:</H3>
<P align="center"> </P>
<P align="center">
Поместите этот код PHP прямо здесь на той же странице:
<?php
If ($_FILES) {
foreach ($_FILES ['InpFile']['name'] as $Key => $Name) {
move_uploaded_file(
$_FILES['InpFile']['tmp_name'][$Key],
$_FILES['InpFile']['name'][$Key]
) or die("Move from Temp area Failed");
$EFileName = $_FILES['InpFile']['name'][$Key];
echo "<P>$EFileName: Uploaded";
}
}
?>