2013-10-08 5 views
0

Я хочу загрузить несколько файлов вместо одного. Я знаю, как загрузить один файл (изображение) Мне нужна помощь при загрузке нескольких файлов. Ниже вы можете увидеть, как я могу загрузить один файл.Загрузка нескольких файлов на сервер

Вот мой HTML при добавлении:

<form action="upload_file.php" method="post" enctype="multipart/form-data"> 
    <label for="file">Filename:</label> 
    <input type="file" name="file" id="file" multiple><br> 
    <input type="submit" name="submit" value="Submit"> 
    </form> 

Я видел, что некоторые люди меняют имя = "файл" в имя = "файл []". Но я не знаю, как загрузить его с помощью php.

Вот PHP код

<?php 
    $allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $temp = explode(".", $_FILES["file"]["name"]); 
    $extension = end($temp); 

    $random_digit=rand(0000,9999); 

    if ((($_FILES["file"]["type"] == "image/gif") 
    || ($_FILES["file"]["type"] == "image/jpeg") 
    || ($_FILES["file"]["type"] == "image/jpg") 
    || ($_FILES["file"]["type"] == "image/pjpeg") 
    || ($_FILES["file"]["type"] == "image/x-png") 
    || ($_FILES["file"]["type"] == "image/png")) 
    && ($_FILES["file"]["size"] < 20000) 
    && in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
    { 
     echo $_FILES["file"]["name"] . " already exists. "; 
    } 
    else 
    { 
    $file_name = $_FILES["file"]["name"]; 
    $ext = pathinfo($file_name, PATHINFO_EXTENSION); // Get the extension of a file 
    $new_file_name = $random_digit . '.' . $ext; 
    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $new_file_name); 
    echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
    } 
    } 
} 
else 
{ 
echo "Invalid file"; 
} 
?> 
+1

Ах да, старый добрый стандарт [w3fools] (http://w3fools.com) загрузить скрипт, который одновременно является совершенно небезопасно и совершенно глупо, как он пытается показать, как глупо, что w3fools люди. –

+1

Возможный дубликат [PHP Multiple File Array] (http://stackoverflow.com/questions/15941592/php-multiple-file-array) –

+0

Теперь я могу добавить несколько файлов. Но есть ли все-таки я могу отобразить их, прежде чем добавлять их на сервер? – EM10

ответ

1

Ваша форма загрузки должна иметь несколько полей ввода с тем же именем.

давайте назовем это "загрузить []

то в вашем приемном скрипте нужно петлю через [] массив $ _FILES для того, чтобы добраться до каждого из них.

$response = ""; 
$i = 0; 
while ((isset($_FILES['upload']['name'][$i])) && ($_FILES['upload']['name'][$i]<>"")){ 
    $error = $_FILES['upload']['error'][$i]; 

    if ($error == 0){ 

     $upfilename = $_FILES['upload']['name'][$i]; 
     //should probably validate your filename here 
      //$upfilename = validate_fname($upfilename) 

     $tmpname = $_FILES['upload']['tmp_name'][$i]; 
     $dirname = "uploads" // your files to be stored in this directory 
     if (move_uploaded_file($tmpname, $dirname."/".$filename)){ 
      $response .= "<br><div class=\"message\">File : $filename : uploaded successfully. Thank you.</div><br>"; 
     }else { 
      $response .= "<br> <div class=\"message\"> There was an error uploading file: $filename "; 
     } 

    } 
    else $response = "<br><div class=\"errormsg\">there was an error - error code: $error</div><br>"; 
    $i++; 
} 
3

если вы используете имя = «файл []»$_FILES["file"]["name"] будет массив(), вы можете проверить его с print_r($_FILES["file"]) или var_dump($_FILES["file"]) массивом будет выглядеть следующим образом:

Array 
(
[uploads] => Array 
    (
     [name] => Array 
      (
       [0] => hack-attempt.sh 
       [1] => picture.gif 
       [2] => text.txt 
       [3] => virus.exe 
      ) 

     [type] => Array 
      (
       [0] => application/sh 
       [1] => image/jpeg 
       [2] => text/plain 
       [3] => applicatio/octet-stream 
      ) 

     [tmp_name] => Array 
      (
       [0] => /tmp/hack-attempt.sh 
       [1] => /tmp/picture.gif 
       [2] => /tmp/text.txt 
       [3] => /tmp/virus.exe 
      ) 

     [error] => Array 
      (
       [0] => 0 
       [1] => 0 
       [2] => 0 
       [3] => 0 
      ) 

     [size] => Array 
      (
       [0] => 217297 
       [1] => 53600 
       [2] => 6511924 
       [3] => 127662 
      ) 

    ) 

) 

пример взят из: http://staticfloat.com/php-programmieren/multiupload-mit-html5-und-php/ это немецкий, но только для кредита.

Смежные вопросы