Upload banyak file dengan php

Waktu saya belajar teknik upload dokumen, awalnya rasanya ribet banget.. Tapi kalau udah biasa, sebenernya nggak terlalu susah kok.. Beberapa hal yang harus diperhatikan : 

  1. Form harus punya atribut enctype="multipart/form-data"
  2. Untuk multiple upload, input type file harus punya atribut multiple="multiple"
  3. Jangan lupa, inputnya juga diberi nama dengan kurung kotak, misalnya name="upload[]"

Berikut ini halaman awalnya (index.php)

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Simple Multiple Form Upload</title>
</head>
<body>

<?php
if(isset($_SESSION['error'])){
	echo '<div style="color:#d00;">'.$_SESSION['error'].'</div>';
	unset($_SESSION['error']);
}
if(isset($_SESSION['success'])){
	echo '<div style="color:#080;">'.$_SESSION['success'].'</div>';
	unset($_SESSION['success']);
}

?>
<strong>Upload File Disini</strong>
<form action="proses.php" method="post" enctype="multipart/form-data">
	<input type="file" name="upload[]" accept="image/*" multiple="multiple">
	<button type="submit">Upload</button>
</form>

Session hanya dipakai utk pesan error dan sukses saja..

Selanjutnya di file proses.php codingnya seperti ini : 

<?php
session_start();

$limit = 10 * 1024 * 1024; //10MB. Bisa diubah2

if(isset($_FILES['upload'])){
	//karena ada multiple, jadi dilakukan pengecekan foreach
	$jumlahFile = count($_FILES['upload']['name']);
	for($i=0; $i<$jumlahFile; $i++){
		$namafile = $_FILES['upload']['name'][$i];
		$tmp = $_FILES['upload']['tmp_name'][$i];
		$type = $_FILES['upload']['type'][$i];
		$error = $_FILES['upload']['error'][$i];
		$size = $_FILES['upload']['size'][$i];

		//lakukan pengecekan disini
		if($size > $limit){
			$_SESSION['error'] = 'Ukuran gambar yang diupload melebihi yang diizinkan';
			header('location: index.php');			
			exit();
		}

		if($error > 0){
			$_SESSION['error'] = 'Upload gagal ('.$error.')';
			header('location: index.php');
			exit();
		}


		//kalau pengecekan sudah selesai, langsung proses
		move_uploaded_file($tmp, 'upload/'.$namafile);
	}

	$_SESSION['success'] = 'Berhasil mengupload seluruh file';
	header('location: index.php');	
	exit();

}

//kemungkinan nyampe kesini cuma kalau user ga upload apa2
$_SESSION['error'] = 'Silakan upload gambar yang diinginkan';
header('location: index.php');

Pertama-tama jumlah file yang diupload harus dihitung dulu dengan fungsi count yang dijalankan ke $_FILES['upload']['name']. Setelah itu kita akan melakukan looping sesuai jumlah tersebut. 

Yang perlu diperhatikan di bagian ini, misalnya kita menyimpan file kita ke folder tertentu, jangan lupa kita create foldernya dulu. Kalau foldernya tidak dibuat, nanti pesannya tetap Sukses terupload tapi file tidak benar-benar keupload.

Apakah sampai itu saja? Iya, cuma segitu aja kok.. Mudah kan? Kalau males ngetik, silakan langsung download file demonya di https://tianrosandhy.com/download/prompt/php-simple-file-upload-multiple-files. Semoga berguna ya~

<?php

if(isset($_POST['submit'])) {

    $upload_dir = 'uploads'.DIRECTORY_SEPARATOR;

    $allowed_types = array('jpg', 'png', 'jpeg', 'gif');

    $maxsize = 2 * 1024 * 1024;

    if(!empty(array_filter($_FILES['files']['name']))) {

        foreach ($_FILES['files']['tmp_name'] as $key => $value) {

            $file_tmpname = $_FILES['files']['tmp_name'][$key];

            $file_name = $_FILES['files']['name'][$key];

            $file_size = $_FILES['files']['size'][$key];

            $file_ext = pathinfo($file_name, PATHINFO_EXTENSION);

            $filepath = $upload_dir.$file_name;

            if(in_array(strtolower($file_ext), $allowed_types)) {

                if ($file_size > $maxsize)        

                    echo "Error: File size is larger than the allowed limit.";

                if(file_exists($filepath)) {

                    $filepath = $upload_dir.time().$file_name;

                    if( move_uploaded_file($file_tmpname, $filepath)) {

                        echo "{$file_name} successfully uploaded <br />";

                    }

                    else {                    

                        echo "Error uploading {$file_name} <br />";

                    }

                }

                else {

                    if( move_uploaded_file($file_tmpname, $filepath)) {

                        echo "{$file_name} successfully uploaded <br />";

                    }

                    else {                    

                        echo "Error uploading {$file_name} <br />";

                    }

                }

            }

            else {

                echo "Error uploading {$file_name} ";

                echo "({$file_ext} file type is not allowed)<br / >";

            }

        }

    }

    else {

        echo "No files selected.";

    }

}

?>