PHP - $_FILES: Handling File Uploads in PHP

Halo, para pengembang PHP yang bersemangat! Hari ini, kita akan membanjiri ke salah satu aspek yang paling menarik dalam pengembangan web: penanganan unggah file. Sebagai guru ilmu komputer yang ramah di lingkungan tetangga Anda, saya di sini untuk mengarahkan Anda melalui segala hal tentang superglobal $_FILES di PHP. Jadi, ambil minumannya yang favorit, nyamanlah, dan mari kita mulai petualangan unggah file ini bersama!

PHP - $_FILES

Apa itu $_FILES?

Sebelum kita masuk ke kode, mari kita pahami apa itu $_FILES. Di PHP, $_FILES adalah array superglobal yang berisi informasi tentang file yang diunggah. Ketika pengguna mengirimkan formulir dengan input file, PHP secara otomatis mengisi array ini dengan detil tentang file yang diunggah.

Pertimbangkan $_FILES seperti kotak ajaib yang menangkap semua informasi penting tentang file yang pengguna Anda mencoba mengirim ke server Anda. Itu seperti memiliki asisten pribadi yang mencatat semua data yang berkaitan dengan file untuk Anda!

Struktur $_FILES

Mari kita lihat struktur array $_FILES:

Key Deskripsi
name Nama asli file di mesin klien
type Tipe MIME file
size Ukuran file dalam byte
tmp_name Nama file sementara yang disimpan di server
error Kode kesalahan yang terkait dengan unggah file

Sekarang kita tahu apa yang berada di $_FILES, mari kita masuk ke beberapa contoh praktis!

Contoh 1: Unggah File Dasar

Mari kita mulai dengan contoh sederhana mengunggah satu file.

Form HTML

<form action="upload.php" method="post" enctype="multipart/form-data">
Pilih gambar untuk diunggah:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Unggah Gambar" name="submit">
</form>

Skrip PHP (upload.php)

<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "File " . basename($_FILES["fileToUpload"]["name"]) . " telah diunggah.";
} else {
echo "Maaf, terjadi kesalahan saat mengunggah file Anda.";
}
}
?>

Dalam contoh ini, kita melakukan beberapa hal:

  1. Kita periksa jika formulir telah dikirimkan.
  2. Kita tentukan direktori target untuk unggahan.
  3. Kita bentuk path file target menggunakan nama file asli.
  4. Kita gunakan move_uploaded_file() untuk memindahkan file dari lokasi sementara ke direktori target.
  5. Akhirnya, kita memberikan umpan balik kepada pengguna tentang kesuksesan atau kegagalan unggahan.

Ingat, teman-teman sekolah, selalu validasi danbersihkan file unggahan dalam kasus dunia nyata. Kita tidak ingin virus kecil menyusup ke server kita!

Contoh 2: Unggah File Banyak

Sekarang, mari kita tingkatkan dan penanganan unggah file banyak!

Form HTML

<form action="upload_multiple.php" method="post" enctype="multipart/form-data">
Pilih gambar untuk diunggah:
<input type="file" name="filesToUpload[]" id="filesToUpload" multiple>
<input type="submit" value="Unggah Gambar" name="submit">
</form>

Skrip PHP (upload_multiple.php)

<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$upload_success = true;

foreach($_FILES["filesToUpload"]["tmp_name"] as $key => $tmp_name) {
$target_file = $target_dir . basename($_FILES["filesToUpload"]["name"][$key]);

if (!move_uploaded_file($tmp_name, $target_file)) {
$upload_success = false;
break;
}
}

if ($upload_success) {
echo "Semua file telah diunggah sukses.";
} else {
echo "Maaf, terjadi kesalahan saat mengunggah satu atau lebih file.";
}
}
?>

Dalam contoh ini, kita penanganan unggahan file banyak:

  1. Kita gunakan foreach loop untuk mengulang setiap file yang diunggah.
  2. Untuk setiap file, kita bentuk path target dan mencoba memindahkan file.
  3. Jika file gagal diunggah, kita mengatur flag dan memutuskan loop.
  4. Akhirnya, kita memberikan umpan balik berdasarkan apakah semua file diunggah sukses.

Tips pro: Dalam aplikasi dunia nyata, Anda mungkin ingin memberikan umpan balik yang lebih rinci, seperti file mana yang gagal diunggah dan mengapa.

Contoh 3: Validasi File

Mari kita tambahkan validasi file dasar ke proses unggah kita. Kita akan memeriksa ukuran dan tipe file.

Form HTML

<form action="upload_validate.php" method="post" enctype="multipart/form-data">
Pilih gambar untuk diunggah (Maks 5MB, JPG/PNG saja):
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Unggah Gambar" name="submit">
</form>

Skrip PHP (upload_validate.php)

<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

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

// Izinkan format file tertentu
if($imageFileType != "jpg" && $imageFileType != "png") {
echo "Maaf, hanya file JPG & PNG yang diizinkan.";
$uploadOk = 0;
}

// Periksa jika $uploadOk diatur ke 0 oleh kesalahan
if ($uploadOk == 0) {
echo "Maaf, file Anda tidak diunggah.";
// Jika semua baik, cobalah untuk mengunggah file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "File " . basename($_FILES["fileToUpload"]["name"]) . " telah diunggah.";
} else {
echo "Maaf, terjadi kesalahan saat mengunggah file Anda.";
}
}
}
?>

Dalam contoh ini, kita telah menambahkan beberapa validasi penting:

  1. Kita periksa ukuran file untuk memastikan itu tidak lebih besar dari 5MB.
  2. Kita memverifikasi bahwa tipe file adalah JPG atau PNG.
  3. Hanya jika kedua kondisi ini terpenuhi, kita melanjutkan unggahan.

Ingat, teman-teman sekolah, validasi adalah pertahanan pertama Anda melawan unggahan yang berbahaya. Selalu validasi secara teliti!

Kesimpulan

Dan begitulah, teman-teman! Kita telah melintasi negeri $_FILES, dari unggahan dasar hingga penanganan file banyak dan bahkan menambahkan validasi. Ingat, dengan kekuatan yang besar datang tanggung jawab yang besar. Selalu bersihkan dan validasi unggahan Anda, dan jangan pernah mengandalkan input pengguna secara mentah.

Buat terus berlatih, tetap curiga, dan selamat coding! Dan ingat, di dunia pemrograman, setiap kesalahan adalah kesempatan belajar baru yang disembunyikan.

Credits: Image by storyset