Unggah banyak file dalam php

122

Saya ingin mengunggah banyak file dan menyimpannya dalam folder dan mendapatkan jalur dan menyimpannya di database ... Contoh bagus apa pun yang Anda cari untuk melakukan unggahan banyak file ...

Catatan: File bisa dari jenis apa saja ...

udaya
sumber
2
Berikut adalah contoh yang baik untuk Anda ikuti: CONTOH
jini
@sarfraz Saya punya akhir pekan ... Baru saja saya mencoba contoh itu sangat mudah
udaya
@sarfraz Saya mencoba untuk membuat <td> <input name = "ufile []" type = "file" id = "ufile []" size = "50" /> </td> dari klik tambahan saya mendapatkan < td> sedang menambahkan klik tetapi hasilnya tidak tercapai Bisakah Anda melihat pertanyaan baru saya diposting
udaya

Jawaban:

260

Saya tahu ini adalah posting lama tetapi beberapa penjelasan lebih lanjut mungkin berguna bagi seseorang yang mencoba mengunggah banyak file ... Inilah yang perlu Anda lakukan:

  • Nama input harus didefinisikan sebagai larik yaitu name="inputName[]"
  • Elemen masukan harus memiliki multiple="multiple"atau hanyamultiple
  • Dalam file PHP Anda, gunakan sintaks "$_FILES['inputName']['param'][index]"
  • Pastikan untuk mencari nama file dan jalur kosong , larik mungkin berisi string kosong . Gunakan array_filter()sebelum menghitung.

Ini adalah contoh yang buruk (hanya menampilkan kode yang relevan)

HTML:

<input name="upload[]" type="file" multiple="multiple" />

PHP:

//$files = array_filter($_FILES['upload']['name']); //something like that to be used before processing files.

// Count # of uploaded files in array
$total = count($_FILES['upload']['name']);

// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {

  //Get the temp file path
  $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

  //Make sure we have a file path
  if ($tmpFilePath != ""){
    //Setup our new file path
    $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];

    //Upload the file into the temp dir
    if(move_uploaded_file($tmpFilePath, $newFilePath)) {

      //Handle other code here

    }
  }
}

Semoga ini bisa membantu!

Andy Braham
sumber
1
Saya tidak yakin <input type="file">mengizinkan atribut multiple- apa hasil yang diharapkan? Browser mengizinkan banyak file untuk dipilih?
Sven
9
@Sven Ya itu didukung dalam HTML5 lihat tautan ini , sepertinya IE tidak mendukung ini ... Astaga, hidup kita akan jauh lebih mudah jika semua orang mengikuti standar ... LOL
Andy Braham
7
@AndyBraham multipleAtribut elemen masukan adalah boolean, artinya Anda tidak memberikan nilai: <input name="upload[]" type="file" multiple /> Lihat spesifikasi HTML5: w3.org/TR/2011/WD-html5-20110525/…
Rob Johansen
11
Perlu disebutkan bahwa pengguna harus memilih semua file sekaligus. Upaya seleksi selanjutnya akan membatalkan seleksi sebelumnya.
Skippy le Grand Gourou
2
@AlienBishop kurang tepat di sini, multiple = "multiple" baik-baik saja dan disertakan dalam spesifikasi sebagai alternatif.
kojow7
38

Beberapa file dapat dipilih dan kemudian diunggah menggunakan
<input type='file' name='file[]' multiple>
contoh skrip php yang mengunggah:

<html>
<title>Upload</title>
<?php
    session_start();
    $target=$_POST['directory'];
        if($target[strlen($target)-1]!='/')
                $target=$target.'/';
            $count=0;
            foreach ($_FILES['file']['name'] as $filename) 
            {
                $temp=$target;
                $tmp=$_FILES['file']['tmp_name'][$count];
                $count=$count + 1;
                $temp=$temp.basename($filename);
                move_uploaded_file($tmp,$temp);
                $temp='';
                $tmp='';
            }
    header("location:../../views/upload.php");
?>
</html>

File yang dipilih diterima sebagai array dengan

$_FILES['file']['name'][0]menyimpan nama file pertama.
$_FILES['file']['name'][1]menyimpan nama file kedua.
dan seterusnya.

rjv
sumber
Apakah ada cara untuk mengakses jalur file setiap file dengan JS saat mengunggah banyak file? misalnya, untuk file tunggal Anda cukup meminta fileInput.value, tetapi saya perhatikan bahwa ketika beberapa file dipilih fileInput.value masih hanya mengeluarkan satu jalur ...
oldboy
6

HTML

  1. buat div dengan id='dvFile';

  2. buat a button;

  3. onclick fungsi panggilan tombol itu add_more()

JavaScript

function  add_more() {
  var txt = "<br><input type=\"file\" name=\"item_file[]\">";
  document.getElementById("dvFile").innerHTML += txt;
}

PHP

if(count($_FILES["item_file"]['name'])>0)
 { 
//check if any file uploaded
 $GLOBALS['msg'] = ""; //initiate the global message
  for($j=0; $j < count($_FILES["item_file"]['name']); $j++)
 { //loop the uploaded file array
   $filen = $_FILES["item_file"]['name']["$j"]; //file name
   $path = 'uploads/'.$filen; //generate the destination path
   if(move_uploaded_file($_FILES["item_file"]['tmp_name']["$j"],$path)) 
{
   //upload the file
    $GLOBALS['msg'] .= "File# ".($j+1)." ($filen) uploaded successfully<br>";
    //Success message
   }
  }
 }
 else {
  $GLOBALS['msg'] = "No files found to upload"; //No file upload message 
}

Dengan cara ini Anda dapat menambahkan file / gambar sebanyak yang dibutuhkan, dan menanganinya melalui script php.

kdniazi.dll
sumber
1
Ganti document.getElementById ("dvFile") ini. InnerHTML + = txt; dengan $ ("#dvFile") .append (txt); itu akan menyimpan lampiran Anda
Rahul rajoria
Jawaban ini sudah usang (dan terlalu rumit untuk sesuatu yang begitu sederhana, menurut saya). Untuk jawaban yang benar lihat @ rjv's
Vladimir Nul
@VladimirNul adakah cara untuk mengakses jalur file setiap file dengan JS saat mengunggah banyak file? misalnya, untuk satu file Anda dapat dengan mudah melakukan kueri fileInput.value, tetapi saya perhatikan bahwa ketika beberapa file dipilih fileInput.valuemasih hanya mengeluarkan satu jalur ...
oldboy
@Anthony sepertinya Anda melakukan itu dalam javascript, saya tidak mengerti intinya. Silakan periksa jawaban rjv.
Vladimir Nul
5

Ini tidak jauh berbeda dengan mengunggah satu file - $_FILESadalah larik yang berisi semua dan semua file yang diunggah.

Ada satu bab dalam manual PHP: Mengupload banyak file

Jika Anda ingin mengaktifkan beberapa file upload dengan pilihan yang mudah di pihak pengguna (memilih beberapa file sekaligus daripada mengisi kolom upload) lihat SWFUpload . Ini bekerja secara berbeda dari formulir unggahan file normal dan membutuhkan Flash untuk bekerja. SWFUpload sudah usang bersama dengan Flash. Periksa jawaban lain yang lebih baru untuk pendekatan yang sekarang benar.

Pekka
sumber
1
Jawaban ini sudah usang. Untuk jawaban yang benar lihat @ rjv's
Vladimir Nul
Benar. Diedit untuk mencerminkan itu.
Pekka
4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
$max_no_img=4; // Maximum number of images value to be set here

echo "<form method=post action='' enctype='multipart/form-data'>";
echo "<table border='0' width='400' cellspacing='0' cellpadding='0' align=center>";
for($i=1; $i<=$max_no_img; $i++){
echo "<tr><td>Images $i</td><td>
<input type=file name='images[]' class='bginput'></td></tr>";
}

echo "<tr><td colspan=2 align=center><input type=submit value='Add Image'></td></tr>";
echo "</form> </table>";
while(list($key,$value) = each($_FILES['images']['name']))
{
    //echo $key;
    //echo "<br>";
    //echo $value;
    //echo "<br>";
if(!empty($value)){   // this will check if any blank field is entered
$filename =rand(1,100000).$value;    // filename stores the value

$filename=str_replace(" ","_",$filename);// Add _ inplace of blank space in file name, you can remove this line

$add = "upload/$filename";   // upload directory path is set
//echo $_FILES['images']['type'][$key];     // uncomment this line if you want to display the file type
//echo "<br>";                             // Display a line break
copy($_FILES['images']['tmp_name'][$key], $add); 
echo $add;
    //  upload the file to the server
chmod("$add",0777);                 // set permission to the file.
}
}
?>
</body>
</html>
muaz khalid
sumber
Jawaban ini sudah usang. Untuk jawaban yang benar lihat @ rjv's
Vladimir Nul
4

Sederhananya, hitung saja larik file terlebih dahulu, lalu di loop sementara Anda dapat dengan mudah melakukan ini seperti

$count = count($_FILES{'item_file']['name']);

sekarang Anda mendapatkan jumlah file yang benar.

In while loop lakukan seperti ini:

$i = 0;
while($i<$count)
{
    Upload one by one like we do normally
    $i++;
}
Nick
sumber
1
Ada yang kurang disini, silahkan lihat jawaban @ rjv.
Vladimir Nul
4

skrip sederhana ini berhasil untuk saya.

<?php

foreach($_FILES as $file){
  //echo $file['name']; 
  echo $file['tmp_name'].'</br>'; 
  move_uploaded_file($file['tmp_name'], "./uploads/".$file["name"]);
}

?>
Rohit Mandiwal
sumber
3

Berikut adalah fungsi yang saya tulis yang mengembalikan $_FILESarray yang lebih bisa dimengerti .

function getMultiple_FILES() {
    $_FILE = array();
    foreach($_FILES as $name => $file) {
        foreach($file as $property => $keys) {
            foreach($keys as $key => $value) {
                $_FILE[$name][$key][$property] = $value;
            }
        }
    }
    return $_FILE;
}
Cheejyg
sumber
2

Saya menjalankan foreach loop dengan elemen kesalahan, seperti

 foreach($_FILES['userfile']['error'] as $k=>$v)
 {
    $uploadfile = 'uploads/'. basename($_FILES['userfile']['name'][$k]);
    if (move_uploaded_file($_FILES['userfile']['tmp_name'][$k], $uploadfile)) 
    {
        echo "File : ", $_FILES['userfile']['name'][$k] ," is valid, and was                      successfully uploaded.\n";
    }

    else 
    {
        echo "Possible file : ", $_FILES['userfile']['name'][$k], " upload attack!\n";
    }   

 }
HCV
sumber
0

Kita dapat dengan mudah mengunggah banyak file menggunakan php dengan menggunakan skrip di bawah ini.

Unduh kode Sumber Lengkap dan pratinjau

<?php
if (isset($_POST['submit'])) {
    $j = 0; //Variable for indexing uploaded image 

 $target_path = "uploads/"; //Declaring Path for uploaded images
    for ($i = 0; $i < count($_FILES['file']['name']); $i++) {//loop to get individual element from the array

        $validextensions = array("jpeg", "jpg", "png");  //Extensions which are allowed
        $ext = explode('.', basename($_FILES['file']['name'][$i]));//explode file name from dot(.) 
        $file_extension = end($ext); //store extensions in the variable

  $target_path = $target_path . md5(uniqid()) . "." . $ext[count($ext) - 1];//set the target path with a new name of image
        $j = $j + 1;//increment the number of uploaded images according to the files in array       

   if (($_FILES["file"]["size"][$i] < 100000) //Approx. 100kb files can be uploaded.
                && in_array($file_extension, $validextensions)) {
            if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $target_path)) {//if file moved to uploads folder
                echo $j. ').<span id="noerror">Image uploaded successfully!.</span><br/><br/>';
            } else {//if file was not moved.
                echo $j. ').<span id="error">please try again!.</span><br/><br/>';
            }
        } else {//if file size and file type was incorrect.
            echo $j. ').<span id="error">***Invalid file Size or Type***</span><br/><br/>';
        }
    }
}
?>
Merbin Joe
sumber
0
$property_images = $_FILES['property_images']['name'];
    if(!empty($property_images))
    {
        for($up=0;$up<count($property_images);$up++)
        {
            move_uploaded_file($_FILES['property_images']['tmp_name'][$up],'../images/property_images/'.$_FILES['property_images']['name'][$up]);
        }
    }
Wisnu Bhadoriya
sumber
1
Silakan periksa URL ini. Ini akan berguna untuk meningkatkan kualitas konten Anda
Willie Cheng
0

