PHP PDO ile Dosya Yükleme Mimarisi - Akın Boztepe Blog

Dosya yükleme süreci iki ana aşamadan oluşur:

  1. Sunucu Tarafı: Dosyanın geçici dizinden (tmp), kalıcı bir klasöre taşınması.

  2. Veritabanı Tarafı: Dosyanın kendisi değil, dosya adının veya yolunun bir string olarak veritabanına kaydedilmesi.


1. HTML Formu Hazırlama

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>

2. PHP ve PDO ile İşleme

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ı!";
    }
}
?>

Güvenlik İçin Altın Kurallar

  • 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.


Özet Akış

  1. Kullanıcı formu doldurur ve gönderir.

  2. PHP, dosyayı geçici bir dizine alır.

  3. Dosya adı benzersiz hale getirilir ve hedef klasöre taşınır.

  4. PDO ile bu benzersiz isim veya yol veritabanına INSERT edilir.

Benzer İçerikler :


Php Pdo Update İşlemi

49

14 March 2026

İstatistikler

Yazar : admin

Kategori : Php Dersleri

Görüntülenme : 21

Tarih : 17 March 2026 - 03:17

Duyuru

Sitemiz 17.03.2026 tarihinde Bakım Çalışması Yapılacaktır.

Reklam

Kategoriler