Php में एकाधिक फ़ाइल अपलोड


122

मैं कई फ़ाइलों को अपलोड करना चाहता हूं और उन्हें एक फ़ोल्डर में संग्रहीत कर सकता हूं और पथ प्राप्त कर सकता हूं और डेटाबेस में संग्रहीत कर सकता हूं ... कोई भी अच्छा उदाहरण जो आपने किसी भी फाइल को अपलोड करने के लिए देखा है ...

नोट: फाइलें किसी भी प्रकार की हो सकती हैं ...



2
यहाँ आपके अनुसरण के लिए एक अच्छा उदाहरण है: EXAMPLE
jini

@ सरफराज मेरे पास वीकेंड था ... अभी-अभी मैंने इसका उदाहरण दिया कि यह इतना आसान है
udaya

@sarfraz मैंने एक ऐड क्लिक से <td> <input name = "ufile []" type = "file" id = "ufile []" size = "50" /> </ td> जनरेट करने का प्रयास किया। td> के ऐड क्लिक पर लेकिन परिणाम प्राप्त नहीं हुआ है क्या आप मेरे नए प्रश्न देख सकते हैं
udaya

जवाबों:


260

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन आगे की व्याख्या कुछ ऐसे लोगों के लिए उपयोगी हो सकती है जो कई फाइलें अपलोड करने की कोशिश कर रहे हैं ... यहां आपको यह करने की आवश्यकता है:

  • इनपुट नाम को एक सरणी के रूप में परिभाषित किया जाना चाहिए name="inputName[]"
  • इनपुट तत्व के पास multiple="multiple"या बस होना चाहिएmultiple
  • अपने PHP फ़ाइल में सिंटैक्स का उपयोग करें "$_FILES['inputName']['param'][index]"
  • खाली फ़ाइल नामों और रास्तों की तलाश करना सुनिश्चित करें , सरणी में खाली तार हो सकते हैं । array_filter()गिनती से पहले उपयोग करें ।

यहाँ एक नीचे और गंदा उदाहरण है (केवल प्रासंगिक कोड दिखा रहा है)

HTML:

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

पीएचपी:

//$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

    }
  }
}

आशा है कि यह मदद करता है!


1
मुझे यकीन नहीं है कि <input type="file">विशेषता की अनुमति देता है multiple- अपेक्षित परिणाम क्या होगा? ब्राउज़र कई फ़ाइलों को चुनने की अनुमति देता है?
स्वेन

9
@ हाँ, यह HTML5 में समर्थित है इस लिंक की जाँच करें , मेरा बुरा लग रहा है जैसे IE इस थियो का समर्थन नहीं करता है ... हमारे जीवन को इतना आसान बना दें अगर हर कोई मानकों से चले ... LOL
Andy Braham

7
@AndyBraham multipleइनपुट तत्व की विशेषता बूलियन है, जिसका अर्थ है कि आप इसे मूल्य नहीं देते हैं: <input name="upload[]" type="file" multiple /> HTML5 कल्पना देखें: w3.org/TR/2011/WD-html5-20110525/…
रोब जोहान्स

11
यह ध्यान देने योग्य है कि उपयोगकर्ता को एक ही बार में सभी फ़ाइलों का चयन करना होगा। चयन का कोई भी प्रयास पिछले चयन को रद्द कर देगा।
स्किप्पी ले ग्रांड गौरौ

2
@AlienBishop यहाँ बहुत सही नहीं है, कई = "बहु" पूरी तरह से ठीक है और एक विकल्प के रूप में ऐनक में शामिल है।
kojow7

38

एकाधिक फ़ाइलों को चुना जा सकता है और फिर अपलोड करने वाले
<input type='file' name='file[]' multiple>
नमूना php स्क्रिप्ट का उपयोग करके अपलोड किया जा सकता है :

<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>

चयनित फ़ाइलों को एक सरणी के रूप में प्राप्त किया जाता है

$_FILES['file']['name'][0]पहली फाइल का नाम स्टोर करना।
$_FILES['file']['name'][1]दूसरी फ़ाइल का नाम संग्रहीत करना।
और इसी तरह।


क्या जेएस के साथ प्रत्येक फ़ाइल के फ़ाइल पथ तक पहुंचने का कोई तरीका है जब कई फाइलें अपलोड की जाती हैं? उदाहरण के लिए, एकल फ़ाइलों के लिए आप केवल fileInput.value को क्वेरी कर सकते हैं, लेकिन मैंने देखा है कि जब एकाधिक फ़ाइलों को चुना जाता है fileInput.value अभी भी केवल एक ही पथ को आउटपुट करता है ...
ओल्डबॉय

6

एचटीएमएल

  1. के साथ तलाक id='dvFile';

  2. एक बना button;

  3. onclick उस बटन कॉलिंग फ़ंक्शन का add_more()

जावास्क्रिप्ट

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

पीएचपी

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 
}

इस तरह आप आवश्यकता के अनुसार फ़ाइल / चित्र जोड़ सकते हैं, और उन्हें php स्क्रिप्ट के माध्यम से संभाल सकते हैं।


1
इस दस्तावेज़ को बदलें ।getElementById ("DVFile"); भीतर HTML + = txt; साथ $ ( "#dvFile") .append (txt); यह आपके लगाव को बचाएगा
राहुल राजोरिया

यह उत्तर अस्पष्ट है (और बहुत सरल कुछ के लिए जटिल है, मेरी राय में)। एक सही उत्तर के लिए @ rvv
व्लादिमीर नूल

