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!
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:
- Kita periksa jika formulir telah dikirimkan.
- Kita tentukan direktori target untuk unggahan.
- Kita bentuk path file target menggunakan nama file asli.
- Kita gunakan
move_uploaded_file()
untuk memindahkan file dari lokasi sementara ke direktori target. - 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:
- Kita gunakan
foreach
loop untuk mengulang setiap file yang diunggah. - Untuk setiap file, kita bentuk path target dan mencoba memindahkan file.
- Jika file gagal diunggah, kita mengatur flag dan memutuskan loop.
- 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:
- Kita periksa ukuran file untuk memastikan itu tidak lebih besar dari 5MB.
- Kita memverifikasi bahwa tipe file adalah JPG atau PNG.
- 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