Selasa, 23 September 2008

Upload file ke server dengan menggunakan PHP

PHP membuat semuanya menjadi lebih mudah dalam menangani upload file. Untuk membuat form upload pastikan kita menyertakan atribut enctype="multipart/form-data" dan pastikan methodnya adalah post. Oke langsung saja kita lihat kode HTML berikut ini:
<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="myfile"> 
<input type="submit" name="Submit" value="Submit">
form>
Seperti yang kita lihat, kita me,mberi nama pada field upload kita "myfile". Nama ini sangat penting, karena ketika file telah diupload maka file tersebut otomatis diberi nama yang unik dan disimpan di temporary direktori. Tentu saja url path ke filenya bisa diakses, karena otomatis akan muncul variabel global yang memiliki nama yang sama dengan field upload kita, dalam hal ini myfile. Akan ada 4 variabel baru yang semuanya diawali dengan myfile dan diikuti dengan garis bawah (underscore), yaitu:
• $myfile. Variabel ini berisi informasi lokasi file di server.
• $myfile_name. Nama file asli ketika masih dikomputer klien.
• $myfile_size. Ukuran dari file (dalam satuan bytes).
• $myfile_type. Tipe file.
Upload sederhana
Langsung saja kita coba contoh upload berikut ini, simpan dengan nama upload.php:
<html>
<head>
<title>Upload filetitle>
head>
<body>
if ( isset( $upload ) ) { 
    echo "Lokasi File: $myfile
"
;
    echo "Nama File: $myfile_name
"
;
    echo "Ukuran: $myfile_size bytes
"
;
    echo "Tipe File: $myfile_type
"
;
    copy ( $myfile, "$myfile_name") or die ("Gagal mengupload");
}
?>
<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="myfile"><br>
<input type="submit" value="upload" name="upload">
form>
body>
html>


Ketika tombol upload ditekan, maka url path file tersebut akan disimpan di variabel $myfile dan kita tampilkan dibrowser. Kita juga menampilkan nama file yang tersimpan pada variabel $myfile_name, ukuran file di variabel $myfile_size dan tipe file di variabel $myfile_type.
Kita menggunakan fungsi copy() untuk memindahkan file dari komputer kita direktori sementara di server kita. Fungsi copy() membutuhkan dua argumen yaitu lokasi awal file dan lokasi baru diserver. Jika kita ingin mengupload nya ke suatu folder diserver (katakanlah kita simpan difolder images) maka kita perlu mengubahnya menjadi: copy ( $myfile, "images/$myfile_name")
Upload yang lebih kompleks
Sekarang mari kita coba membuat fungsi upload yang jauh lebih rumit. Misalkan kita ingin membuat fungsi upload dimana file yang diupload harus file jpg, dan ukurannya tidak boleh lebih besar dari 100Kb serta panjang dan lebar gambar tidak boleh lebih dari 100 piksel. Kelihatannya rumit kan? Mari kita coba kode berikut dan simpan dengan nama upload2.php:

<html>
<head>
<title>Upload filetitle>
head>
<body>
if ( isset( $upload ) ) { 
echo "Lokasi File: $myfile
"
;
echo "Nama File: $myfile_name
"
;
echo "Ukuran: $myfile_size bytes
"
;
echo "Tipe File: $myfile_type
"
;
if ( $myfile_type == "image/pjpeg" ) {
    if ($myfile_size <= 102400 ) {
        list($width, $height) = @getimagesize("$myfile");
        if ( $width <= 100 && $height <= 100 
) {
            copy ( $myfile, 
"$myfile_name") or die ("Couldn't copy");
            echo "File anda telah sukses diupload";
        } else {
            echo "Ukuran panjang dan lebar gambar terlalu besar";
        }
    } else {
        echo "Ukuran file tidak boleh lebih dari 100Kb";
    }
} else {
    echo "File harus JPG!!";
}
}
?>
<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="myfile"><br>
<input type="submit" value="upload" name="upload">
form>
body>
html>

PHP tidak memiliki kemampuan untuk membuat progress bar ketika file diupload. Karena PHP tidak dapat mengetahui berapa bagian yang telah diupload dan berapa yang belum. Kita perlu menggunakan CGI. Tetapi entah dengan PHP terbaru, siapa tau sudah memiliki class atau fungsi untuk membuat progress bar.
Pertama-tama yang kita lakukan adalah mengecek apakah file kita jpg dengan cara mengecek $myfile_type. Jika hasil dari variabel $myfile_type adalah "image/pjpeg", maka bisa dipastikan bahwa file kita adalah jpg. Berikutnya kita melakukan pengecekan apakah ukuran filenya tidak lebih besar dari 100Kb dengan mengecek variabel $myfile_size. Ingat bahwa 100Kb = 102400Bytes(Rumusnya 1Kb=1024Bytes). Kemudian kita menggunakan fungsi getimagesize() untuk menemukan panjang dan lebar dari gambar yang kita simpan dengan array menggunakan fungsi list(). Kemudian kita cek panjang dan lebar dari gambar apakah tidak lebih dari 100 piksel. Jika semuanya terpenuhi maka filenya tinggal kita copy. Cukup mudah kan? gampang... anda pasti bisa.
Ingat, berhati-hatilah dalam membuat upload file. Saringlah file yang mau diupload, jika anda hanya menginginkan orang mengupload file jpg ya anda harus cek apakah file yang diupload benar-benar file jpg. Bagaimana jika nanti yang diupload malah virus? karena itu waspadalah, waspadalah!!

1 komentar:

Arif.Ust mengatakan...

Artikelnya bagus kata-katanya juga menarik mudah di cerna Trims ya infonya saya tunggu artikel selanjutnya, O..iya Boleh saya minta komentar dari teman untuk artikel di blog saya? Kalau Boleh Kunjungi blog saya, hari ini saya sudah posting artikel tolong komentarnya ya dan kalau bisa komentarnya harus berkaitan dengan artikel saya ini alamatnya http://regedit.blog.telkomspeedy.com/2009/01/26/online-dapat-uang-mau-2/ terima kasih banyak.