Как загрузить несколько файлов в PHP - PullRequest
0 голосов
/ 20 июня 2010

Все сценарии, которые я нашел в поиске Google, используют какой-то экран, который сначала запрашивает у пользователя, сколько файлов ему нужно загрузить, и сценарий загрузки работает на основе этого числа.

Но что если яне хочу никаких ограничений, но хочу позволить пользователю загружать столько или меньше, как они хотят.Как это сделать?

Все, что у меня сейчас есть, это форма:

<form enctype="multipart/form-data" method="post" action="script.php">
 <input id="my_file_element" type="file" name="myFile[]" >
        <input type="submit" value="Upload!" name="submit">
</form>

РЕДАКТИРОВАТЬ

Я думаю, как я выразил своеВопрос вызывает недоразумение.Мне не нужен какой-то способ добавить больше элементов поля «input type = file».Я уже использую JavaScript, который позволяет пользователю добавлять больше полей формы, нажимая кнопку, эти другие поля идентичны 1-му, опубликованному выше.

Для чего я задаю этот вопрос, это знать, какобрабатывать фактическую загрузку файлов на сервер, используя php-скрипт.

Ответы [ 5 ]

3 голосов
/ 20 июня 2010

EDIT

Допустим, ваша форма такая

<form enctype="multipart/form-data" method="post" action="script.php">
 <input id="my_file_element" type="file" name="myFile[]" >
 <input id="my_file_element" type="file" name="myFile[]" >
 <input id="my_file_element" type="file" name="myFile[]" >
 etc...
<input type="submit" value="Upload!" name="submit">
</form>

То, что вы хотите сделать, это получить все файлы с именем myFile[]. Вот что вы делаете в PHP:

foreach ($_FILES["myFile"]["error"] as $key => $error) {
 if ($error == UPLOAD_ERR_OK) {
   $tmp_name = $_FILES["myFile"]["tmp_name"][$key];
   $name = $_FILES["myFile"]["name"][$key];
   // here we move it to a directory called data
   // you can move it wherever you want
   move_uploaded_file($tmp_name, "data/$name");
 } else {
   // an error occurred, handle it here
 }
}

ORIGINAL

Используя только HTML и JavaScript, не существует простого способа загрузить несколько файлов одновременно.

Я бы использовал библиотеку Flash, такую ​​как SWFUpload , чтобы выполнить загрузку. Используя этот плагин, вы можете показать стандартное окно загрузки нескольких файлов, как показано в этой демонстрации . Это позволит пользователям легко выбирать несколько файлов в одном файловом браузере.

Если по какой-то причине вы не хотите использовать Flash, вы можете использовать JavaScript для динамической замены элементов ввода, как в в этом примере .

2 голосов
/ 20 июня 2010

РЕДАКТИРОВАТЬ

Это зависит от того, как вы назвали файл input элементов.Если вы следовали моему подходу ниже, вы можете получить количество файлов с помощью:

if (empty($_FILES['attach']['name']))
    $count_files = 0;
else
    $count_files = count($_FILES['attach']['name']);

Попробуйте var_dump($_FILES), чтобы увидеть полный массив $_FILES, если у вас есть какие-либо сомнения относительно его структуры.*

ОРИГИНАЛ

Примерно так, с Javascript:

<script type="text/javascript">
var j = 2; //default two files
function novoa() {
    j = j+1;
    var elem = document.createElement("input");
    var par = document.getElementById("filed");
    elem.setAttribute("type", "file");
    elem.name = "attach[]";
    elem.id = "file_" + j;
    par.appendChild(elem);
}
function delult() {
    if (j == 0) return;
    var elem = document.getElementById("file_" + j);
    var par = document.getElementById("filed");
    j = j-1;
    par.removeChild(elem);
}
</script>
...
<p id="addupl"><a href="javascript:novoa()">More files</a> |
    <a href="javascript:delult()">Less files</a></p>
<p id="filed">
<input type="file" name="attach[]" id="file_1" />
<input type="file" name="attach[]" id="file_2" />
</p>
1 голос
/ 20 июня 2010

В вашем скрипте PHP сделайте var_dump($_FILES).Вывод должен помочь вам двигаться дальше в нужном вам направлении.Посмотрите на функции файловой системы PHP для получения дополнительной информации о том, что вы можете делать с файлами, после использования функции move_uploaded_file.

Для того, чтобы действительно ответить на ваш вопрос Какчтобы обработать загрузку , вам нужно сообщить нам, что вы хотите сделать / сделать с файлами.

1 голос
/ 20 июня 2010

OMG вы спрашиваете, как обращаться с этой формой?
Пример справа на странице руководства:
http://www.php.net/manual/en/features.file-upload.post-method.php

<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "data/$name");
    }
}
?>
0 голосов
/ 20 июня 2010

Просто используйте JavaScript, чтобы добавить другой элемент ввода в форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...