2016-09-08 6 views
2

次のPHPファイルスクリプトは、複数のファイルを送信する予定ですが、1つのファイルのみをアップロードします。どこが壊れているのか理解できません。 foreachを使用してみましたが、役に立たないです。複数のファイルアップローダを使用して1つのファイルのみをアップロードしています

私はvar_dumpを行い、送信されたファイルの正しい数を示しています。

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!'); 
    } 

} 
+0

HTMLを投稿するとよいです。 – Noman

+0

@Noman、更新済み! – Ayan

+0

私にとっては、 '!isset($ _ SERVER ['HTTP_X_REQUESTED_WITH'])'で停止しましたが、Ajaxで試したことはありません。 'HTTP_X_REQUESTED_WITH'は常に設定されるわけではないことに注意してください。すべてのJSフレームワークがそのような情報を送信するわけではありません。 – debute

答えて

3

さて私はあなたの小さな一例を与える:

HTML:

0123を

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

問題:

die('Success! File Uploaded.'); 

あなたがそのループ内のすべての画像を取得するように、この行を削除します。

関連する問題