Dosya yükleme süreci iki ana aşamadan oluşur:
Sunucu Tarafı: Dosyanın geçici dizinden (tmp), kalıcı bir klasöre taşınması.
Veritabanı Tarafı: Dosyanın kendisi değil, dosya adının veya yolunun bir string olarak veritabanına kaydedilmesi.
Dosya göndermek için <form> etiketinde mutlaka enctype="multipart/form-data" özniteliği bulunmalıdır.
HTML
<form action="yukle.php" method="POST" enctype="multipart/form-data">
<label>Resim Seçin:</label>
<input type="file" name="dosya">
<button type="submit" name="uploadBtn">Yükle</button>
</form>
Aşağıdaki kod bloğu; dosya uzantısını kontrol eder, dosyayı benzersiz bir isimle kaydeder ve veritabanına yolu yazar.
PHP
<?php
require_once 'db_baglanti.php';
if (isset($_POST['uploadBtn'])) {
$dosya = $_FILES['dosya'];
$dosyaAd = $dosya['name'];
$dosyaTmp = $dosya['tmp_name'];
$dosyaHata = $dosya['error'];
// Dosya uzantısını kontrol etme
$uzanti = strtolower(pathinfo($dosyaAd, PATHINFO_EXTENSION));
$izin_verilenler = ['jpg', 'jpeg', 'png', 'pdf'];
if (in_array($uzanti, $izin_verilenler)) {
if ($dosyaHata === 0) {
// Benzersiz bir dosya ismi oluşturma (Üzerine yazmayı önler)
$yeniAd = uniqid('', true) . "." . $uzanti;
$hedefYol = 'uploads/' . $yeniAd;
// Dosyayı sunucuya taşıma
if (move_uploaded_file($dosyaTmp, $hedefYol)) {
try {
// PDO ile Veritabanına Kaydetme
$sql = "INSERT INTO gorseller (dosya_yolu) VALUES (:yol)";
$sorgu = $pdo->prepare($sql);
$sorgu->execute(['yol' => $hedefYol]);
echo "Dosya başarıyla yüklendi ve veritabanına kaydedildi!";
} catch (PDOException $e) {
echo "Veritabanı hatası: " . $e->getMessage();
}
} else {
echo "Dosya taşınırken bir hata oluştu.";
}
}
} else {
echo "Geçersiz dosya formatı!";
}
}
?>
uniqid() Kullanın: Aynı isimdeki dosyaların birbirinin üzerine yazılmasını engellemek için her dosyaya benzersiz bir isim verin.
Uzantı Kontrolü: Sadece izin verdiğiniz formatların (.jpg, .pdf vb.) yüklenmesine izin verin. Asla .php veya .exe gibi dosyaları kabul etmeyin.
Dosya Boyutu: $_FILES['dosya']['size'] ile dosya boyutuna üst sınır koyun.
Klasör İzinleri: Yükleme yaptığınız klasörün (örneğin uploads/) yazma izinlerinin (chmod 755) doğru ayarlandığından emin olun.
Kullanıcı formu doldurur ve gönderir.
PHP, dosyayı geçici bir dizine alır.
Dosya adı benzersiz hale getirilir ve hedef klasöre taşınır.
PDO ile bu benzersiz isim veya yol veritabanına INSERT edilir.