PHP File Upload: Mengunggah File ke Server

Fitur unggah file adalah salah satu yang paling umum di aplikasi web — untuk foto profil, gambar produk, atau lampiran dokumen. Namun, PHP File Upload juga merupakan salah satu titik yang paling rawan keamanan jika tidak ditangani dengan benar. Panduan ini membahas cara mengunggah file dengan aman.

Membuat Form Upload

Form untuk upload wajib memiliki dua atribut khusus: method="post" dan enctype="multipart/form-data". Tanpa enctype, file tidak akan terkirim:

<form method="post" enctype="multipart/form-data">
  <input type="file" name="berkas">
  <button type="submit">Unggah</button>
</form>

Memahami Superglobal $_FILES

File yang diunggah dapat diakses melalui array $_FILES, yang berisi informasi penting:

<?php
$_FILES["berkas"]["name"];     // nama asli file
$_FILES["berkas"]["tmp_name"]; // lokasi sementara di server
$_FILES["berkas"]["size"];     // ukuran (byte)
$_FILES["berkas"]["type"];     // MIME type
?>

Memindahkan File yang Diunggah

File awalnya disimpan di lokasi sementara. Untuk menyimpannya permanen, gunakan move_uploaded_file():

<?php
$tujuan = "uploads/" . $_FILES["berkas"]["name"];
move_uploaded_file($_FILES["berkas"]["tmp_name"], $tujuan);
?>

Validasi Keamanan (Langkah Wajib!)

Kode di atas belum aman. Anda harus memvalidasi tipe dan ukuran, serta mengganti nama file agar tidak berbahaya:

<?php
$file = $_FILES["berkas"];
$ext = strtolower(pathinfo($file["name"], PATHINFO_EXTENSION));
$izin = ["jpg", "jpeg", "png", "pdf"];

if (in_array($ext, $izin) && $file["size"] < 2 * 1024 * 1024) {
    // nama acak agar tidak menimpa & lebih aman
    $namaBaru = uniqid() . "." . $ext;
    move_uploaded_file($file["tmp_name"], "uploads/" . $namaBaru);
    echo "Berhasil diunggah sebagai $namaBaru";
} else {
    echo "File tidak diizinkan atau terlalu besar.";
}
?>

Mengapa langkah ini penting? Tanpa validasi, penyerang bisa mengunggah file .php berbahaya dan menjalankannya di server Anda. Membatasi ekstensi dan mengganti nama file menutup celah ini.

Tips Keamanan Tambahan

  • Simpan file di folder yang tidak bisa mengeksekusi PHP.
  • Periksa juga MIME type dengan getimagesize() untuk gambar.
  • Batasi ukuran maksimum lewat validasi dan pengaturan upload_max_filesize.

Kesalahan Umum

  • Lupa enctype pada form sehingga file tidak terkirim.
  • Mempercayai nama file dari pengguna — selalu ganti dengan nama acak yang aman.

Kesimpulan

PHP File Upload mudah diterapkan, tetapi keamanan adalah prioritas. Selalu validasi ekstensi dan ukuran, ganti nama file, dan simpan di lokasi yang aman agar fitur unggah tidak menjadi pintu masuk serangan.

Referensi: untuk penjelasan lebih mendalam, kunjungi dokumentasi resmi PHP (php.net).

Baca Juga

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *