Yükleniyor...

Dosya Yükleme

PHP'de Dosya Yükleme, kullanıcıların bilgisayarlarından sunucuya dosya göndermelerini sağlayan kritik bir özelliktir. Bu özellik, içerik yönetim sistemleri, e-ticaret platformları, kurumsal portallar ve dosya depolama gerektiren herhangi bir web uygulaması için vazgeçilmezdir. Dosya yükleme işlemlerini doğru ve güvenli şekilde uygulamak, yalnızca uygulamanın işlevselliğini artırmakla kalmaz, aynı zamanda güvenlik, performans ve sistem mimarisi açısından da kritik öneme sahiptir.
Bu ileri düzey eğitimde, Dosya Yükleme sürecini PHP'nin temel kavramlarıyla birleştirerek öğreneceksiniz: doğru sözdizimi kullanımı, veri yapıları, algoritmalar ve nesne yönelimli programlama (OOP) prensipleri. Temel yükleme işlemlerinden başlayarak, dosya boyutu kontrolü, MIME tipi doğrulama, hata yönetimi ve güvenlik önlemleri gibi gelişmiş teknikleri kapsayan uygulamalı örnekler sunulacaktır. Ayrıca, yükleme işlemini profesyonel PHP projelerine entegre etmek için dizin yönetimi, izinler ve performans optimizasyonu konuları ele alınacaktır.
Eğitimin sonunda, kullanıcı dosyalarını güvenli ve etkili bir şekilde sunucuya yükleyen, hataları doğru yöneten ve yeniden kullanılabilir sınıflar ile tasarlanmış çözümler geliştirebileceksiniz. Ayrıca, yaygın PHP hatalarından kaçınma, bellek sızıntılarını önleme ve verimli algoritmalar kullanma konularında deneyim kazanacaksınız.

Temel Örnek

php
PHP Code
<?php
// Yükleme dizinini ayarlama
$uploadDir = __DIR__ . '/uploads/';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}

// Dosya yükleme işlemi
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['dosya'])) {
$dosya = $_FILES['dosya'];
$dosyaAdi = basename($dosya['name']);
$hedef = $uploadDir . $dosyaAdi;

// Hata kontrolü
if ($dosya['error'] === UPLOAD_ERR_OK) {
if (move_uploaded_file($dosya['tmp_name'], $hedef)) {
echo "Dosya başarıyla yüklendi: $dosyaAdi";
} else {
echo "Dosya hedef klasöre taşınamadı.";
}
} else {
echo "Yükleme hatası: kod " . $dosya['error'];
}
}
?>

<form method="post" enctype="multipart/form-data">
<input type="file" name="dosya" required>
<button type="submit">Dosya Yükle</button>
</form>

Bu temel örnek, PHP'de Dosya Yükleme sürecinin güvenli ve yapılandırılmış bir şekilde nasıl gerçekleştirileceğini gösterir. İlk olarak, DIR ile dizin yolu belirlenir, bu sayede mutlak yol kullanımı sağlanır ve göreceli yollardan kaynaklanan hatalar önlenir. is_dir ile dizin varlığı kontrol edilir, yoksa mkdir ile oluşturulur ve 0755 izinleri atanır.
$_FILES süper globali, yüklenen dosyanın adı, boyutu, tipi ve hata kodunu içerir. basename fonksiyonu, kullanıcı tarafından sağlanan dosya adını güvenli bir şekilde almak için kullanılır ve potansiyel zararlı dizin yollarını engeller. $dosya['error'] kontrolü, boyut aşımı veya geçici sunucu hataları gibi yükleme problemlerini yakalamaya yardımcı olur. move_uploaded_file, dosyayı geçici konumdan kalıcı konuma güvenli bir şekilde taşır.
HTML formu, enctype="multipart/form-data" ile POST yöntemi kullanılarak dosya yükleme işlemini destekler ve required ile istemci tarafında doğrulama sağlar. Bu örnek, PHP projelerinde güvenli dosya yükleme ve hataların etkin yönetimini öğretir.

Pratik Örnek

php
PHP Code
<?php
class DosyaYukleyici {
private string $dizin;
private array $izinliTipler;
private int $maksBoyut;

public function __construct(string $dizin, array $izinliTipler, int $maksBoyut) {
$this->dizin = rtrim($dizin, '/') . '/';
$this->izinliTipler = $izinliTipler;
$this->maksBoyut = $maksBoyut;

if (!is_dir($this->dizin)) {
mkdir($this->dizin, 0755, true);
}
}

public function yukle(array $dosya): bool {
$dosyaAdi = basename($dosya['name']);
$hedef = $this->dizin . $dosyaAdi;

// Boyut kontrolü
if ($dosya['size'] > $this->maksBoyut) {
throw new RuntimeException("Dosya çok büyük.");
}

// MIME tipi kontrolü
$dosyaTipi = mime_content_type($dosya['tmp_name']);
if (!in_array($dosyaTipi, $this->izinliTipler)) {
throw new RuntimeException("Dosya tipi izinli değil.");
}

// Hata kontrolü
if ($dosya['error'] !== UPLOAD_ERR_OK) {
throw new RuntimeException("Yükleme hatası: kod " . $dosya['error']);
}

return move_uploaded_file($dosya['tmp_name'], $hedef);
}
}

// Sınıf kullanımı
$yukleyici = new DosyaYukleyici(__DIR__ . '/uploads', ['image/jpeg', 'image/png', 'application/pdf'], 5 * 1024 * 1024);

try {
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['dosya'])) {
if ($yukleyici->yukle($_FILES['dosya'])) {
echo "Dosya başarıyla yüklendi!";
}
}
} catch (RuntimeException $e) {
echo "Hata: " . $e->getMessage();
}
?>

<form method="post" enctype="multipart/form-data">
<input type="file" name="dosya" required>
<button type="submit">Dosya Yükle</button>
</form>

Pratik örnek, nesne yönelimli programlama yaklaşımıyla Dosya Yükleme işlemini kapsüller. DosyaYukleyici sınıfı, dizin oluşturma, dosya boyutu ve MIME tipi doğrulama, hata yönetimi gibi tüm işlemleri yönetir. Yapıcı metod ile dizin, izinli tipler ve maksimum boyut parametreleri ayarlanabilir, bu da sınıfın farklı projelerde yeniden kullanılabilirliğini sağlar.
yukle metodu, boyut kontrolünü $dosya['size'], MIME tipi kontrolünü mime_content_type ile ve hata kontrolünü $dosya['error'] kullanarak yapar. RuntimeException ile hata yönetimi, kullanıcıya anlamlı geri bildirim sağlar ve uygulamanın stabil çalışmasını destekler. move_uploaded_file, dosyanın geçici konumdan güvenli şekilde hedef konuma taşınmasını garanti eder.
try/catch kullanımı, hataların kontrollü bir şekilde yakalanmasını sağlar ve uygulama stabilitesini artırır. Bu yaklaşım, OOP ile kodun tekrar kullanılabilirliğini, güvenliği ve hatasız çalışmasını sağlayarak profesyonel PHP projelerine uygun bir çözüm sunar.

PHP’de Dosya Yükleme için en iyi uygulamalar, dosya tip ve boyut kontrolleri, mutlak yol kullanımı, doğru hata yönetimi ve güvenli dizin oluşturmayı içerir. Kullanıcının sağladığı dosya adını doğrudan kullanmaktan kaçının; basename ve sanitizasyon ile path traversal saldırılarını engelleyin. Hataları yönetmek için istisnalar kullanın ve kullanıcıya anlamlı geri bildirim sağlayın. Büyük dosyalarda bellek ve işlem süresini izlemek önemlidir.
Yaygın hatalar, $dosya['error'] kontrolünü atlamak, dosyaları doğrulamadan taşımak ve büyük dosyalarda kaynak sınırlamalarını göz ardı etmektir. Debug için error_log, var_dump ve phpinfo fonksiyonları faydalıdır. Güvenliği artırmak için MIME tiplerini sınırlayın, yükleme dizininde script çalıştırmayı engelleyin ve php.ini’de upload_max_filesize ile post_max_size limitlerini ayarlayın. Bu yöntemler, güvenli, verimli ve profesyonel dosya yükleme çözümleri üretmenizi sağlar.

📊 Referans Tablosu

PHP Element/Concept Description Usage Example
$_FILES POST ile gönderilen dosyaların süper globali $dosya = $_FILES['dosya'];
move_uploaded_file Dosyayı geçici konumdan hedef konuma taşır move_uploaded_file($dosya['tmp_name'], $hedef);
mime_content_type Dosyanın MIME tipini belirler $tip = mime_content_type($dosya['tmp_name']);
mkdir Sunucuda dizin oluşturur mkdir(DIR . '/uploads', 0755, true);
try/catch PHP’de istisna yönetimi try { ... } catch(RuntimeException $e) { echo $e->getMessage(); }
basename Güvenli dosya adı almak için $isim = basename($dosya['name']);

Dosya Yükleme konusunda uzmanlaşmak, interaktif ve güvenli web uygulamaları geliştirebilmenizi sağlar. Doğru validasyon, hata yönetimi, OOP kullanımı ve dosya yönetimi ile yükleme işlevini kompleks sistemlere entegre edebilir, ölçeklenebilir ve güvenilir çözümler üretebilirsiniz.
Sonraki adımlar olarak toplu dosya işlemleri, veritabanı entegrasyonu, sürüm kontrolü ve RESTful API ile dosya yükleme konularını inceleyin. Gelişmiş güvenlik uygulamaları, malware taraması, dijital imza doğrulama ve hassas dosyaların şifrelenmesi üzerine çalışın. Yeniden kullanılabilir sınıflar, birim testleri ve otomasyon ile PHP profesyonel becerilerinizi güçlendirin. Resmi PHP dokümantasyonu ve ileri seviye web güvenliği kursları ek kaynak olarak değerlendirilebilir.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

3
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek