Berlatih Membuat Program PHP bagian 7 - File Upload

Upload File


Seperti yang telah kita singgung sebelumnya pada bab 5, bahwa kita juga bisa mengirim file dengan metode post. Kali ini kita akan latihan membuat formulir yang dapat mengirim file kemudian dapat diterima server sehingga nantinya file dapat disimpan dan dipanggil lagi bila dibutuhkan. 

Yang kita perlukan adalah dua file yaitu formulir untuk mengirim, dan satu lagi file untuk memproses hasil kiriman dari formulir tersebut. Langsung saja berikut ini contoh formulirnya:

Contoh formulir.php

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Pilih gambar yang diupload:
    <input type="file" name="fileDiUpload" id="fileToUpload"><br>
    <input type="submit" value="Upload" name="submit">
</form>

</body>
</html>

Bila kita perhatikan pada kode formulir diatas, formulir upload memiliki perbedaan dengan formulir yang biasa (tanpa mengirim file). Pada form upload kita perlu menggunakan methode post, disamping itu ada tambahan atribut enctype="multipart/form-data". Tanpa kedua syarat diatas, maka proses upload akan menemui kegagalan. Sedangkan untuk kolom file yang akan dikirim, tipe input adalah file.
Berlatih Membuat Program PHP bagian 7 - File Upload

File upload.php

<?php
echo "Nama file Upload: ".$_FILES["fileDiUpload"]["name"]."</br>";
echo "Type file Upload: ".$_FILES["fileDiUpload"]["type"]."</br>";
echo "Ukuran file Upload: ".($_FILES["fileDiUpload"]["size"]/1024)."Kb</br>";
echo "Dikirim dengan Nama: ".$_FILES["fileDiUpload"]["tmp_name"]."</br>";
?>

Pada file yang menerima hasil kiriman dari formulir, pengiriman dengan input file dikirim melalui variabel globar berupa array $_FILES. Dengan menggunakan variabel global $_FILES kita dapat mengirim (upload) file dari client ke server menggunakan form. Pada $_FILES terdapat array yang otomatis terkirim, isinya antara lain:
  • $_FILES["fileDiUpload"]["name"] : Nama file yang diupload
  • $_FILES["fileDiUpload"]["type"] : Type file yang diupload
  • $_FILES["fileDiUpload"]["size"] : Ukuran dalam byte yang diupload
  • $_FILES["fileDiUpload"]["tmp-name"] : Nama duplikat atau copy sementara yang kirim
  • $_FILES["fileDiUpload"]["error"] : Kode eror file yang diupload


Catatan:
Proses upload ini perlu diberikan perhatian lebih. Proses upload merupakan salah satu hal yang membahayakan program, Sebab seringkali proses upload ini digunakan sebagai jalan orang tidak bertanggung jawab untuk mengirim file yang berisi kode jahat. Sehingga agar lebih aman perlu manajemen hak user tertentusaja yang boleh melakukan upload.  Tidak sembarang orang boleh melakukan upload.

Agar proses upload lebih sesuai dengan kebutuhan maka kita dapat melakukan penyesuaian. Misalkan kita memberlakukan batasan jenis file yang akan diupload, batasan ukuran dan kita juga bisa memberikan nama sendiri file yang diupload secara otomatis. Sehingga hasil kode programnya seperti berikut:

File upload.php dengan tambahan batasan-batasan yang bisa disesuaikan

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$gambarFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($gambarFileType != "jpg" && $gambarFileType != "png" && $gambarFileType != "jpeg"
&& $gambarFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

Posting Komentar