Jumat, 11 Mei 2012

Filter Extention File Yang akan di Upload

Beberapa artikel tentang membuat script upload dengan PHP telah saya bahas di blog ini. Seperti membuat single file upload, multiple file upload, sampai dengan upload download file dengan batasan hak akses. Nah… dalam artikel-artikel tersebut, memungkinkan user mengupload file apapun alias tidak ada batasan jenis file atau extensionnya.
Yang menjadi masalah selanjutnya adalah, bagaimana cara membuat script untuk membatasi atau memfilter extension file yang diupload, misalnya hanya file image (.bmp, .jpg, atau .gif) saja yang boleh diupload? Inilah yang akan kita bahas dalam artikel ini.

Sebenarnya konsep untuk memfilter extension file yang diupload ini mudah. Konsepnya adalah pertama kita membuat list atau daftar extension file yang boleh diupload terlebih dahulu. Daftar ini bisa berupa array, misalnya:

1.$extensionList = array("jpg", "bmp", "gif");
Selanjutnya setelah user mengklik submit ketika proses upload, langkah pertama adalah kita membaca nama filenya. Tujuan akhir kita adalah akan mendapatkan extension file tersebut. Untuk membaca nama file yang diupload kita gunakan perintah:
1.$fileName = $_FILES['userfile']['name'];
Keterangan ‘userfile’ adalah nama komponen form untuk upload file. Nama ini boleh diganti dengan apapun, asal sama dengan nama komponen form untuk uploadnya.
Setelah kita baca nama filenya, selanjutnya kita lakukan explode atau memecah nama file tersebut berdasarkan karakter dot (.). Secara umum, nama file adalah berbentuk ‘XXXXX.YYY‘ dengan ‘XXXXX‘ adalah nama filenya, dan ‘YYY‘ adalah extensionnya.
1.$pecah = explode(".", $fileName);
Trus… kira-kira menurut Anda extension dari file setelah proses exploding berada dalam elemen array ke berapa pada $pecah? Yup… yaitu pada elemen array ke-1. Adapun nama filenya berada dalam elemen array ke-0. Oleh karena itu kita gunakan perintah berikut ini untuk mendapatkan extension filenya.
1.$ekstensi = $pecah[1];
Nah… extension file telah kita dapatkan, langkah selanjutnya adalah mengecek apakah extension file tersebut terdapat dalam daftar extension yang diperbolehkan diupload di atas. Untuk mengecek keberadaan extension file dalam daftar extension, kita gunakan function in_array($ekstensi, $extensionList). Function ini akan nilai TRUE jika extension file yang akan diupload terdapat dalam daftar extension yang diperbolehkan. Dengan demikian proses upload sendiri baru akan dijalankan bila nilai in_array() ini adalah TRUE. Sedangkan bila nilainya FALSE maka upload tidak dijalankan.
1.if (in_array($ekstensi, $extensionList))
2.{
3.// proses upload dijalankan
4.}
5.else
6.{
7.// proses upload tidak dijalankan
8.}
Secara lengkap script untuk upload file yang dilengkapi dengan filter extension file saya berikan sebagai berikut.
form.html
1.<form enctype="multipart/form-data" action="upload.php" method="POST">
2.<input type="hidden" name="MAX_FILE_SIZE" value="30000000" />
3.Pilih File : <input name="userfile" type="file">
4.<input type="submit" name="submit" value="Upload" />
5.form>
upload.php
01.
02. 
03.$extensionList = array("bmp", "jpg", "gif");
04. 
05.$fileName = $_FILES['userfile']['name'];
06.$pecah = explode(".", $fileName);
07.$ekstensi = $pecah[1];
08. 
09.// nama direktori upload
10.$namaDir = 'data/';
11. 
12.// membuat path nama direktori + nama file.
13.$pathFile = $namaDir . $fileName;
14. 
15.if (in_array($ekstensi, $extensionList))
16.{
17.// memindahkan file ke temporary
18.$tmpName  = $_FILES['userfile']['tmp_name'];
19. 
20.// proses upload file dari temporary ke path file
21.if (move_uploaded_file($_FILES['userfile']['tmp_name'], $pathFile))
22.{
23.echo "File berhasil diupload.";
24.}
25.else
26.{
27.echo "File gagal diupload.";
28.}
29.}
30.else echo "File yang diupload bukan file image";
31. 
32.?>
Mudah bukan membuatnya? OK deh.. mudah-mudahan bermanfaat ya artikelnya. Ditunggu aja deh artikel-artikel heboh lain tentang scripting PHP di blog ini, yang belum pernah dibahas di buku manapun di Indonesia :-)

Artikel Terkait


EmoticonEmoticon