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.
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.
Sonuç
PHP ile dinamik bir site içi görsel galeri oluşturmak, web geliştirme sürecinde temel bir yetkinliktir. Bu rehberde, veritabanı tasarımı, dosya yükleme güvenliği, veriyi çekme ve modern CSS ile görselleştirme adımlarını tamamladık. Bir sonraki adım olarak, galeriniz için "Lightbox" efekti (görsele tıklandığında büyümesi) ekleyen JavaScript kütüphanelerini araştırmanızı ve kullanıcıların görselleri düzenlemesine olanak tanıyan bir yönetim paneli geliştirmenizi öneririm.
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