Php 8 Çoklu Dosya Yükleme

Php 8 Çoklu Dosya Yükleme

PHP 8 ile çoklu dosya yükleme işlemi, kullanıcıların birden fazla dosyayı aynı anda seçip sunucuya yüklemesine olanak tanır. Bunun için formda multiple özelliği kullanılır ve dosyalar PHP'de $_FILES süper global dizisiyle işlenir. Çoklu dosya yükleme, tek dosya yüklemeye benzer, ancak tüm dosyalar bir dizi olarak gönderilir ve işlenir.

1. HTML Formu ile Çoklu Dosya Yükleme

Öncelikle, kullanıcıya aynı anda birden fazla dosya seçme imkânı tanıyan bir HTML formu oluşturalım.

<form action="multi_upload.php" method="post" enctype="multipart/form-data"> <label for="file">Dosyaları seçin:</label> <input type="file" name="dosyalar[]" id="file" multiple> <br> <br> <input type="submit" value="Dosyaları Yükle"> </form>

Önemli Noktalar:

  • name="dosyalar[]": [] işareti, dosyaların bir dizi olarak PHP'ye gönderileceğini belirtir.
  • multiple: Kullanıcının birden fazla dosya seçmesine olanak tanır.

2. PHP ile Çoklu Dosya Yükleme (multi_upload.php)

Kullanıcı formu gönderdiğinde, tüm dosyaları sunucuya yükleyen bir PHP betiği yazalım.

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $dosyalar = $_FILES['dosyalar']; // Dosya yükleme dizini $hedef_dizin = 'uploads/'; // Desteklenen dosya türleri $gecerli_mime_turleri = ['image/jpeg', 'image/png', 'application/pdf']; // Maksimum dosya boyutu (örneğin 2MB) $max_boyut = 2 * 1024 * 1024; // Her bir dosyayı sırayla kontrol edelim for ($i = 0; $i < count($dosyalar['name']); $i++) { $dosya_adi = basename($dosyalar['name'][$i]); $gecici_dosya_yolu = $dosyalar['tmp_name'][$i]; $dosya_boyutu = $dosyalar['size'][$i]; $dosya_hata = $dosyalar['error'][$i]; // Dosyanın yükleneceği hedef yol $hedef_yol = $hedef_dizin . $dosya_adi; // Dosya yükleme sırasında hata olup olmadığını kontrol et if ($dosya_hata === UPLOAD_ERR_OK) { // Dosyanın MIME türünü kontrol et $dosya_mime_turu = mime_content_type($gecici_dosya_yolu); // Dosya türü ve boyutunu kontrol et if (in_array($dosya_mime_turu, $gecerli_mime_turleri) && $dosya_boyutu <= $max_boyut) { // Dosya sunucuya taşınsın if (move_uploaded_file($gecici_dosya_yolu, $hedef_yol)) { echo "Dosya başarıyla yüklendi: " . $dosya_adi . "<br>"; } else { echo "Dosya yüklenirken hata oluştu: " . $dosya_adi . "<br>"; } } else { echo "Geçersiz dosya türü veya boyutu: " . $dosya_adi . "<br>"; } } else { echo "Dosya yükleme hatası: " . $dosya_adi . "<br>"; } } } ?>

Açıklama:

  1. $_FILES['dosyalar'] Dizisi: Çoklu dosya yüklemelerde, $_FILES dizisi aşağıdaki gibi düzenlenir:

    • $_FILES['dosyalar']['name']: Tüm dosya isimlerinin bulunduğu bir dizi.
    • $_FILES['dosyalar']['tmp_name']: Geçici olarak kaydedilen dosya yollarının bulunduğu bir dizi.
    • $_FILES['dosyalar']['size']: Her dosyanın boyutunun bulunduğu bir dizi.
    • $_FILES['dosyalar']['error']: Her dosya için hata kodlarını içeren bir dizi.
  2. Döngü Kullanımı: Tüm dosyaları tek tek işlemek için bir for döngüsü kullanıyoruz.

    • Her dosyanın adı, boyutu, hata durumu ve geçici yolu aynı dizide farklı indekslerde yer alır.
  3. move_uploaded_file() : Geçici dosya dizinindeki dosyaları belirlediğimiz hedef dizine (uploads/) taşır.

  4. Dosya Türü ve Boyutu Kontrolü: Yüklenen her dosyanın türünü ve boyutunu kontrol ederiz:

    • mime_content_type(): Dosyanın MIME türünü doğrular.
    • Dosya boyutunu $_FILES['dosyalar']['size'] ile kontrol ederiz.

3. Hedef Dizin Oluşturma

PHP dosyaları yükleyebilmek için bir dizine ihtiyaç duyar. Eğer uploads dizini yoksa veya sunucunun bu dizine yazma izni yoksa, dosya yüklenemez. Bu yüzden, sunucu üzerinde bu dizini oluşturmalısınız ve uygun yazma izni vermelisiniz.

Linux sunucularda şu komutu kullanarak yazma izni verebilirsiniz:

chmod 777 uploads

4. Hata Kodları

PHP, dosya yükleme sırasında her bir dosya için bir hata kodu döndürür. Bu hata kodlarını kontrol ederek, yükleme işleminin başarılı olup olmadığını anlayabilirsiniz. İşte yaygın hata kodları:

  • UPLOAD_ERR_OK (0): Dosya başarıyla yüklendi.
  • UPLOAD_ERR_INI_SIZE (1): PHP yapılandırmasında belirtilen upload_max_filesize değerini aştı.
  • UPLOAD_ERR_FORM_SIZE (2): HTML formunda belirtilen MAX_FILE_SIZE değerini aştı.
  • UPLOAD_ERR_PARTIAL (3): Dosya sadece kısmen yüklendi.
  • UPLOAD_ERR_NO_FILE (4): Hiçbir dosya yüklenmedi.

5. Dosyaların Aynı Adla Yüklenmesini Engelleme

Eğer kullanıcı aynı ada sahip dosyalar yüklüyorsa, dosyaların üzerine yazılmasını engellemek için dosya isimlerini benzersiz hale getirebilirsiniz.

Örnek:

$benzersiz_adi = uniqid() . '-' . $dosya_adi; $hedef_yol = $hedef_dizin . $benzersiz_adi;

Bu şekilde her dosya için benzersiz bir ad oluşturabilir ve çakışmaları önleyebilirsiniz.

Sonuç:

PHP 8 ile çoklu dosya yükleme işlemi, kullanıcıların birden fazla dosya seçip sunucuya yüklemelerini sağlar. Dosyaların boyutunu, türünü ve yükleme hatalarını kontrol ederek güvenli bir şekilde bu işlemi gerçekleştirebilirsiniz.



Yorum Ekle

Üzerine gel