@VladimirNul जेएस के साथ प्रत्येक फ़ाइल के फ़ाइल पथ तक पहुंचने का कोई तरीका है जब कई फाइलें अपलोड की जाती हैं? उदाहरण के लिए, एकल फ़ाइलों के लिए आप केवल क्वेरी कर सकते हैं fileInput.value, लेकिन मैंने देखा है कि जब कई फ़ाइलों का चयन किया जाता है तब fileInput.valueभी केवल एक ही पथ आउटपुट होता है ...
Oldboy

@ ऐसा लगता है कि आप ऐसा कर रहे हैं कि जावास्क्रिप्ट में, मैं बात नहीं देख रहा हूं। कृपया आरजेवी के जवाब की जांच करें।
व्लादिमीर नूल

5

ऐसा नहीं है कि किसी एक फ़ाइल को अपलोड करने से अलग है - $_FILESएक सरणी है जिसमें कोई भी और सभी अपलोड की गई फ़ाइलें हैं।

PHP मैनुअल में एक अध्याय है: कई फाइलें अपलोड करना

यदि आप उपयोगकर्ता के अंत में आसान चयन के साथ कई फ़ाइल अपलोड को सक्षम करना चाहते हैं (अपलोड फ़ील्ड में भरने के बजाय एक बार में कई फ़ाइलों का चयन) SWFUpload पर एक नज़र डालें । यह एक सामान्य फ़ाइल अपलोड फॉर्म से अलग तरह से काम करता है और इसके लिए फ्लैश की आवश्यकता होती है। फ्लैश के साथ-साथ SWFUpload का भी इस्तेमाल किया गया था। अब-सही दृष्टिकोण के लिए अन्य, नए उत्तरों की जांच करें।


1
यह उत्तर अश्लील है। एक सही उत्तर के लिए @ rjv's
व्लादिमीर नूल

सच। को प्रतिबिंबित करने के लिए संपादित।
पेका

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>

यह उत्तर अश्लील है। एक सही उत्तर के लिए
व्लादिमीर नूल

4

सिंपल वो है, बस पहले फाइल्स अरेंज काउंट करें, फिर लूप में रहते हुए आप आसानी से ऐसा कर सकते हैं

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

अब आपको फ़ाइलों की कुल संख्या मिल गई है।

जबकि लूप इस तरह से करते हैं:

$i = 0;
while($i<$count)
{
    Upload one by one like we do normally
    $i++;
}

1
यहाँ कुछ याद आ रहा है, कृपया @ rjv के उत्तर पर एक नज़र डालें।
व्लादिमीर नूल

4

इस सरल स्क्रिप्ट ने मेरे लिए काम किया।

<?php

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

?>

3

यहाँ एक फ़ंक्शन है जो मैंने लिखा था जो अधिक समझने योग्य $_FILESसरणी देता है।

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;
}

2

मैं त्रुटि तत्व के साथ फ़ॉरच लूप चलाता हूं, जैसा दिखता है

 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";
    }   

 }

1

बस निम्नलिखित समाधान के पार आया:

http://www.mydailyhacks.org/2014/11/05/php-multifile-uploader-for-php-5-4-5-5/

यह एक तैयार PHP मल्टी फ़ाइल अपलोड स्क्रिप्ट है जिसमें आप कई इनपुट और AJAX प्रगति बार जोड़ सकते हैं। यह सर्वर पर अनपैकिंग के बाद सीधे काम करना चाहिए ...


0

हम नीचे दी गई स्क्रिप्ट का उपयोग करके कई फ़ाइलों को php का उपयोग करके अपलोड करना आसान कर सकते हैं।

पूर्ण स्रोत कोड डाउनलोड करें और पूर्वावलोकन करें

<?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/>';
        }
    }
}
?>

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]);
        }
    }

1
कृपया इस URL की जांच करें यह आपको सामग्री की गुणवत्ता को ऊपर उठाने के लिए उपयोगी होगा
विली चेंग

0

इसी से मेरा काम बना है। मुझे फाइलें अपलोड करनी थीं, फाइलनामों को स्टोर करना था और मेरे पास इनपुट फील्ड्स से अतिरिक्त इनॉफ के साथ-साथ कई फाइल नामों के लिए एक रिकॉर्ड था। मैंने क्रमबद्ध () का उपयोग किया और फिर इसे मुख्य sql क्वेरी में जोड़ा।

  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();
           }
      }
    }

-1

इस पर अच्छा लिंक:

PHP सिंगल फाइल अपलोडिंग में अलग-अलग बुनियादी विवरण होते हैं

सत्यापन के साथ PHP फ़ाइल अपलोड करना

PHP मल्टीपल फाइल्स अपलोड वैलिडेशन के साथ सोर्स कोड डाउनलोड करने के लिए यहां क्लिक करें

PHP / jQuery की कई फाइलें प्रोग्रेसबेर और वैलिडेशन के साथ अपलोड होती हैं (सोर्स कोड डाउनलोड करने के लिए यहां क्लिक करें)

PHP और Store में MySql Database में फाइलें कैसे अपलोड करें (सोर्स कोड डाउनलोड करने के लिए यहां क्लिक करें)

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, ");
                }
            }

और आपको अपना HTML कोड देखना होगा

<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>

इस पर अच्छा लिंक:

PHP सिंगल फाइल अपलोडिंग में अलग-अलग बुनियादी विवरण होते हैं

सत्यापन के साथ PHP फ़ाइल अपलोड करना

PHP मल्टीपल फाइल्स अपलोड वैलिडेशन के साथ सोर्स कोड डाउनलोड करने के लिए यहां क्लिक करें

PHP / jQuery की कई फाइलें प्रोग्रेसबेर और वैलिडेशन के साथ अपलोड होती हैं (सोर्स कोड डाउनलोड करने के लिए यहां क्लिक करें)

PHP और Store में MySql Database में फाइलें कैसे अपलोड करें (सोर्स कोड डाउनलोड करने के लिए यहां क्लिक करें)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.