একাধিক ফাইল পিএইচপি মধ্যে আপলোড


122

আমি একাধিক ফাইল আপলোড করতে এবং সেগুলি একটি ফোল্ডারে সঞ্চয় করতে এবং পথটি পেতে এবং এটি ডাটাবেসে সংরক্ষণ করতে চাই ... একাধিক ফাইল আপলোড করার জন্য আপনি যে কোনও ভাল উদাহরণ দেখেছেন ...

দ্রষ্টব্য: ফাইলগুলি যে কোনও ধরণের হতে পারে ...



2
আপনার অনুসরণ করার জন্য এখানে একটি ভাল উদাহরণ রয়েছে: উদাহরণ
জিনি

@ এসফরাজ আমার সপ্তাহান্তে ছিল ... ঠিক এখন আমি উদাহরণটি চেষ্টা করলাম এটি এত সহজ এত সুন্দর
উদয়

@ এসফরাজ আমি <d> <ইনপুট নাম = "উফিল []" টাইপ = "ফাইল" আইডি = "উফিল []" সাইজ = "50" /> </td> একটি অ্যাড ক্লিক থেকে জেনার চেষ্টা করেছি < td> এর ক্লিক ক্লিক করুন তবে ফলাফল পাওয়া যায়নি আপনি কি আমার নতুন প্রশ্ন পোস্ট দেখতে পাচ্ছেন
উদয়

উত্তর:


260

আমি জানি এটি একটি পুরাতন পোস্ট তবে আরও কিছু ব্যাখ্যা কারও পক্ষে একাধিক ফাইল আপলোড করার চেষ্টা করা কার্যকর হতে পারে ... আপনার যা করা দরকার তা এখানে:

  • ইনপুট নামটি অবশ্যই অ্যারের হিসাবে সংজ্ঞায়িত করা উচিত name="inputName[]"
  • ইনপুট উপাদান অবশ্যই multiple="multiple"বা সঠিক হতে হবেmultiple
  • আপনার পিএইচপি ফাইলে সিনট্যাক্স ব্যবহার করুন "$_FILES['inputName']['param'][index]"
  • খালি ফাইলের নাম এবং পাথ সন্ধান করার বিষয়টি নিশ্চিত করুন , অ্যারেতে খালি স্ট্রিং থাকতে পারে । array_filter()গণনার আগে ব্যবহার করুন ।

এখানে একটি ডাউন এবং নোংরা উদাহরণ (কেবল প্রাসঙ্গিক কোড দেখাচ্ছে)

এইচটিএমএল:

<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
@ স্যাভেন হ্যাঁ এটি এইচটিএমএল 5 এ সমর্থিত এই লিঙ্কটি দেখুন , আমার খারাপ চেহারা যেমন আইও এই সমর্থন করে না ... গিজে আমাদের জীবনটি এত সহজতর হত যদি সবাই কেবল মানদণ্ডে চলে যায় ... এলএল
অ্যান্ডি ব্রাহাম

7
@ অ্যান্ডি ব্রাহাম multipleইনপুট উপাদানটির বৈশিষ্ট্যটি বুলিয়ান, যার অর্থ আপনি এটির কোনও মূল্য সরবরাহ করেন না: <input name="upload[]" type="file" multiple /> এইচটিএমএল 5 দেখুন: w3.org/TR/2011/WD-htML5-20110525/…
রব জোহানসেন

11
এটি উল্লেখ করার মতো যে ব্যবহারকারীকে একবারে সমস্ত ফাইল নির্বাচন করতে হবে। পরবর্তী কোনও নির্বাচনের প্রচেষ্টা পূর্ববর্তী নির্বাচন বাতিল করবে।
স্কিপি লে গ্র্যান্ড গৌড়ো

2
@ অ্যালিয়ানবিশপ এখানে পুরোপুরি সঠিক নয়, একাধিক = "একাধিক" পুরোপুরি ভাল এবং বিকল্প হিসাবে চশমাগুলিতে অন্তর্ভুক্ত রয়েছে।
kojow7

38

একাধিক ফাইল নির্বাচন করা যায় এবং তারপরে
<input type='file' name='file[]' multiple>
নমুনা পিএইচপি স্ক্রিপ্ট ব্যবহার করে আপলোড করা যায় যা আপলোড করে:

<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]দ্বিতীয় ফাইলের নাম সংরক্ষণ করা।
ইত্যাদি।


একাধিক ফাইল আপলোড করার সময় জেএস সহ প্রতিটি ফাইলের ফাইল পাথ অ্যাক্সেস করার কোনও উপায় আছে? উদাহরণস্বরূপ, একক ফাইলগুলির জন্য আপনি কেবল ফাইলপুট.মূল্যটি জিজ্ঞাসা করতে পারেন, তবে আমি লক্ষ্য করেছি যে একাধিক ফাইল ফাইল নির্বাচন করা হলে ইনপুট.মূল্য এখনও কেবল একটি পাথ আউটপুট করে ...
ওল্ডবয়

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 
}

এইভাবে আপনি ফাইল / চিত্রগুলি, যতগুলি প্রয়োজন যোগ করতে পারেন এবং পিএইচপি স্ক্রিপ্টের মাধ্যমে এগুলি পরিচালনা করতে পারেন।


1
এই দস্তাবেজটি প্রতিস্থাপন করুন .getElementById ("dvFile")। অভ্যন্তরীণ এইচটিএমএল + = txt; সঙ্গে $ ( "#dvFile") .append (টেক্সট); এটি আপনার সংযুক্তিটি সংরক্ষণ করবে
রাহুল রাজোরিয়া

এই উত্তরটি অবিসোলেট (এবং আমার মতে এত সাধারণ কোনও কিছুর জন্য জটিল)। একটি সঠিক উত্তরের জন্য @ rjv এর দিকে দেখুন
ভ্লাদিমির নুল

@ ভ্লাদিমিরনুল একাধিক ফাইল আপলোড করার সময় জেএসের সাথে প্রতিটি ফাইলের ফাইল পাথ অ্যাক্সেস করার কোনও উপায় আছে? উদাহরণস্বরূপ, একক ফাইলগুলির জন্য আপনি কেবল জিজ্ঞাসা করতে পারেন fileInput.value, তবে আমি লক্ষ্য করেছি যে একাধিক ফাইলগুলি নির্বাচিত হওয়ার পরে fileInput.valueকেবল একটি
পথকেই

@ অ্যান্টনি শুনে মনে হচ্ছে আপনি জাভাস্ক্রিপ্টে এমনটি করছেন, আমি বিষয়টি দেখতে পাচ্ছি না। দয়া করে আরজেভির উত্তরটি পরীক্ষা করুন।
ভ্লাদিমির নুল

5

এটি একটি ফাইল আপলোড করা থেকে আলাদা নয় - $_FILESকোনও অ্যারে এবং সমস্ত আপলোড করা ফাইল রয়েছে।

পিএইচপি ম্যানুয়ালটিতে একটি অধ্যায় রয়েছে: একাধিক ফাইল আপলোড করা

আপনি যদি ব্যবহারকারীর শেষে সহজে নির্বাচন করে একাধিক ফাইল আপলোড সক্ষম করতে চান (আপলোড ক্ষেত্রগুলি পূরণ করার পরিবর্তে একাধিক ফাইল নির্বাচন করে) এসডাব্লুএফইউপলোডটি একবার দেখুন । এটি একটি সাধারণ ফাইল আপলোড ফর্মের থেকে আলাদাভাবে কাজ করে এবং যদিও ফ্ল্যাশটির কাজ করা প্রয়োজন। এসডাব্লুএফইপলোড ফ্ল্যাশের সাথে অচল করে দেওয়া হয়েছিল। এখনই সঠিক পদ্ধতির জন্য অন্য, আরও উত্তরগুলি দেখুন।


1
এই উত্তর obsolote হয়। একটি সঠিক উত্তরের জন্য @ rjv এর দিকে দেখুন
ভ্লাদিমির নুল

সত্য। যে প্রতিফলিত সম্পাদিত।
পেক্কা

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>

এই উত্তর obsolote হয়। একটি সঠিক উত্তরের জন্য @ rjv এর দিকে দেখুন
ভ্লাদিমির নুল

4

সহজ, প্রথমে ফাইলগুলি অ্যারে গণনা করুন, তারপরে লুপের সময় আপনি সহজেই এটি পছন্দ করতে পারেন do

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

এখন আপনি মোট ফাইল সংখ্যা পেয়েছেন।

কিছুক্ষণের মধ্যে লুপটি এরকম করুন:

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

1
এখানে কিছু অনুপস্থিত রয়েছে, দয়া করে @ rjv এর উত্তরটি একবার দেখুন।
ভ্লাদিমির নুল


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/

এটি এমন একটি ফর্ম সহ একটি পিএইচপি মাল্টি ফাইল আপলোড স্ক্রিপ্ট যেখানে আপনি একাধিক ইনপুট এবং একটি এজেএক্স অগ্রগতি বার যুক্ত করতে পারেন। সার্ভারে আনপ্যাক করার পরে এটি সরাসরি কাজ করা উচিত ...


0

আমরা নীচের স্ক্রিপ্টটি ব্যবহার করে পিএইচপি ব্যবহার করে একাধিক ফাইলগুলি আপলোড করতে পারি।

সম্পূর্ণ উত্স কোড এবং পূর্বরূপ ডাউনলোড করুন

<?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
দয়া করে এই ইউআরএলটি পরীক্ষা করুন এটি আপনাকে সামগ্রীর গুণমান উন্নত করতে কার্যকর হবে
উইলি চেং

0

এটিই আমার পক্ষে কাজ করেছিল। আমাকে ফাইলগুলি আপলোড করতে হয়েছিল, ফাইলের নাম সংরক্ষণ করতে হয়েছিল এবং আমার কাছে ইনপুট ক্ষেত্রগুলি থেকে সঞ্চয় করার জন্য অতিরিক্ত তথ্য ছিল এবং একাধিক ফাইলের নাম অনুসারে একটি রেকর্ড ছিল। আমি সিরিয়ালাইজ () এর পরে মূল এসকিএল কোয়েরিতে যুক্ত করেছি।

  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

চমৎকার লিঙ্কটি চালু:

পিএইচপি একক ফাইল আপলোড বিভিন্ন বুনিয়াদি ব্যাখ্যা সহ

বৈধতার সাথে পিএইচপি ফাইল আপলোড হচ্ছে

বৈধতার সাথে পিএইচপি একাধিক ফাইলগুলি আপলোড করুন উত্স কোডটি ডাউনলোড করতে এখানে ক্লিক করুন

পিএইচপি / jQuery একাধিক ফাইল প্রগতিবার এবং বৈধকরণের সাথে আপলোড (উত্স কোড ডাউনলোড করতে এখানে ক্লিক করুন)

কীভাবে পিএইচপি এবং মাইএসকিউএল ডেটাবেজে ফাইল আপলোড করবেন (উত্স কোড ডাউনলোড করতে এখানে ক্লিক করুন)

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

এবং আপনাকে অবশ্যই আপনার এইচটিএমএল কোডটি পরীক্ষা করতে হবে

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

চমৎকার লিঙ্কটি চালু:

পিএইচপি একক ফাইল আপলোড বিভিন্ন বুনিয়াদি ব্যাখ্যা সহ

বৈধতার সাথে পিএইচপি ফাইল আপলোড হচ্ছে

বৈধতার সাথে পিএইচপি একাধিক ফাইলগুলি আপলোড করুন উত্স কোডটি ডাউনলোড করতে এখানে ক্লিক করুন

পিএইচপি / jQuery একাধিক ফাইল প্রগতিবার এবং বৈধকরণের সাথে আপলোড (উত্স কোড ডাউনলোড করতে এখানে ক্লিক করুন)

কীভাবে পিএইচপি এবং মাইএসকিউএল ডেটাবেজে ফাইল আপলোড করবেন (উত্স কোড ডাউনলোড করতে এখানে ক্লিক করুন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.