Ayan Ayan - 2 months ago 13
PHP Question

Only one file being uploaded using multiple file uploader

The following PHP file script uploads only one file although its supposed to send multiple files. Can't understand where it breaks. Tried using

foreach
but to no avail.

I did a
var_dump
and they show the correct number of files being sent.

HTML

<form id="fileupload" method="POST" enctype="multipart/form-data">
<input type="file" name="uploadfile[]" multiple id="uploadfile" />
</form>


PHP

<?php

require_once 'config.php';

############ Edit settings ##############
$UploadDirectory = './storage/';
#########################################


if(!isset($_FILES["uploadfile"])) {
die('Something wrong with upload! Is "upload_max_filesize" set correctly?');
}

//check if this is an ajax request
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
die();
}


// Total number of files to be uploaded
$total_files = count($_FILES['uploadfile']['name']);

//check if there is at least 1 file
if($total_files < 1) {
die();
}


for($i=0; $i<$total_files; $i++) {
//Is file size is less than allowed size.
if ($_FILES["uploadfile"]["size"][$i] > 29000000) {
die("File size is too big!");
}

$allowedTypes = array('gif', 'png', 'jpeg', 'jpg', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'pptx', 'mp3', 'mp4', 'rar', 'zip', 'txt');

$FileNameFull = strtolower($_FILES['uploadfile']['name'][$i]);
$FileNameShort = pathinfo($FileNameFull, PATHINFO_FILENAME);
$FileExt = pathinfo($FileNameFull, PATHINFO_EXTENSION);

if(!in_array($FileExt, $allowedTypes)) {
die('Unsupported File format!');
}

$FileCode = rand(0, 9999999999); //Random number to be used to rename actual filename
$NewFileName = $FileCode.'.'.$FileExt; //new file name

if(move_uploaded_file($_FILES['uploadfile']['tmp_name'][$i], $UploadDirectory.$NewFileName )) {
// Save the file details to database
//$query = $dbh->prepare("INSERT INTO uploads(file_name, file_code, file_ext, timestamps) VALUES (:file_name, :file_code, :file_ext, :timestamps)");
/*$query->execute(array(
":file_name" => $FileNameShort,
":file_code" => $FileCode,
":file_ext" => $FileExt,
":timestamps" => round(microtime(true) * 1000)
));*/

die('Success! File Uploaded.');
}
else{
die('error uploading File!');
}

}

Answer

Well i will give you a small example:

HTML:

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

PHP:

$totalImage = count($_FILES['uploadfile']['name']);

for($i=0; $i<$totalImage; $i++) {
  $temporaryPathOfImage = $_FILES['uploadfile']['tmp_name'][$i];

  if ($temporaryPathOfImage != ""){
    $dirPath = "./storage/" . $_FILES['uploadfile']['name'][$i];

    if(move_uploaded_file($temporaryPathOfImage, $dirPath)) {
      //Code Here
    }
  }
}

Problem:

die('Success! File Uploaded.');

Remove this line so you will get all images in that loop.

Comments