Tutorial PHP Dasar #13: Upload File dengan PHP

Author Erick Irwansyah
25 Dec 2024
 Tutorial PHP Dasar #13:  Upload File dengan PHP

Hai! Di tutorial kali ini kita akan belajar bagaimana cara meng-upload file menggunakan PHP. Fitur upload file sering digunakan dalam aplikasi web untuk mengizinkan pengguna mengirimkan foto, dokumen, atau file lainnya. Kita akan bahas cara menangani upload file dengan aman dan efisien.


Mengapa Harus Memperhatikan Keamanan Saat Meng-upload File?

Meng-upload file bisa jadi celah keamanan jika tidak ditangani dengan baik. File yang di-upload bisa berisikan script berbahaya, virus, atau file dengan ekstensi yang tidak diinginkan. Oleh karena itu, kita perlu memastikan beberapa hal:

  • Hanya menerima file dengan tipe tertentu (misalnya gambar atau PDF).
  • Memastikan ukuran file tidak melebihi batas yang diizinkan.
  • Memberikan nama unik pada file agar tidak terjadi konflik nama.

Langkah-langkah Upload File dengan PHP

1. Membuat Form untuk Upload File

Pertama, kita buat form HTML untuk menerima file dari pengguna.

Form Upload File (upload_form.php):

<form action="proses_upload.php" method="POST" enctype="multipart/form-data">
    <label for="file">Pilih file untuk di-upload:</label>
    <input type="file" id="file" name="file"><br><br>

    <button type="submit">Upload</button>
</form>

Perhatikan bahwa kita menggunakan enctype="multipart/form-data" dalam form ini. Ini diperlukan agar file dapat dikirim melalui POST.

2. Menangani Upload di PHP

Sekarang kita akan menulis skrip PHP untuk menangani file yang di-upload.

Proses Upload File (proses_upload.php):

<?php
// Tentukan direktori tempat file akan disimpan
$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$uploadOk = 1; // Flag untuk status upload
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// Cek apakah file yang di-upload adalah gambar
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["file"]["tmp_name"]);
    if($check !== false) {
        echo "File adalah gambar - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File bukan gambar.";
        $uploadOk = 0;
    }
}

// Cek apakah file sudah ada
if (file_exists($target_file)) {
    echo "File sudah ada.";
    $uploadOk = 0;
}

// Cek ukuran file (maksimal 5MB)
if ($_FILES["file"]["size"] > 5000000) {
    echo "Maaf, ukuran file terlalu besar.";
    $uploadOk = 0;
}

// Cek format file (hanya izinkan gambar JPG, JPEG, PNG, GIF)
if ($imageFileType != "jpg" && $imageFileType != "jpeg" && $imageFileType != "png" && $imageFileType != "gif") {
    echo "Maaf, hanya file gambar JPG, JPEG, PNG & GIF yang diperbolehkan.";
    $uploadOk = 0;
}

// Cek apakah ada kesalahan pada file
if ($uploadOk == 0) {
    echo "Maaf, file Anda tidak dapat di-upload.";
} else {
    // Coba untuk memindahkan file ke direktori yang ditentukan
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        echo "File ". basename($_FILES["file"]["name"]). " berhasil di-upload.";
    } else {
        echo "Terjadi kesalahan saat meng-upload file.";
    }
}
?>

Penjelasan:

  1. Cek apakah file adalah gambar: Kita menggunakan getimagesize() untuk memverifikasi apakah file yang di-upload adalah gambar.
  2. Cek ukuran file: File yang di-upload dibatasi ukurannya, dalam contoh ini maksimal 5MB.
  3. Cek ekstensi file: Hanya file dengan ekstensi tertentu yang diperbolehkan, misalnya JPG, JPEG, PNG, dan GIF.
  4. Menangani upload: Jika semua pengecekan lulus, kita memindahkan file ke direktori yang telah ditentukan dengan move_uploaded_file().

3. Menampilkan File yang Diupload

Jika file sudah berhasil di-upload, kita bisa menampilkan file tersebut, misalnya untuk gambar, kita bisa menampilkannya di halaman web.

Menampilkan Gambar yang Diupload (tampil_gambar.php):

<?php
$target_file = "uploads/" . basename($_FILES["file"]["name"]);
echo "<img src='$target_file' alt='Gambar yang di-upload'>";
?>

Praktik Studi Kasus: Sistem Upload Foto Profil

Kita buat form untuk pengguna meng-upload foto profil dan simpan foto tersebut di direktori uploads/.

Form Upload Foto Profil (upload_foto.php):

<form action="proses_upload_foto.php" method="POST" enctype="multipart/form-data">
    <label for="foto">Pilih foto profil:</label>
    <input type="file" id="foto" name="foto"><br><br>

    <button type="submit">Upload Foto</button>
</form>

Proses Upload Foto Profil (proses_upload_foto.php):

<?php
$target_dir = "uploads/profil/";
$target_file = $target_dir . basename($_FILES["foto"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// Cek apakah file adalah gambar
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["foto"]["tmp_name"]);
    if($check !== false) {
        echo "File adalah gambar - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File bukan gambar.";
        $uploadOk = 0;
    }
}

// Cek ukuran file
if ($_FILES["foto"]["size"] > 2000000) {
    echo "Maaf, ukuran foto terlalu besar.";
    $uploadOk = 0;
}

// Cek ekstensi file
if ($imageFileType != "jpg" && $imageFileType != "jpeg" && $imageFileType != "png" && $imageFileType != "gif") {
    echo "Maaf, hanya file gambar JPG, JPEG, PNG & GIF yang diperbolehkan.";
    $uploadOk = 0;
}

if ($uploadOk == 0) {
    echo "Maaf, foto Anda tidak dapat di-upload.";
} else {
    if (move_uploaded_file($_FILES["foto"]["tmp_name"], $target_file)) {
        echo "Foto profil berhasil di-upload!";
    } else {
        echo "Terjadi kesalahan saat meng-upload foto.";
    }
}
?>

Apa Selanjutnya?
Saat ini kamu sudah mengetahui pondasi utama bahasa pemrograman PHP, Selanjutnya kamu sudah siap untuk challange berikutnya, kita akan belajar tentang PHyang lebih advanced lagi, nantikan di series tutorial PHP Lanjutan


Sekianlah belajar PHP tentang upload file. Dengan fitur ini, kamu bisa memberikan pengalaman interaktif bagi pengguna. Artikel ini sangat berguna sebelum kamu melanjutkan ke tutorial PHP selanjutnya di www.code80vity.com. Sampai jumpa di pembahasan berikutnya, dan jangan lupa terus eksplorasi PHP!

Tutorial Terkait Lainnya

Comments

Please login to post a comment.
No comments yet. Be the first to comment!