Verot.net Çoklu Upload Sorunu

Sizde benim gibi resim upload işlemleri için verot.net’de bulunan upload sınıfını kullanıyorsanız bu sorun (daha doğrusu sorunda denemez buna) sizinde başınıza gelmiştir.. Normal tekli yüklemede sorun yok ama çoklu yüklemede? işte orada bir mantıksızlığa düşüyoruz.. Çözümü ise şöyle.. Önce html yapımız şöyle olsun;

<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="resim[]" multiple />
<input type="submit" name="submit" value="Yükle" />
</form>

Bu şekilde dosyaları birden fazla seçip yükle dediğimizde ise aşağıdaki php kodumuz çalışacak;

$resimler = array();
foreach ($_FILES['resim'] as $k => $l) {
  foreach ($l as $i => $v) {
	if (!array_key_exists($i, $resimler))
	  $resimler[$i] = array();
	$resimler[$i][$k] = $v;
  }
}

foreach ($resimler as $resim){

	$handle = new Upload($resim);
	if ($handle->uploaded) {
		
		/* Resmi Yeniden Adlandır */
		$handle->file_new_name_body = substr(base64_encode(uniqid(true)), 0, 20);

		/* Resmi Yeniden Boyutlandır */
		$handle->image_resize = true;
		$handle->image_x = 150;
		$handle->image_ratio_y = true;
		
		/* Resim Yükleme İzni */
		$handle->allowed = array('image/*');
		
		/* Resmi İşle */
		$handle->Process(realpath("../")."/upload/resim/");
		if ($handle->processed) {
		      echo 'ok\n';
		} else {
                   echo $handle->error;
		}

		$handle-> Clean();

	} else {
		echo $handle->error;
	}

}

Olay bu şekilde çözüm buluyor, böylece çoklu yükleme işlemini kolayca yapabiliyorsunuz.. Kolay gelsin.

Yayınlayan

Tayfun Erbilen

2009’dan beri web işleriyle uğraşan, aynı zamanda amatör müziklede ilgilenen sıradan birisi..

“Verot.net Çoklu Upload Sorunu” üzerine 25 yorum

  1. Teşekkürler Tayfun. Acaba dosya ismini nasıl alabilirim? Yani döngü içine bir mysql satırı yazarak resimi veritabanına yazmak istiyorum da. Teşekkürler şimdiden.

  2. @Mamy, benim yaptığım örnekte ben yeniden adlandırıyorum.. substr(base64_encode(uniqid(true)), 0, 20) bu kısmı bir değişkene aktarırız dosya diye.. Daha sonra;

    $dosya = $dosya.".".$uzanti;

    şeklinde dosya adını alabiliriz 🙂 Eğer direk yüklediğin dosyanın adına ulaşmak istersen;

    $handle->file_src_name;
  3. Tayfun merhaba ilk önce teşekkür ederim anlatımın için… Sormak istediğim şey işlem başlarılı olduğunda sonucu bize ne kadar resim yüklemişsek o kadar döndürüyor bunu nasıl tek sonuç olarak döndürebiliriz…

  4. Şimdi başarılı ve başarısız olanları saydırmak lazım;

    if ( $handle->processed ) {
    	$basarili += 1;
    } else {
    	$basarisiz += 1;
    }

    Ve foreach dışında ise şu şekilde bir sonuç gösterebiliriz;

    echo "Başarıyla Yüklenen: ".$basarili."<br />
    Başarısız Olan: ".$basarisiz;

    gibi.. 🙂

  5. Biraz geç oldu ama işlerin yoğunluğundan dolayı ne zamandır takip edemiyordum cevap verdiğin için teşekkür ederim üzerinde çalışmaya devam ediyorum 🙂

    1. Doğru şekilde yüklenen dosya değerlerini gönderemediğiniz için foreach hata veriyordur. Dosyaları doğru şekilde gönderdiğinizden emin olun.

      1. normal seçip yoluyorum. 2 tane resim yolluyorum .png formatında ama bu hatayı alıyorum

        1. print_r($_FILES[‘resim’]); diyerek gelen değerlerin dizi olarak gelip gelmediğini kontrol edin. Birde input’ta name tanımlarken resim[] şeklinde tanımladığınızdan emin misiniz?

          1. print_r($_FILES[‘resim’]); dedim ama hiçbirşey yazmadı. sayfayı hep bos bırakıp bu koud yazdım gene birşey yok. evet resim[] yaptıgıma emınım

          2. Gördüğünüz gibi sorun resimleri yükletememenizden kaynaklı. form nesnesinde enctype belirttiniz mi? önce resmi yükletmeyi çözün, daha sonra bunun çalıştığını görebilirsiniz.

  6. Tayfun çoklu uploadı senin verdiğin şekilde de denedim ama ne resimi yüklemiyor ve bu satırda hata veriyor…

    “$handle = new Upload($resim);” verdiği hata Fatal error: Class ‘Upload’ not found in. Php’ye yeni başladığım içinde çözemedim sorunu.

  7. selam kolay gelsın.. kodu çalıştırdım. bulunan klasöre eklemek için $handle->Process(realpath(“../”).”/upload/resim/”); yerini nasıl değiştirmeliyiz.. yani index.php olan yerde upload klasörünün içine atılması için nasıl yapmalıyız.?

  8. ben bunu yaptım wampserverimde çalışıyor sorunsuz ama hosta atınca “Warning: Invalid argument supplied for foreach() in 7 line” hatasi veriyor neden acabaa ??

    1. yüksek boyutlu yüklemeye çalışıyorsundur sunucu ayarsızdır yüklemediği için dizi boş dönüyordur foreach’de boş dizi olduğu için hata veriyordur.

      1. yok daha basitmiş tayfun kardeş .htaccess yüzünden git.php post ediyorum formu ama gitmiyormuş 😀

  9. 3’den fazla yükleme yapmamasının sebebi nedir sizce Tayfun bey, kodları denedim ama 3’den fazla olunca upload yapmıyor.

  10. @Emre, .htaccess dosyana şu kodları ekle, sorun çözülecektir.

    php_value upload_max_filesize 10M  
    php_value post_max_size 10M  
    php_value max_input_time 300  
    php_value max_execution_time 300
  11. Teşekkürler Tayfun güzel bilgiler için.
    Bu sınıfı kullanarak küçük bir sistem yaptım ve güzel bir şekilde çalışıyor fakat şöyle bir sorunum var. 10000px (5000px ten fazla desek daha iyi olacak. belli bir rakam söz konusu değil.) ten fazla genişlikte veya yükseklikte görseller yüklediğimde hata veriyor sistem. Daha doğrusu beyaz sayfa çıkıyor.
    Bu neyden kaynaklanabilir acaba ? Htaccess e verdiğin kodları da ekledim ama bu sorunu bir türlü aşamadım.
    Yardımlarını bekliyorum 🙂

  12. @Aydın, büyük boyutlu dosyalar olduğu için sunucu bunu kabul etmiyor olabilir. ini_set() htaccess ve ya direk php ayarlarından yükleme boyutlarını vs. değiştirmen gerekiyor olabilir.

  13. Bu güzel makale için teşekkür ederim, sorunuma çözüm buldum… 🙂

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir