Upload File dengan PHP
Mengizinkan user untuk mengupload file (seperti foto profil, dokumen PDF, atau gambar produk) adalah fitur yang sangat sering dipakai.
1. Persiapan Form HTML
Untuk mengupload file, ada dua aturan wajib di form HTML:
method="POST"— File tidak bisa dikirim via GET.enctype="multipart/form-data"— Atribut ini memberi tahu browser bahwa form mengandung file, bukan hanya teks biasa.
2. Memahami $_FILES
Ketika form di-submit, data teks biasa masuk ke $_POST, sedangkan data file masuk ke superglobal array $_FILES.
Jika atribut name di input adalah name="foto", maka PHP akan membuat array $_FILES['foto'] yang berisi:
Cara kerja upload PHP:
File yang diupload pertama kali akan disimpan di folder sementara (temporary folder) di server. Tugas kita adalah memindahkan file tersebut dari folder sementara ke folder project kita menggunakan fungsi move_uploaded_file().
3. Script Upload Sederhana
Buat file proses-upload.php:
Fungsi move_uploaded_file() akan gagal jika folder tujuannya belum ada. Pastikan kamu sudah membuat folder bernama uploads di dalam folder project kamu.
4. Keamanan Upload (Sangat Penting!)
Script di atas sangat berbahaya jika digunakan di internet! Orang bisa mengupload file PHP jahat (misal hack.php) dan mengambil alih servermu.
Kita harus melakukan validasi:
- Validasi jenis file (hanya izinkan gambar).
- Validasi ukuran file (jangan terlalu besar).
- Ubah nama file agar unik dan aman dari karakter aneh.
Script Upload Aman
Menyimpan File vs Database
Pemula sering bertanya: "Apakah file gambar disimpan di dalam database MySQL?"
Jawaban: TIDAK. Menyimpan file biner secara langsung ke dalam kolom database (tipe BLOB) akan membuat database menjadi sangat besar dan lambat.
Praktik terbaik (Best Practice):
- Simpan file aslinya di dalam folder server (misal: folder
uploads/). - Simpan nama filenya saja (teks string, misal:
64a7b_kucing.jpg) ke dalam database MySQL. - Saat ingin menampilkan, ambil nama file dari database dan pasang di tag HTML:
<img src="uploads/<?= $row['foto'] ?>">.
Selanjutnya
Kita sudah mempelajari query lanjutan, pagination, dan pengelolaan file. Semua ini akan menjadi fondasi yang kuat saat membangun fitur seperti sistem login dan autentikasi.
Mari pelajari cara mengamankan halaman web dengan: Session & Autentikasi →.