PHP ile Güvenli Dosya Yükleme İşlemleri
PHP'de dosya yükleme işlemi $_FILES süper küreseli ile yönetilir. Ancak dosyayı sunucuya kabul etmeden önce
güvenlik denetimlerinden geçirmek, sitenizin sağlığı için en kritik adımdır.
Dosya Yükleme Formunun Gereksinimleri
Bir HTML formunun dosya gönderebilmesi için iki şart vardır:
method="POST"olmalıdır.enctype="multipart/form-data"özelliği mutlaka eklenmelidir.
Kod Örneği: Kontrollü Dosya Yükleme
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$klasor = "yuklemeler/";
$dosya = $klasor . basename($_FILES["dosya"]["name"]);
$uzanti = strtolower(pathinfo($dosya, PATHINFO_EXTENSION));
// 1. Dosya Türü Kontrolü (Sadece Resimlere İzin Ver)
$izin_verilenler = ["jpg", "png", "jpeg", "gif"];
if (!in_array($uzanti, $izin_verilenler)) {
echo "Hata: Sadece resim dosyalarına izin verilir!";
}
// 2. Boyut Kontrolü (Max 2MB)
elseif ($_FILES["dosya"]["size"] > 2000000) {
echo "Hata: Dosya boyutu 2MB'dan büyük olamaz!";
}
// 3. Dosyayı Taşıma
else {
if (move_uploaded_file($_FILES["dosya"]["tmp_name"], $dosya)) {
echo "Dosya başarıyla yüklendi: " . htmlspecialchars(basename($_FILES["dosya"]["name"]));
} else {
echo "Dosya yüklenirken bir hata oluştu.";
}
}
}
?>
<!-- HTML Form -->
<form action="" method="post" enctype="multipart/form-data" class="mt-3">
<input type="file" name="dosya" class="form-control mb-2">
<button type="submit" class="btn btn-primary">Yükle</button>
</form>
🛡️ Güvenlik İpucu: Kullanıcının gönderdiği dosya adını direkt kullanmak yerine,
uniqid() gibi fonksiyonlarla dosyayı yeniden isimlendirmek, üzerine yazma hatalarını ve kötü niyetli saldırıları engeller.
$_FILES Dizisi Parametreleri
Dosya yüklendiğinde PHP şu bilgileri bize sunar:
$_FILES["dosya"]["name"]: Dosyanın orijinal adı.$_FILES["dosya"]["tmp_name"]: Dosyanın sunucudaki geçici kopyası.$_FILES["dosya"]["size"]: Dosyanın bayt (byte) cinsinden boyutu.$_FILES["dosya"]["error"]: Varsa yükleme hatası kodu.