CodeBlanks Logo Icon CodeBlanks

Dosya türü doğrulama

PHP kursu · Orta seviye · Ders 78/115

Yüklenen dosyanın türünü (MIME) doğrulamayı öğrenirsin.

MIME türü nedir?

Yüklenen dosyanın türünü denetlemeden kabul etmek tehlikelidir; biri .jpg adlı bir PHP betiği gönderebilir. Bu yüzden dosya türünü doğrulamalısın.

MIME türü, dosyanın içeriğini tanımlayan bir etikettir (örneğin image/png, application/pdf). PHP bu bilgiyi $_FILES['avatar']['type'] alanında tutar; tarayıcı tarafından bildirilir.

Tarayıcının söylediği MIME türü her zaman doğru değildir; daha güvenli olmak için mime_content_type() veya finfo ile gerçek türü okuyabilirsin. Ama başlangıçta type alanı yeterlidir.

İzin verilen türler listesi

Doğrulama için izin verilen MIME türlerini bir dizi olarak tanımlarsın: $allowed = ['image/png', 'image/jpeg']. Sonra in_array() ile dosyanın türünün listede olup olmadığını kontrol edersin.

Örnek: in_array($file['type'], $allowed, true). Üçüncü parametre true sıkı karşılaştırma (strict) yapar; tür dönüştürme olmadan karşılaştırır. Güvenlik açısından bu önemlidir.

Yalnızca uzantıya bakmak yeterli değildir; çünkü uzantı kolayca değiştirilebilir. MIME türü daha güvenilir bir kontrol sunar.

Uygulama validateType fonksiyonu

Bir validateType(array $file, array $allowed): string fonksiyonu yaz. İçinde in_array($file['type'], $allowed, true) ile türü kontrol et. Eşleşirse return 'Geçerli: ' . $file['type'], değilse return 'Reddedildi: ' . $file['type'] döndür. Test için $_FILES['avatar'] tanımla (name: 'profil.png', type: 'image/png', tmp_name: '/tmp/phpAbCd.tmp', error: 0, size: 102400), $allowed = ['image/png', 'image/jpeg'] tanımla ve echo validateType($_FILES['avatar'], $allowed) . "\n" yaz.

Örnek çözümü göster
', değilse 'Reddedildi: ' + type döndür.
Örnek çözüm:
<?php
// Dosya türü doğrulama
function validateType(array $file, array $allowed): string {
    if (in_array($file['type'], $allowed, true)) {
        return "Geçerli: " . $file['type'];
    }
    return "Reddedildi: " . $file['type'];
}

$_FILES['avatar'] = [
    'name' => 'profil.png',
    'type' => 'image/png',
    'tmp_name' => '/tmp/phpAbCd.tmp',
    'error' => 0,
    'size' => 102400
];

$allowed = ['image/png', 'image/jpeg'];
echo validateType($_FILES['avatar'], $allowed) . "\n";

Kendini test et

  1. Dosya türü için hangi kontrol daha güvenilir?

    • MIME türünü kontrol etmek
    • Dosya uzantısını kontrol etmek
    • Sadece dosya adına bakmak
    • Kontrol yapmadan kabul etmek
    Cevabı göster

    MIME türünü kontrol etmek — Doğru. MIME türü uzantıdan daha güvenilirdir.

  2. Uzantıları ve MIME türlerini eşleştir

    .png
    image/png
    .jpg
    image/jpeg
    .gif
    image/gif
    .pdf
    application/pdf
  3. in_array ile tür kontrolü

    if (in_array($file['type'], ____, true)) { return true; }
    Cevabı göster
    if (in_array($file['type'], $allowed, true)) { return true; }

Orta seviye bölümündeki tüm dersler