ARI JULIANTO Network www.arijulianto.com

Oleh | PHP | | Dibaca 15.417 kali | 0 komentar

Sebelumnya saya sudah membuat sebuah tutorial mengenai cara upload file di PHP secara detail (termasuk trik penanganan path atau lokasi file upload). Dan kali ini saya akan mencoba melalukan filter lebih lanjut mengenai file yang akan diupload, semisal hanya menerima file gambar saja dan batas maksimal upload hanya berapa MB saja.

Filter Ekstensi dan Tipe File yang Akan Diupload

Yang pertama adalah filter file yang akan diupload. Untuk membatasi jenis file yang akan diupload dapat kita lekukan melalui filter ekstensi atau tipe filenya. Kalo filter ekstensi caranya sangat mudah, yakni hanya memeriksa akhiran filenya, seperti .txt, .php, .jpg, .doc, dll. Adapun untuk filter berdasarkan jenis file kita membutuhkan mime file type contohnya: image/png, text/html, dll.

Contoh filter bedasarkan ekstensi

<form action="" method="post" enctype="multipart/form-data">
<?php
$valid_ext = array('jpg','jpeg','png','gif','bmp');
if(isset($_POST['upload']) && $_FILES['file']['size']>0){
$ext = strtolower(end(explode('.', $_FILES['file']['name'])));
if(in_array($ext, $valid_array)){
move_uploaded_file($_FILES['file']['tmp_name'], 'upload/'.$_FILES['file']['name']);
}else{
echo "Maaf... file yang ada pilih bukan file gambar. Hanya file JPG, PNG, GIF atau BMP yang boleh diupload..!";
}
}
?>
<input type="file" name="file" /> <input type="submit" name="upload" value="Upload" />
</form>

Berdasarkan contoh di atas, kita hanya menerima file gambar saja denga ekstensi .jpg, .jpeg, .png, .gif, atau .bmp saja. Ada potongan script yang sepertinya penting untuk kita bahas, yakni script baris ke-5 ini

$ext = strtolower(end(explode('.', $_FILES['file']['name'])));

Baris tersebut kita mengambil ekstensi file yang kemudian dikonversi menjadi huruf kecil (strtolower). fungsi end(array) berfungsi untuk megambil item terakhir di sebuah array, sedagkan explode('.', $_FILES['file']['name']) dimaksudkan untuk membuat sebuah array dari nama file dengan memecahnya berdasarkan titik. Misal kita memilih file fotoku.jpg maka hasilnya adalah array('fotoku','jpg'), dan jelaslah bahwa item terakhir dpastikan ekstensi filenya (jpg).

Upload Foto dengan Limit Size

Setelah kita melakukan filter ekstensi, selanjutnya adalah kita dapat membatasi ukuran file yang diijinkan untuk diupload. Cara membatasi batasan ukuran file yang boleh diupload ini tidaklah sulit, hanya saja kita membutuhkan satuan terkecilnya berapa KB atau berapa MB maksimal filenya. Yuk kita lihat actionnya pada contoh di bawah ini!

<form action="" method="post" enctype="multipart/form-data">
<?php
$maxsize = 1024 * 200; // maksimal 200 KB (1KB = 1024 Byte)
$valid_ext = array('jpg','jpeg','png','gif','bmp');
if(isset($_POST['upload']) && $_FILES['file']['size']<=$maxsize){
$ext = strtolower(end(explode('.', $_FILES['file']['name'])));
if(in_array($ext, $valid_array)){
move_uploaded_file($_FILES['file']['tmp_name'], 'upload/'.$_FILES['file']['name']);
}else{
echo "Maaf... file yang ada pilih terlalu besar, maksimal 200 KB..!";
}
}
?>
<input type="file" name="file" /> <input type="submit" name="upload" value="Upload" />
</form>

Dalam menentukan batasan maksimal upload ini, unit yang kita butuhkan adalah dalam satuan Byte. Jadi kita harus memahami dulu dasar dari konversi satuan dari Byte ke atas. Skema dasarnya dapat dilihat seperti pada tabel berikut

Unit Size
1 B (Byte) 8 Bit
1 KB (Kilo Byte) 1024 Byte
1 MB (Mega Byte) 1024 KB = 1024 * (1024 Byte) = 1.048.576 Byte
1 GB (Giga Byte) 1024 MB = 1024 * (1024 KB) = 1024 * (1024 * 1024 Byte) = 1.073.741.824 Byte
1 TB (Tera Byte) 1024 GB ... dst