2012-09-22

Upload part 3 : keamanan file dan upload yang beda.

Upload ini akan bahas apa yang akan kita upload terlebih dahulu, lalu baru bahas pake kendoUI untuk uploadnya. pertama kita akan melakukan upload file dengan syarat dan ketentuan sebagai berikut:
  • File . bukan folder atau link.
  • File tersebut bisa gambar, dokumen atau lainnya.
  • Besarnya dibawah 1MB. Kita tidak akan setting di PHP atau APACHE.
  • dan lain-lain.
Aku pastikan kalau tutorial ini berguna


 Seperti yang kita ketahui hasil yang didapat adalah:

Array
(
    [file] => Array
        (
            [name] => [21].jpg
            [type] => image/jpeg
            [tmp_name] => C:\xampp\tmp\php15B5.tmp
            [error] => 0
            [size] => 153108
        )

)
 Tetapi kita tidak akan memakai nama array yaitu files[]. Alasannya karena kita berikutnya akan melakukan upload file banyak jadi bukan cuma 1! Asumsi ketika kita melakukan upload, ini yang akan kita dapatkan
Array
(
    [files] => Array
        (
            [name] => Array
                (
                    [0] => 1148287p.jpg
                    [1] => 298624_522637407761939_611849061_n.jpg
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [0] => C:\xampp\tmp\php194E.tmp
                    [1] => C:\xampp\tmp\php195E.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 18775
                    [1] => 29777
                )

        )

)

saya perkecil agar mudah dipahami.
ini adalah file yang saya gunakan.. silakan download lalu kesini lagi untuk membaca penjelasannya. Semua file tidak perlu di edit, kecuali anda menginginkannya. Berikut adalah penjelasannya
 Pertama kita harus memasukkan file penting kendoui ke dalam html kita yaitu upload.htm yaitu file CSS dan JS

  • kendo.common.min.css
  • kendo.default.min.css
  • jquery.min.js
  • kendo.web.min.js
Jquery yang digunakan adalah versi 1.7.x saya belum mencoba versi yang baru. Tetapi untuk mempersingkat, silakan lanjut.
<link href="../styles/kendo.common.min.css" rel="stylesheet">
<link href="../styles/kendo.default.min.css" rel="stylesheet">   
    <script src="../js/jquery.min.js"></script>
    <script src="../js/kendo.web.min.js"></script>

Berikutnya kita akan memakai form standar, tetapi ternyata versi kendoui ini tidak membutuhkan enctype sehingga kita bisa langsung menulis

<form method="post" action="003a.php" style="width:45%">
<div>
     <input name="files[]" id="files" type="file" />
     <p>
     <input type="submit" value="Submit" class="k-button" />
     </p>
</div>
</form>

Kita mulai penjelasan dari atas dahulu.
  • Action adalah target file yang kita akan masuki. Ganti dengan yang lain.
  • Name sebisa mungkin array. 
Cara menggunakannya cukup sederhana yaitu klik select lalu pilih 1 file yang akan dimasukkan. Tampaknya bisa dipake buat banyak file sekaligus tetapi lebih baik 1-1 saja. Setelah memasukkan file yang kita ingin kirim (saran saya 2) klik submit.

Asumsinya kamu menjalankannya di offline, jadi kita akan dapatkan bentuknya array seperti di atas.
Array
(
    [files] => Array
        (
            [name] => Array
                (
                    [0] => 1148287p.jpg
                    [1] => 298624_522637407761939_611849061_n.jpg
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [0] => C:\xampp\tmp\php194E.tmp
                    [1] => C:\xampp\tmp\php195E.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 18775
                    [1] => 29777
                )

        )

)
Sekarang kita akan masuk ke mode keamanan. Pertama kita perhatikan disini ada banyak file yang terkirim, asumsinya akan banyak perulangan fungsi. Jadi yang harus kita lakukan adalah membuat fungsi untuk menangani upload tersebut. Karena ini masih belajar, jadi error tidak perlu ditampilkan.

Pertama kita harus mengetahui jumlah file yang terupload.
$n=count($_FILES['files']['name'];
dengan script di atas kita dapatkan 2. Sekedar sharing kita bisa pake sizeof tetapi semua kembali kebiasaan masing-masing. berikutnya kita pastikan file yang diupload hanya yang OK aka tidak error, juga semua harus dijalankan. maka kita buat berikutnya.
for($i=0;$i<$n;$i++)
{
    if($_FILES['files']['error'][$i]==0)
        uploadMyFile($i);

}

untuk fungsi uploadMyFile kita akan lakukan proses yang ditulis di atas yaitu:

CHECK TIPE FILE

Untuk mengecheck, kita bisa menggunakan $_FILES['files'][type] disini kita  mendapatkan image/jpeg . Dari tipe ini kita bisa dapatkan apakah file yang di upload sesuai tipenya. Tetapi sayang, ternyata upload ini memiliki kekurangan dalam hal periksa file, karena file yang dikirim dibaca berdasarkan extension lalu baru tipe filenya di munculkan.
Untuk scriptnya kita menggunakan fungsi mencari extension dari namanya.
$name=$_FILES['files']['name'][$i];
echo "<br>extension:".get_file_extension($name);

function get_file_extension($file_name)
{
  return strtolower(substr(strrchr($file_name,'.'),1));
  //http://davidwalsh.name/php-file-extension
  //saya nambahin strtolower

}

UKURAN FILE

Kadang kita ingin mengatur minimal dari script bukan dari server. Jadi kita bisa melakukan pemeriksaan dari $_FILES['files']['size'] lalu di kasi perintah if dan bila ukurannya sekian lebih maka ditolak. perlu di ingatkan bahwa 1KB=1024 byte dan 1MB= 1024 x 1024byte

    if($size>1000000){
        $err++;
    }

lalu bila ada pemiksaan yang lain seperti pemeriksaan akunya valid untuk upload dapat kamu lakukan. Bila terjadi error, berikan error pada variable $err;
setelah semua selesai, dan tidak ada error baru lakukan copy, bila kamu merasa cocok dengan move_upload_file.. silakan digunakan.

Script di atas jangan di copy paste, karena hanya bersifat penjelasan. Copy paste script dibawah, perhatikan bahwa 003.php tidak ada script dibawah.

script lengkapnya:
http://pastebin.com/jkc7RGCX

Selamat mengupload!

Tidak ada komentar: