Php İle Web Sitesi İçin Dinamik Bir Site İçi Görsel Galeri Nasıl Yapılır?

Php İle Web Sitesi İçin Dinamik Bir Site İçi Görsel Galeri Nasıl Yapılır?
Php İle Web Sitesi İçin Dinamik Bir Site İçi Görsel Galeri Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Dinamik bir galeri sistemi kurmak için sunucunuzda belirli teknolojilerin kurulu ve yapılandırılmış olması gerekir. 2026 yılı itibarıyla önerilen minimum gereksinimler şunlardır:

  • PHP 8.2 veya üzeri: Güncel sözdizimi ve performans iyileştirmeleri için gereklidir.
  • MySQL veya MariaDB: Görsel meta verilerini (dosya yolu, başlık, yüklenme tarihi) saklamak için kullanılır.
  • PDO (PHP Data Objects): Veritabanı işlemlerinde SQL injection saldırılarına karşı en güvenli yöntemdir.
  • Yerel Sunucu Ortamı: XAMPP, WAMP veya Docker tabanlı bir yerel geliştirme ortamı.

Projenizin kök dizininde uploads/ adında bir klasör oluşturun ve bu klasöre yazma izinlerinin (CHMOD 755 veya 775) verildiğinden emin olun. Bu klasör, kullanıcıların yüklediği tüm görsellerin barınacağı merkez olacaktır.

Veritabanı Tasarımı ve Tablo Oluşturma

Dinamik bir galeri için görsellerin bilgilerini tutacak bir veritabanı tablosuna ihtiyacımız var. Veritabanı tasarımı, uygulamanızın hızını ve yönetilebilirliğini doğrudan etkiler. Aşağıdaki SQL sorgusu, görsellerinizi yönetmek için gereken temel tablo yapısını oluşturur.

CREATE TABLE galeri (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dosya_adi VARCHAR(255) NOT NULL,
    baslik VARCHAR(100),
    yuklenme_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Bu tablo, her görsel için benzersiz bir kimlik, dosya ismi ve isteğe bağlı bir başlık tutar. Veritabanı bağlantısı için config.php adında bir dosya oluşturarak PDO bağlantısını yapılandırmalıyız.

Görsel Yükleme İşlemi ve Güvenlik

Görselleri sisteme dinamik olarak dahil etmek için bir yükleme formuna ihtiyacımız var. Ancak, kullanıcıdan gelen her dosyayı doğrudan sunucuya kaydetmek büyük bir güvenlik açığıdır. Dosya uzantılarını kontrol etmeli ve dosya isimlerini benzersiz hale getirmeliyiz.

Kritik Güvenlik Uyarısı: Sunucuya yüklenen dosyalarda mutlaka MIME tipi kontrolü yapın ve .php gibi çalıştırılabilir dosyaların yüklenmesini engelleyin. Dosya isimlerini time() veya uniqid() fonksiyonları ile benzersiz yaparak üzerine yazma saldırılarını önleyin.

Dinamik Galeri Listeleme Mantığı

Veritabanına kaydedilen görselleri web sayfasında göstermek için SELECT sorgusu kullanırız. Bu adımda, görselleri bir döngü içerisinde HTML etiketlerine yerleştiriyoruz. Bu işlem, sayfanın her yenilendiğinde veritabanındaki en güncel veriyi çekmesini sağlar.

Burada htmlspecialchars() fonksiyonunun kullanımı, XSS (Cross-Site Scripting) saldırılarına karşı veriyi temizlemek için zorunludur. Kullanıcıdan gelen veriyi doğrudan HTML içine yazdırmak asla güvenli değildir.

Galeri Yöntemlerinin Karşılaştırılması

Yöntem Avantaj Dezavantaj
Veritabanı Destekli Dinamik yönetim, sıralama ve arama kolaylığı. Ekstra veritabanı sorgusu yükü.
Klasör Tarama Hızlı kurulum, veritabanı gerektirmez. Meta veri (başlık, açıklama) eklemek zordur.

CSS ile Görsel Galeri Tasarımı

PHP ile veriyi çektikten sonra, kullanıcı deneyimini iyileştirmek için CSS Grid yapısını kullanmak en modern yaklaşımdır. Bu yapı, görsellerin ekran boyutuna göre otomatik hizalanmasını sağlar.

.galeri-container {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    gap: 15px;
    padding: 20px;
}
.resim-kutu img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    transition: transform 0.3s;
}
.resim-kutu img:hover {
    transform: scale(1.05);
}

Sıkça Sorulan Sorular

Veritabanı yerine neden klasör taraması yapmıyoruz?

Klasör taraması basit projeler için uygundur ancak görsellere başlık eklemek, kategorize etmek veya silme işlemi yapmak istediğinizde veritabanı çok daha esnek ve ölçeklenebilir bir çözüm sunar.

Görsellerin boyutunu nasıl optimize ederim?

PHP'nin GD Library veya Imagick kütüphanelerini kullanarak yükleme anında görselleri yeniden boyutlandırabilir ve sıkıştırabilirsiniz. Bu, site hızınız için kritik öneme sahiptir.

SQL Injection'dan nasıl korunurum?

Her zaman PDO veya MySQLi kütüphanesinde hazırlanan ifadeleri (Prepared Statements) kullanın. Asla kullanıcıdan gelen veriyi doğrudan sorgu dizesine eklemeyin.

Galeriye "Sil" butonu nasıl eklenir?

Her görselin yanına bir ID ile eşleşen bir form butonu ekleyerek, DELETE FROM galeri WHERE id = ? sorgusu ile veritabanından ve unlink() fonksiyonu ile sunucudan dosyayı silebilirsiniz.

Görselleri farklı klasörlerde saklamak mümkün mü?

Evet, veritabanındaki dosya_adi sütununa dosya yolunu tam olarak kaydederek (örneğin: uploads/2026/gorsel.jpg) görselleri tarih bazlı klasörlere ayırabilirsiniz.

Sorumluluk Reddi: Bu makaledeki kodlar eğitim amaçlıdır. Üretim ortamında (production) kullanmadan önce mutlaka ek güvenlik katmanları (CSRF koruması, dosya boyutu limitleri, kullanıcı yetkilendirmesi) ekleyin. Kodların güvenliğinden geliştirici sorumludur.

Görsel Galerilerde Performans Optimizasyonu: Lazy Loading

Dinamik galerilerde en büyük performans sorunu, sayfa yüklendiğinde tüm görsellerin aynı anda sunucudan istenmesidir. Özellikle onlarca görselin olduğu bir galeride, kullanıcı henüz sayfanın altına inmeden tüm görsellerin yüklenmesi bant genişliğini boşa harcar. Modern web standartlarında bunu çözmek için Lazy Loading (Tembel Yükleme) tekniğini kullanmalıyız.

Modern tarayıcılar artık HTML düzeyinde loading="lazy" niteliğini desteklemektedir. PHP ile oluşturduğunuz döngüde bu özelliği eklemek, sayfa açılış hızınızı ciddi oranda artıracaktır.



    

                                
                
                
Bu yazıya tepkinizi paylaşın:
Kerem Aydın

Mutfağından bahçesine, yaşamın her alanında hızlı ve etkili çözüm rehberleri hazırlıyorum. Bilgi kirliliğinden uzak, doğrudan sonuca odaklanan içerikler üretiyorum.

Yorumlar (0)

Yorum Yaz