Yükleniyor

Çoklu resim yükleyebilmemiz için input seçimlerini çoklu seçim ve gönderilen değeri dizi halinde post etmemiz gerekmektedir. Diğer türlü birden fazla resmi gönderme şansımız bulunmamaktadır.

Aşağıda basit bir html form sayfası hazırladık. form.php sayfası olarak kayıt ettik ve yukle.php adresine post ettik.

<!doctype html>
<html>

<head>
    <title>Form Sayfası | Resim Yükleme</title>
</head>

<body>
    <form action="yukle.php" method="post" enctype="multipart/form-data">
        <input type="file" name="resim[]" multiple="multiple" />
        <!-- burada multiple ifadesi bilgisayar üzerinden seçimin çoklu olacağını belirtir. -->
        <!-- name="resim[]" nameden sonra gelen [] ibaresi post edildiği zaman seçilen değerlerin dizi halinde post edilmesini sağlar. -->
        <button type="submit">YÜKLE</button>
    </form>
</body>

</html>

Şimdide size yukle.php sayfasındaki çalışma mantığını gösterelim.

<?php
if (isset($_FILES['resim'])) {
    //Eğer form tagına enctype="multipart/form-data" bunu eklemeseydik if e girmez direk elseye giderdi.
    echo 'Resim gönderilmiştir. <br />';
    var_dump($_FILES['resim']);
    /* Resim seçilerek gönderildiğinde EKRAN ÇIKTISI:
        array (size=5)
            'name' => 
                array (size=2)
                0 => string 'black.png' (length=9)
                1 => string 'white.png' (length=9)
            'type' => 
                array (size=2)
                0 => string 'image/png' (length=9)
                1 => string 'image/png' (length=9)
            'tmp_name' => 
                array (size=2)
                0 => string 'C:\wamp64\tmp\php6994.tmp' (length=25)
                1 => string 'C:\wamp64\tmp\php69A5.tmp' (length=25)
            'error' => 
                array (size=2)
                0 => int 0
                1 => int 0
            'size' => 
                array (size=2)
                0 => int 89509
                1 => int 89036
    ************************
    Resim seçilmeden gönderildiğinde
        ## Gene ekran çıktısı verir ancak boş değerler döner. Çünkü resim zaten tanımlanmıştır ancak boş gelmiştir.
    */
} else
    echo 'Resim gönderilmemiştir. Lütfen resim seçiniz.';
?>

Php ile çoklu resim yükleme örneği

form.php olarak kayıt edin.
<!doctype html>
<html>

<head>
    <title>Form Sayfası | Resim Yükleme</title>
</head>

<body>
    <form action="yukle.php" method="post" enctype="multipart/form-data">
        <input type="file" name="resim[]" multiple="multiple" />
        <!-- burada multiple ifadesi bilgisayar üzerinden seçimin çoklu olacağını belirtir. -->
        <!-- name="resim[]" nameden sonra gelen [] ibaresi post edildiği zaman seçilen değerlerin dizi halinde post edilmesini sağlar. -->
        <button type="submit">YÜKLE</button>
    </form>
</body>

</html>
yukle.php olarak kayıt edin.
<?php
if (isset($_FILES['resim'])) {
    $yuklenemeyenler = array(); //yüklenemeyen ve hatası dönen resimleri bu dizide tutacağız.

    $klasor = "upload/"; //yükleyeceğimiz klasörü belirledik.

    //Artık resimlerimiz dizi olarak geldiği için bir döngü ile tek tek kontrol ve kayıt etmemiz gerekiyor.
    $resim_sayisi = count($_FILES['resim']['name']); //kaç tane resim geldiğini öğrendik.
    for ($i = 0; $i < $resim_sayisi; $i++) {
        //resim sayısı kadar döngüye soktuk.

        $resimBoyutu = $_FILES['resim']['size'][$i]; //döngü içerisindeki resmin boyutunu öğrendik.
        if ($resimBoyutu > (1024 * 1024 * 2)) {
            //buradaki işlem aslında bayt, kilobayt ve mb formülüdür.
            //2 rakamını mb olarak görün ve kaç yaparsanız o mb anlamına gelir.
            //Örn: (1024* 1024* 3) => 3MB/ (1024* 1024* 4) => 4MB

            $yuklenemeyenler[] = $_FILES['resim']['name'][$i] . " - BOYUT";
        } else {
            $tip = $_FILES['resim']['type'][$i]; //resim tipini öğrendik.
            $resimAdi = $_FILES['resim']['name'][$i]; //resmin adını öğrendik.
            
            if ($tip == 'image/jpeg' || $tip == 'image/jpg' || $tip == 'image/png') { //uzantısnın kontrolünü sağladık. sadece .jpg ve .png yükleyebilmesi için.
                if (move_uploaded_file($_FILES["resim"]["tmp_name"][$i], $klasor . "/" . $_FILES['resim']['name'][$i])) {
                    //tmp_name ile resmi bulduk ve nereye, hangi isimle yukleneceğini belirleyip yükledik.
                    //yükleme işlemi başarılı olursa dilediğiniz bir olayı gerçekleştirebilirsiniz.
                } else $yuklenemeyenler[] = $_FILES['resim']['name'][$i] . " BİLİNMİYOR";
            } else {
                $yuklenemeyenler[] = $_FILES['resim']['name'][$i] . " UZANTI";
            }
        }
    }
    if (count($yuklenemeyenler) > 0) {
        echo "Aşağıdaki Resimler Yüklenemedi. <br />";
        var_dump($yuklenemeyenler);
    } else echo "TÜM RESİMLER BAŞARILI BİR ŞEKİLDE YÜKLENDİ.";
}
?>