Php 8 Dosya Özelliklerinin Kontrolü

Php 8 Dosya Özelliklerinin Kontrolü

PHP 8'de dosya yüklerken dosya özelliklerinin kontrolü, güvenlik ve dosya doğruluğu açısından oldukça önemlidir. Dosya boyutu, uzantısı, MIME türü gibi özellikleri kontrol ederek, sadece istenilen dosyaların sunucuya yüklenmesini sağlayabilirsiniz. PHP, dosya yükleme işlemi sırasında bu kontrolleri yapmak için birkaç yerleşik fonksiyon ve özellik sunar.

1. Dosya Boyutunu Kontrol Etme

Dosya boyutunu kontrol etmek, sunucunuzun aşırı yüklenmesini veya büyük dosyaların istemeden yüklenmesini önlemek için önemlidir.

Örnek:

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $dosya = $_FILES['dosya']; $dosya_boyutu = $dosya['size']; // Byte cinsinden dosya boyutu // 2 MB (Megabyte) sınırı koyuyoruz $max_boyut = 2 * 1024 * 1024; // 2 MB if ($dosya_boyutu > $max_boyut) { echo "Dosya çok büyük. Maksimum boyut: 2MB."; } else { echo "Dosya boyutu uygun."; } } ?>
  • $_FILES['dosya']['size']: Dosyanın boyutunu byte cinsinden döndürür.
  • $max_boyut: Dosya boyutu sınırını tanımlıyoruz. 2 MB sınırına göre kontrol yapıyoruz.

2. Dosya Uzantısını Kontrol Etme

Dosya uzantısının kontrolü, sadece belirli türdeki dosyaların yüklenmesini sağlamak için kullanılır.

Örnek:

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $dosya = $_FILES['dosya']; $dosya_adi = $dosya['name']; // Geçerli uzantılar $gecerli_uzantilar = ['jpg', 'jpeg', 'png', 'pdf']; // Dosyanın uzantısını almak $dosya_uzantisi = pathinfo($dosya_adi, PATHINFO_EXTENSION); // Uzantıyı kontrol et if (in_array($dosya_uzantisi, $gecerli_uzantilar)) { echo "Dosya uzantısı uygun."; } else { echo "Geçersiz dosya uzantısı."; } } ?>
  • pathinfo(): Dosyanın uzantısını almak için kullanılır.
  • in_array(): Dosya uzantısının, geçerli uzantılar arasında olup olmadığını kontrol eder.

3. Dosyanın MIME Türünü Kontrol Etme

Dosya uzantısına güvenmek yerine, dosyanın gerçek türünü (MIME türü) kontrol etmek daha güvenlidir. Bu, dosya uzantısı değiştirilse bile dosyanın türünü doğru şekilde tespit eder.

Örnek:

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $dosya = $_FILES['dosya']; $gecici_dosya_yolu = $dosya['tmp_name']; // Desteklenen dosya türleri $gecerli_mime_turleri = ['image/jpeg', 'image/png', 'application/pdf']; // Dosyanın MIME türünü al $dosya_mime_turu = mime_content_type($gecici_dosya_yolu); // MIME türünü kontrol et if (in_array($dosya_mime_turu, $gecerli_mime_turleri)) { echo "Dosya türü uygun."; } else { echo "Geçersiz dosya türü."; } } ?>
  • mime_content_type(): Dosyanın MIME türünü döndürür. Bu yöntemle, dosyanın gerçekten hangi tür olduğunu öğrenebilirsiniz.
  • in_array(): MIME türünü kontrol eder ve geçerli türlerle karşılaştırır.

4. Dosya Yüklenirken Hataları Kontrol Etme

PHP dosya yükleme sırasında bazı hata kodları döndürebilir. Bu kodları kontrol ederek, yükleme sürecinde bir sorun olup olmadığını anlayabilirsiniz.

Örnek:

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $dosya = $_FILES['dosya']; // Hata kodunu kontrol et if ($dosya['error'] == UPLOAD_ERR_OK) { echo "Dosya başarıyla yüklendi."; } else { // Hata mesajı döndürelim switch ($dosya['error']) { case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: echo "Dosya çok büyük!"; break; case UPLOAD_ERR_PARTIAL: echo "Dosya kısmen yüklendi!"; break; case UPLOAD_ERR_NO_FILE: echo "Dosya yüklenmedi!"; break; case UPLOAD_ERR_NO_TMP_DIR: echo "Geçici dizin eksik!"; break; case UPLOAD_ERR_CANT_WRITE: echo "Disk yazma hatası!"; break; case UPLOAD_ERR_EXTENSION: echo "Bir PHP uzantısı yüklemeyi durdurdu!"; break; default: echo "Bilinmeyen bir hata oluştu!"; break; } } } ?>
  • $_FILES['dosya']['error']: Dosya yükleme işlemi sırasında oluşan hataları içerir.
  • PHP'de yaygın hata kodları ve anlamları:
    • UPLOAD_ERR_OK (0): Hata yok, dosya başarıyla yüklendi.
    • UPLOAD_ERR_INI_SIZE (1): PHP yapılandırma dosyasındaki upload_max_filesize direktifini aştı.
    • UPLOAD_ERR_FORM_SIZE (2): HTML formunda belirtilen MAX_FILE_SIZE direktifini aştı.
    • UPLOAD_ERR_PARTIAL (3): Dosya sadece kısmen yüklendi.
    • UPLOAD_ERR_NO_FILE (4): Hiçbir dosya yüklenmedi.
    • UPLOAD_ERR_NO_TMP_DIR (6): Geçici klasör bulunamadı.
    • UPLOAD_ERR_CANT_WRITE (7): Disk yazma hatası.
    • UPLOAD_ERR_EXTENSION (8): Bir PHP uzantısı yüklemeyi durdurdu.

5. Dosyanın Var Olup Olmadığını Kontrol Etme

Dosyanın hedef dizinde zaten mevcut olup olmadığını kontrol etmek, aynı ada sahip dosyaların üzerine yazılmasını engelleyebilir.

Örnek:

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $dosya = $_FILES['dosya']; $hedef_dizin = 'uploads/'; $dosya_adi = basename($dosya['name']); $hedef_yol = $hedef_dizin . $dosya_adi; // Dosyanın zaten var olup olmadığını kontrol et if (file_exists($hedef_yol)) { echo "Bu dosya zaten mevcut."; } else { if (move_uploaded_file($dosya['tmp_name'], $hedef_yol)) { echo "Dosya başarıyla yüklendi."; } else { echo "Dosya yükleme sırasında hata oluştu."; } } } ?>
  • file_exists(): Dosyanın belirtilen dizinde var olup olmadığını kontrol eder.

Sonuç:

PHP 8'de dosya yükleme işlemi sırasında dosya özelliklerini kontrol ederek, sunucu güvenliğini ve veri doğruluğunu artırabilirsiniz. Dosya boyutunu, uzantısını, MIME türünü ve yükleme hatalarını kontrol ederek, yalnızca izin verilen dosyaların sunucuya yüklenmesini sağlayabilirsiniz.



Yorum Ekle

Üzerine gel