Tutorial PHP #19: Upload File di PHP
1. Dasar Upload File
PHP mendukung upload file melalui form HTML. Untuk mengaktifkan upload, form harus menggunakan:
- Method
POST - Attribute
enctype="multipart/form-data"
<form method="POST" action="upload.php" enctype="multipart/form-data">
<label>Pilih Gambar:</label>
<input type="file" name="gambar" accept="image/*">
<button type="submit">Upload</button>
</form>
2. Superglobal $_FILES
PHP menyimpan info file yang diupload di $_FILES.
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// Lihat semua info file yang diupload
print_r($_FILES["gambar"]);
}
// Output:
// Array (
// [name] => foto.jpg - nama asli file
// [type] => image/jpeg - MIME type
// [tmp_name] => C:xampp mpphpXXXX.tmp - lokasi temp
// [error] => 0 - 0 = tidak ada error
// [size] => 245760 - ukuran dalam bytes
// )
?>
3. Upload dengan Validasi Lengkap
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$file = $_FILES["gambar"];
$error = [];
// 1. Cek apakah ada error saat upload
if ($file["error"] !== UPLOAD_ERR_OK) {
$error[] = "Terjadi error saat upload";
} else {
// 2. Validasi ukuran file (max 2MB)
$maxSize = 2 * 1024 * 1024; // 2 MB dalam bytes
if ($file["size"] > $maxSize) {
$error[] = "Ukuran file maksimal 2MB";
}
// 3. Validasi tipe file (gunakan finfo untuk keamanan)
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $file["tmp_name"]);
finfo_close($finfo);
$allowedTypes = ["image/jpeg", "image/png", "image/gif", "image/webp"];
if (!in_array($mimeType, $allowedTypes)) {
$error[] = "Tipe file tidak diizinkan. Hanya JPG, PNG, GIF, WEBP";
}
// 4. Validasi ekstensi
$allowedExt = ["jpg", "jpeg", "png", "gif", "webp"];
$ext = strtolower(pathinfo($file["name"], PATHINFO_EXTENSION));
if (!in_array($ext, $allowedExt)) {
$error[] = "Ekstensi file tidak diizinkan";
}
}
if (empty($error)) {
// 5. Generate nama file unik
$namaFile = uniqid("img_") . "." . $ext;
$uploadDir = "uploads/";
// 6. Buat folder jika belum ada
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
// 7. Pindahkan file dari temp ke folder tujuan
if (move_uploaded_file($file["tmp_name"], $uploadDir . $namaFile)) {
echo "Upload berhasil! File: " . $namaFile;
} else {
echo "Gagal memindahkan file";
}
} else {
foreach ($error as $e) {
echo "- $e <br>";
}
}
}
?>
4. Upload Multiple File
<form method="POST" action="upload.php" enctype="multipart/form-data">
<input type="file" name="foto[]" multiple>
<button type="submit">Upload Semua</button>
</form>
<?php
if (!empty($_FILES["foto"]["name"][0])) {
$totalFile = count($_FILES["foto"]["name"]);
for ($i = 0; $i < $totalFile; $i++) {
$namaFile = uniqid() . "_" . basename($_FILES["foto"]["name"][$i]);
move_uploaded_file(
$_FILES["foto"]["tmp_name"][$i],
"uploads/" . $namaFile
);
echo "Berhasil upload: $namaFile <br>";
}
}
?>
5. Kode Error Upload
UPLOAD_ERR_OK (0)- tidak ada errorUPLOAD_ERR_INI_SIZE (1)- file melebihi batas di php.iniUPLOAD_ERR_FORM_SIZE (2)- file melebihi MAX_FILE_SIZE di formUPLOAD_ERR_PARTIAL (3)- file hanya terupload sebagianUPLOAD_ERR_NO_FILE (4)- tidak ada file yang diupload
6. Ringkasan
- Form upload wajib pakai
enctype="multipart/form-data" - Data file diakses via
$_FILES - Selalu validasi ukuran, tipe MIME, dan ekstensi file
- Gunakan
uniqid()untuk nama file yang unik dan hindari konflik - Gunakan
move_uploaded_file()- lebih aman darirename()ataucopy()
Tutorial berikutnya membahas OOP dasar: class dan object di PHP.
.jpg)
