Onphpid – Dalam membuat website terutama saat membuat CMS ( Content Management System ) dengan bahasa program (server side) khususnya php pastilah ada fitur upload, entah itu fungsi untuk upload file atau upload gambar. Misalnya saja upload photo pada halaman registrasi atau halaman management user, upload gambar background pada website atau upload cover pada facebook.
Fungsi upload ini memang sudah tidak asing atau bukan hal yang baru. Tapi karena sudah banyak tutorial yang memuat tentang cara membuat script upload file dengan php seperti halnya tutorial yang onphpid ini buat. Namun fungsi upload file dengan php kali ini sedikit berbeda dengan script upload file dengan php yang pernah onphpid temukan, karena fungsi atau script upload ini akan dijadikan sebuah fungsi baru dengan menggunakan fungsi php function().
FUNCTION() atau php function() ini merupakan salah satu power dari php yang nyata karena kemudahannya dalam membuat fungsi-fungsi baru sesuai keinginan kita. Ada beberapa hal yang perlu diperhatikan tentang fungsi ini.
1. Fungsi ini perlu dideklarasikan sebelum digunakan
2. Fungsi ini berlaku saat file php yang memuat fungsi ini di load
3. Fungsi ini akan bekerja saat fungsi tersebut dipanggil
Fungsi upload sendiri didasarkan pada fungsi php move_uploaded_file, fungsi yang mengijinkan kita untuk memindah file baik photo, gambar, doc, zip dan sebagai dari komputer kita ke hosting, server atau website kita. Pada penerapannya fungsi upload dengan php ini membutuhkan sebuah request berupa $_FILES melalui perantara Form dari tag html dengan menambahkan attribut enctype=”multipart/form-data” pada tag form dan tag input yang bertipe file tersebut hingga menjadi:
1 2 3 4 5 |
<form action="" method="post" enctype="multipart/form-data"> <label for="">Upload file : </label> <input type="file" name="upload" /> <button>Upload</button> </form> |
Dan seperti biasa step by step membuat script untuk form upload dengan php ini adalah membuat sebuah database dengan nama “belajar” dan sebuah table dengan nama “upload” karena kita akan menyimpan data file yang kita upload ini kedalam database, di sini yang kita simpan dalam database adalah alamat dari file yang telah terupload dengan fungsi php move_uploaded_file.
Berikut keterangan dari table upload yang akan kita buat
Step selanjutnya adalah membuat file-file php berikut :
- Buatlah direktori php-file-upload
- Functions.php
- Index.php
- Config.php
Setelah file-file php yang kita butuhkan sudah dibuat maka selanjutnya adalah mengisinya dengan fungsi-fungsi php.
Pertama kita mulai dari config.php, config.php adalah file untuk membuat perintah koneksi dengan database mysql dan di sini kita menggunakan fungsi mysqli dari php untuk berinteraksi dengan database mysql. Silahkan lihat script berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php # Variable untuk koneksi ke database $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = ''; $dbname = 'belajar'; # fungsi koneksi ke database $db = new mysqli($dbhost,$dbuser,$dbpass,$dbname); # tes koneksi ke database berhasil atau gagal if( $db->connect_error ) { # jika terjadi kegagalan dalam melakukan koneksi kedatabase die( 'Gagal Terhubung dengan database : '. $db->connect_error ); } # variabel konstanta untuk menyimpan alamat root # output c:\xampp\htdocs\php-file-uploads define( 'MAIN', dirname(__FILE__) ); ?> |
define(‘MAIN’, dirname(__FILE__) ) ini merupakan variable konstanta untuk menyimpan path atau alamat folder secara lengkap dari root dengan bantuan fungsi dirname(__FILE__). dirname(__FILE__) ini berfungsi untuk mendeteksi folder terakhir dimana fungsi ini diletakkan. Dalam kasus ini path yang dihasilkan adalah c:\xampp\htdocs\php-file-upload karena file config.php yang terdapat fungsi dirname(__FILE__) di dalamnya ini berada di folder php-file-upload ( direktori utama ).
Yang kedua adalah membuat file functions.php dimana file functions.php ini memuat fungsi-fungsi yang kita buat dengan php function() dalam hal ini adalah fungsi upload.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
<?php /** * @package fungsi upload */ global $filename,$error; /** * @var $fileupload digunakan untuk mengambil nilai dari parameter $_FILE[<param>] * @var $target_file adalah folder untuk meletakkan file yang diupload * @var limit, untuk membatasi jumlah maksimal size file yang diupload (satuan Kb ) * @param $_FILE[<param>], <param> diambil dari attribut name dari tag input <input name="param" /> */ function upload_data( $fileupload = array(), $argument = array() ) { global $filename,$error; if( !defined('MAIN') ){ $error = 'Direktori utama belum diset. <br> '; $error .= 'Silahkan diset dengan menggunakan fungsi '; $error .= 'define(\'MAIN\',dirname(__FILE__)) '; $error .= 'di file config.php / file koneksi database anda / file index.php'; return FALSE; } /** parameter default */ $param = array( 'target_file' => 'uploads', 'limit' => 100, ); if( is_array($argument) && count($argument) > 0 ){ # modifikasi parameter default dengan parameter baru $param = array_merge($param,$argument); } /** mengubah Array menjadi Variable */ extract($param); if( !isset( $fileupload['error'] ) || is_array( $fileupload['error'] ) ){ $error = 'Parameter Upload Salah Mohon Cek Kembali'; return FALSE; } /** check status file yang diupload dan ketersediaan server */ switch ($fileupload['error']) { case UPLOAD_ERR_OK: break; case UPLOAD_ERR_NO_FILE: $error = 'File Gagal Di kirim'; case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: $error = 'Batas Upload Server tidak cukup.'; default: $error = 'Unknown errors.'; } $extention = end( explode('.', $fileupload['name']) ); /** extensi file yang tidak diupload */ $forbiden_ext = array('php','pl','jsp','asp','sh','cgi','html','css'); if( in_array( $extention, $forbiden_ext ) ){ $error = 'Ekstensi File tidak diijinkan'; return FALSE; } # set limit dalam bit $limit_in_bit = $limit*1000; if ( $fileupload['size'] > $limit_in_bit ) { $error = 'File yang diupload tidak boleh lebih dari '.$limit.' Kb'; return FALSE; } # check keberadaan direktori uploads $target_file = trim($target_file,'/'); if( !is_readable( MAIN . '/' . $target_file ) ){ # jika tidak ada direktori yang dimaksud sistem akan membuat direktori tersebut if( !mkdir( MAIN . '/' . $target_file ) ){ # jika sistem gagal membuat direktori $error = 'Direktori untuk meletakkan file belum ada, '; $error .= 'Sistem gagal membuat direktori ' . $target_file; return FALSE; } } # nama file dibuat unique $newfilename = md5( uniqid().$fileupload["tmp_name"] ) . '.'.$extention; # upload file move_uploaded_file($fileupload["tmp_name"], $target_file.'/'.$newfilename); $filename = $newfilename; return TRUE; } /** * @return blank jika tidak ada error, jika terdapat error maka akan muncul errornya apa */ function get_error_upload(){ global $error; return $error; } /** * @return nama file yang di acak, jika berhasil diupload */ function get_file_name(){ global $filename; return $filename; } |
Baca Juga : Mengubah Array menjadi variable
Dengan fungsi diatas kita cukup menggunakan fungsi upload_data($file_yg_diupload) untuk mengupload sebuah file baik file gambar ataupun file yang lain kecuali file yang berekstensi php,pl,jsp,asp,sh,cgi,html dan css dikhawatirkan website akan di inject dengan file-file tersebut.
Sedangkan fungsi global pada script upload di atas berfungsi sebagai penangkap dan menyimpan value dari variable-variable yang ada di dalam script upload, dalam kasus ini variable yang ditangkap dan disimpan adalah $filename dan $error.
Di tutorial kali ini kita akan mencoba mengupload sebuah file gambar atau photo saja untuk selebihnya kalian bisa mengembangkan sendiri script upload yang sudah kita buat dengan php function.
Dan step yang terakhir adalah mengisi file index.php kita dengan script berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?php # menyisipkan file config dan functions.php require ( 'config.php' ); require ( 'functions.php' ); # eksekusi fungsi upload if( isset($_FILES['upload']) ) { if( upload_data($_FILES['upload'], array('limit'=>500)) ){ $namafile = 'uploads/'.get_file_name(); $sql = "INSERT INTO upload (file_name) VALUES ('$namafile')"; $query = $db->query($sql); if( !$query ) { echo $db->error; }else{ echo '<img src="uploads/'.get_file_name().'"/>'; } }else{ echo get_error_upload(); } } ?> <form action="" method="post" enctype="multipart/form-data"> <label for="">Upload file : </label> <input type="file" name="upload" /> <button>Upload</button> </form> <hr> <h4>List Gambar yang diupload</h4> <?php # menampilkan gambar yang sudah diupload $sql = "SELECT * FROM upload"; $query = $db->query($sql); if( $query->num_rows > 0 ){ while ($row = $query->fetch_assoc()) { echo '<img src="'.$row['file_name'].'"/>'; } } ?> |
Baca juga Perbedaan HTML dan PHP
Adapun argumen argumen yang bisa kita tambahkan pada fungsi upload_data() tadi dengan argumen argumen berikut :
Standard penggunaan fungsi upload_data()
1 |
upload_data($_FILES['upload']) |
Mengubah limitasi atau pembatasan ukuran file yang diupload dalam satuan KB (Kilobyte)
1 |
upload_data($_FILES['upload'], array('limit'=>500)); |
Memindah lokasi atau direktori untuk meletakkan file yang diupload
1 |
upload_data($_FILES['upload'], array('uploads'=>'images')); |
Memindakan lokasi sekaligus memberikan batasan file yang diupload
1 |
upload_data($_FILES['upload'], array('uploads'=>'images','limit'=>500)); |
Menampilkan nama file yang sudah diupload
1 |
<?php echo get_file_name(); ?> |
ini hanya muncul setelah fungsi upload selesai dijalankan, karena fungsi get_file_name() ini ditujukan untuk report
Menampilkan error saat terjadi kesalahan dalam proses upload
1 |
<?php get_error_upload();?> |
Sama halnya dengan get_file_name(), get_error_upload() juga merupakan report.
Dan secara default fungsi upload_data() tersebut akan meletakkan file yang diupload pada folder uploads dan batasan maksimal file yang diupload adalah 100KB. Apabila folder uploads ini belum ada fungsi upload_data() akan membuat direktori atau folder tersebut. Sedangkan untuk penamaan file kita gunakan nama unik dengan menggunakan fungsi md5() dan fungsi uniqid() sehingga tidak terjadi replace atau penggantian file yang kebetulan namanya sama.