Inilah yang berhasil bagi saya. Saya harus mengunggah file, menyimpan nama file dan saya memiliki masukan tambahan dari bidang masukan untuk disimpan juga dan satu catatan per beberapa nama file. Saya menggunakan serialize () lalu menambahkannya ke kueri sql utama.

  class addReminder extends dbconn {
    public function addNewReminder(){

           $this->exdate = $_POST['exdate'];
           $this->name = $_POST['name'];
           $this->category = $_POST['category'];
           $this->location = $_POST['location'];
           $this->notes = $_POST['notes'];



           try {

                     if(isset($_POST['submit'])){
                       $total = count($_FILES['fileUpload']['tmp_name']);
                       for($i=0;$i<$total;$i++){
                         $fileName = $_FILES['fileUpload']['name'][$i];
                         $ext = pathinfo($fileName, PATHINFO_EXTENSION);
                         $newFileName = md5(uniqid());
                         $fileDest = 'filesUploaded/'.$newFileName.'.'.$ext;
                         $justFileName = $newFileName.'.'.$ext;
                         if($ext === 'pdf' || 'jpeg' || 'JPG'){
                             move_uploaded_file($_FILES['fileUpload']['tmp_name'][$i], $fileDest);
                             $this->fileName = array($justFileName);
                             $this->encodedFileNames = serialize($this->fileName);
                             var_dump($this->encodedFileNames);
                         }else{
                           echo $fileName . ' Could not be uploaded. Pdfs and jpegs only please';
                         }
                       }

                    $sql = "INSERT INTO reminders (exdate, name, category, location, fileUpload, notes) VALUES (:exdate,:name,:category,:location,:fileName,:notes)";
                    $stmt = $this->connect()->prepare($sql);
                    $stmt->bindParam(':exdate', $this->exdate);
                    $stmt->bindParam(':name', $this->name);
                    $stmt->bindParam(':category', $this->category);
                    $stmt->bindParam(':location', $this->location);
                    $stmt->bindParam(':fileName', $this->encodedFileNames);
                    $stmt->bindParam(':notes', $this->notes);
                    $stmt->execute();
                  }

           }catch(PDOException $e){
             echo $e->getMessage();
           }
      }
    }
Adam Falchetta
sumber
-1

Tautan bagus di:

Mengupload File Tunggal PHP dengan berbagai penjelasan dasar .

Mengunggah file PHP dengan Validasi

Unggah Beberapa File PHP Dengan Validasi Klik di sini untuk mengunduh kode sumber

Unggah Beberapa File PHP / jQuery Dengan ProgressBar Dan Validasi (Klik di sini untuk mengunduh kode sumber)

Cara Mengunggah File Di PHP Dan Menyimpan Di Database MySql (Klik di sini untuk mengunduh kode sumber)

extract($_POST);
    $error=array();
    $extension=array("jpeg","jpg","png","gif");
    foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name)
            {
                $file_name=$_FILES["files"]["name"][$key];
                $file_tmp=$_FILES["files"]["tmp_name"][$key];
                $ext=pathinfo($file_name,PATHINFO_EXTENSION);
                if(in_array($ext,$extension))
                {
                    if(!file_exists("photo_gallery/".$txtGalleryName."/".$file_name))
                    {
                        move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$file_name);
                    }
                    else
                    {
                        $filename=basename($file_name,$ext);
                        $newFileName=$filename.time().".".$ext;
                        move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$newFileName);
                    }
                }
                else
                {
                    array_push($error,"$file_name, ");
                }
            }

dan Anda harus memeriksa kode HTML Anda

<form action="create_photo_gallery.php" method="post" enctype="multipart/form-data">
    <table width="100%">
        <tr>
            <td>Select Photo (one or multiple):</td>
            <td><input type="file" name="files[]" multiple/></td>
        </tr>
        <tr>
            <td colspan="2" align="center">Note: Supported image format: .jpeg, .jpg, .png, .gif</td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="Create Gallery" id="selectedButton"/></td>
        </tr>
    </table>
</form>

Tautan bagus di:

Mengupload File Tunggal PHP dengan berbagai penjelasan dasar .

Mengunggah file PHP dengan Validasi

Unggah Beberapa File PHP Dengan Validasi Klik di sini untuk mengunduh kode sumber

Unggah Beberapa File PHP / jQuery Dengan ProgressBar Dan Validasi (Klik di sini untuk mengunduh kode sumber)

Cara Mengunggah File Di PHP Dan Menyimpan Di Database MySql (Klik di sini untuk mengunduh kode sumber)

Kalpesh Rajai
sumber