Php toplu resim yükleme Bu makale 6097 kere okunmuştur.

Php ile resim yükleme işlemi kolay bir işlemdir. Yanlız eklenecek resimler 1 den çok olduğu zaman ekleyen kişi için ızdırap olup sinir sistemini alt üst etmektedir. Bu yazımızda çoklu resim yüklemenin en basit halini göreceğiz.

Öncelikle resim yüklemek için kullanacağımız verot.net ‘in class.upload.php eklentisini indirip proje dosyamızın içerisine atıyoruz. Daha sonra kullanacağımız dosyalarımızı oluşturuyoruz 2 dosya 1 klasör oluşturdum. Biri yükleme formumun bulunduğu index.php diğeri ise yükleme işlemlerimi yapacağım yukle.php olacak. Klasör ise yüklenecek resimler için oluşturduğum klasör (sunucu üzerinde bu klasör için dosya iznini verdiğinizden emin olun).

Yani oluşturduğumuz ve içine attığımız dosyalar ile birlikte projemizin içinde aşağıdaki dosyalar ve klasörler bulunmakta ;

  • index.php
  • yukle.php
  • class.upload.php
  • resimler klasörü.

Bu 2 dosyanın içindeki kodları yazı içinde değil kod blokları içerisinde açıklama satırı olarak teker teker açıklayacağım. Öncelikle index.php sayfamızın içinde formumuzu oluşturalım ;

index.php

<!-- ÖNCELİKLE FORM TAGIMIZI AÇIYORUZ ACTION=YUKLE.PHP , METHOD=POST VE ENCTYPE=MULTIPART/FORM-DATA OLARAK AYARLIYORUZ. -->
<form action="yukle.php" method="post" enctype="multipart/form-data">

	<fieldset>
		<legend>Resim Yükle</legend>
		<p>
			<label>Resimleri Seçiniz :</label>
			<!--
				FİLE İNPUTUMUZU OLUŞTURUYORUZ BURADA DİKKAT EDİLECEK 2 NOKTA VAR ;
					1. NAME KISMIMIZDA VERDİĞİMİZ İSMİN SONUNA [] KARAKTERLERİNİ YAZMAK , BU RESİMLERİMİZİ DİZİ HALİNDE YOLLAMAMIZI SAĞLAYACAK.
					2. MULTİPLE=MULTİPLE YAZARAK RESİM SEÇERKEN CTRL YARDIMI İLE İSTEDİĞİMİZ KADAR RESİM SEÇEBİLECEĞİZ. (SON SÜRÜM TARAYICILARDA SORUN ÇIKARMAMAKTA)
			-->
			<input type="file" name="resim[]" multiple="multiple" />
		</p>
		<!-- SON OLARAK SUBMİT BUTONUMUZU OLUŞTURUP FORM KISMINI BİTİRİYORUZ. -->
		<input type="submit" name="yukle" value="Resimleri Yükle" />
	</fieldset>

</form>

Daha sonra resimlerimizi yükleyip işleyeceğimiz yukle.php içerisine kodlarımızı yazalım ;

yukle.php

/* ÖNCELİKLE POST EDİLEN BİR FORMUMUZ VARMI KONTROL EDELİM */
if(isset($_^POST["yukle"])){ /* POST'UN BAŞINDAKİ ^ KARAKTERİNİ SİLİNİZ. */

	/* DAHA SONRA CLASS.UPLOAD.PHP DOSYAMIZI SAYFAMIZA DAHİL EDELİM. */
	require_once ('class.upload.php');

	/* RESİMLERİMİZ DÖNGÜ İÇERİSİNDE UPLOAD EDECEĞİMİZ İÇİN ÖNCE KAÇ TANE RESİM GELMEKTE ONU BULUYOR VE $resim_sayisi DEĞİŞKENİNE ATIYORUZ. */
	$resim_sayisi   = count($_FILES["resim"]["name"]);

	/* FOR DÖNGÜMÜZÜ OLUŞTURUYORUZ $i DEĞİŞKENİ DİZİ İNDİSİMİZİ BELİRLEYECEK VE GELEN RESİM SAYISI KADAR DÖNGÜMÜZ DÖNDÜKÇE HER BİR DÖNÜŞTE 1 ARTACAK */
	for($i=0; $i<$resim_sayisi; $i++) {

		/* FORMUMUZDAN GELEN RESİMLERİN BİLGİLERİNİ ALALIM */
		$name 		= $_FILES["resim"]["name"][$i]; 	/* RESMİMİZİN İSMİ*/
		$type 		= $_FILES["resim"]["type"][$i];		/* RESMİMİZİN DOSYA UZANTISI*/
		$tmp_name 	= $_FILES["resim"]["tmp_name"][$i];	/* RESMİMİZİN GEÇİCİ DOSYA YOLU */
		$error 		= $_FILES["resim"]["error"][$i];	/* RESMİM İLE İLGİLİ VARSA HATA KODU */
		$size 		= $_FILES["resim"]["size"][$i];		/* RESMİMİZİN BOYUTU */

		/* TÜM BU ALDIĞIMIZ BİLGİLERİ YÜKLEME YAPABİLMEK İÇİN ARRAY İÇERİSİNDE TOPLAYIP $resim İSMİNDE BİR DEĞİŞKENE ATIYORUZ. */
		$resim = array('name' => $name , 'type' => $type , 'tmp_name' => $tmp_name , 'error' => $error ,'tmp_name' => $tmp_name , 'size' => $size);

		/* RESİMLERİN YÜKLENECEĞİ KLASÖR İSMİNİ $klasor DEĞİŞKENİNE ATIYORUZ */
		$klasor = "resimler";

		/* CLASS.UPLOAD.PHP İÇERİSİNDEKİ YÜKLEME FONKSİYONLARIMIZI KULLANMAYA BAŞLIYORUZ. */

		/* SINIFIMIZI BAŞLATIYORUZ */
		$yukle = new upload(@$resim);			

		/* EĞER YÜKLEME İŞLEMİMİZ GERÇEKLEŞTİ İSE */
			if($yukle->uploaded){

				$yukle->process($klasor); 	/* RESMİMİZİN TAŞINACAĞI KLASÖR */

				/* OPSİYONEL SEÇENEKLER VEROT.NET DEN DAHA FAZLA ÖZELLİĞE ULAŞABİLİRSİNİZ. */
				$yukle->image_resize = true;	/* RESİM BOYUTLANDIRMAYI AKTİFLEŞTİRİYORUZ */
				$yukle->image_x = 250;			/* GENİŞLİK DEĞERİ */
				$yukle->image_y = 200;			/* YÜKSEKLİK DEĞERİ */

				/* OPSİYONEL İŞLEMLER BAŞARILI OLDU İSE */
				if($yukle->processed){

					/* YÜKLENEN DOSYA İSMİNİ ALIP $yuklenen_resim DEĞİŞKENİNE ATIYORUZ */
					$yuklenen_resim = $yukle->file_dst_name;

					/* YÜKLENEN RESMİMİZİ EKRANA BASIYORUZ (BU KISIMDA VERİTABANINA DA YAZDIRABİLİRSİNİZ AMACINIZA UYGUN KULLANABİLİRSİNİZ.)*/
					print '<img src="resimler/'.$yuklenen_resim.'" />';

					/* EN SON $yukle DEĞİŞKENİMİZİ TEMİZLİYORUZ */
					$yukle->clean();
				} /* 3. İF BİTİŞ */

			} /* 2.İF BİTİŞ */

	} /* FOR BİTİŞ */

}/* 1.İF BİTİŞ */

Kullanılacak dosyalar ve açıklamaları yukarıda bulunmaktadır.Kodlar en basit halde yazılmış olup güvenlik göz ardı edilmiştir. class.upload.php dosyasının içindeki diğer fonksiyon ve özellikler ile resim üzerinde istediğiniz gibi oynama yapabilirsiniz. Gerekli dökümantasyona verot.net üzerinden ulaşabilirsiniz. Her hangi bir sorunu yorum olarak paylaşırsanız hep birlikte çözmeye çalışalım.

Etiketler

[24] Yorum var

Barman 06 Mart 2014

Bende

yukle.php’de
bu satırda hata var diyor :(

if(isset($_^POST[“yukle”])){ /* POST’UN BAŞINDAKİ ^ KARAKTERİNİ SİLİNİZ. */

Cevapla
Barman 06 Mart 2014

Özür dilerim postun başındaki ^karakterini silmemişim :)

Cevapla
Yavuz Ertem 30 Nisan 2014

Allah razı olsun. verdiğiniz örnek çok işime yaradı.

Cevapla
Burak Gokhan Demirel 27 Mayıs 2014

Peki bunları nasıl veritabanına kaydedecez

mesela 4 resim yukledik tablomuzda şöyle id ,resim_url,resim_adi Bu dört resminde bilgilerini nasıl alacaz

Cevapla
    Emrah Özgilik 27 Mayıs 2014

    yukle.php ‘deki 48 satıra resmi yazdırmak yerine sql kodları ile veritabanına yazdıracaksınız. for içinde döneceği için hepsini yazacaktır.

    Cevapla
che_guevera 22 Haziran 2014

Kjardeş emeğine sağlık,çok güzel anlatmıssın.Ben projemde bir sürü veriyle beraber (bi aracın marka,serii,model vs..) özellikleriyle beraber 8-10 tane resimi de aynı id’ye atmak istiyorum ama hakkından gelemedim.Senin bir önerin varsa,paylaşırsan çok memnun olurum.iyi çalışmalar

Cevapla
    Emrah Özgilik 23 Haziran 2014

    Resimler için ayrı bir tablo oluşturup araç id ile birlikte bu oluşturduğunuz tabloya kaydedebilirsiniz.

    Örn ;

    Araçların bulunduğu tablonda : AracId Marka Model seri
    Resimlerin bulunduğu tabloda : ResimId AracId Resim

    şeklinde.

    Cevapla
Gul Tamber 23 Temmuz 2014

Merhaba Ben Mysql ile kayıt etmek istiyorum , Fakat Sql bilgim olmadığı için kayıt yapamıyorum , Örnek Kodu Verebilir misin , Birde Açıklama Diye Bir Kısım Oluşturup Onunla Birlikte Nasıl Veritabanına Kayıt Ettircem .

Teşekkürler İyi Çalışmalar .

<?php
/* ÖNCELİKLE POST EDİLEN BİR FORMUMUZ VARMI KONTROL EDELİM */
if(isset($_POST["yukle"])){ /* POST'UN BAŞINDAKİ ^ KARAKTERİNİ SİLİNİZ. */

/* DAHA SONRA CLASS.UPLOAD.PHP DOSYAMIZI SAYFAMIZA DAHİL EDELİM. */
require_once ('class.upload.php');

/* RESİMLERİMİZ DÖNGÜ İÇERİSİNDE UPLOAD EDECEĞİMİZ İÇİN ÖNCE KAÇ TANE RESİM GELMEKTE ONU BULUYOR VE $resim_sayisi DEĞİŞKENİNE ATIYORUZ. */
$resim_sayisi = count($_FILES["resim"]["name"]);

/* FOR DÖNGÜMÜZÜ OLUŞTURUYORUZ $i DEĞİŞKENİ DİZİ İNDİSİMİZİ BELİRLEYECEK VE GELEN RESİM SAYISI KADAR DÖNGÜMÜZ DÖNDÜKÇE HER BİR DÖNÜŞTE 1 ARTACAK */
for($i=0; $i $name , ‘type’ => $type , ‘tmp_name’ => $tmp_name , ‘error’ => $error ,’tmp_name’ => $tmp_name , ‘size’ => $size);

/* RESİMLERİN YÜKLENECEĞİ KLASÖR İSMİNİ $klasor DEĞİŞKENİNE ATIYORUZ */
$klasor = “resimler”;

/* CLASS.UPLOAD.PHP İÇERİSİNDEKİ YÜKLEME FONKSİYONLARIMIZI KULLANMAYA BAŞLIYORUZ. */

/* SINIFIMIZI BAŞLATIYORUZ */
$yukle = new upload(@$resim);

/* EĞER YÜKLEME İŞLEMİMİZ GERÇEKLEŞTİ İSE */
if($yukle->uploaded){

$yukle->process($klasor); /* RESMİMİZİN TAŞINACAĞI KLASÖR */

/* OPSİYONEL SEÇENEKLER VEROT.NET DEN DAHA FAZLA ÖZELLİĞE ULAŞABİLİRSİNİZ. */
$yukle->image_resize = true; /* RESİM BOYUTLANDIRMAYI AKTİFLEŞTİRİYORUZ */
$yukle->image_x = 250; /* GENİŞLİK DEĞERİ */
$yukle->image_y = 200; /* YÜKSEKLİK DEĞERİ */

/* OPSİYONEL İŞLEMLER BAŞARILI OLDU İSE */
if($yukle->processed){

/* YÜKLENEN DOSYA İSMİNİ ALIP $yuklenen_resim DEĞİŞKENİNE ATIYORUZ */
$yuklenen_resim = $yukle->file_dst_name;

/* YÜKLENEN RESMİMİZİ EKRANA BASIYORUZ (BU KISIMDA VERİTABANINA DA YAZDIRABİLİRSİNİZ AMACINIZA UYGUN KULLANABİLİRSİNİZ.)*/
print ”;

/* EN SON $yukle DEĞİŞKENİMİZİ TEMİZLİYORUZ */
$yukle->clean();
} /* 3. İF BİTİŞ */

} /* 2.İF BİTİŞ */

} /* FOR BİTİŞ */

}/* 1.İF BİTİŞ */
?>

Resim Yükle
 

Resimleri Seçiniz :

Açıklama

Cevapla
    Emrah Özgilik 02 Ekim 2014

    Önce sql bilginizi geliştirmenizi öneririm, sql bilginiz olmadığı için verdiğim örnek açıklayıcı olmayacaktır.

    Cevapla
Design Ali 23 Temmuz 2014

Hocam Öncelikle aradığımız kısa ve öz bir kod , teşekkürlerimi sunuyorum fakat bir sorunla karşılaştım bunu veritabanına eklemek için hangi kodu ve sql cümlesini kullanacagım o konudada yardımcı olursanız sevinirim , İyi Çalışmalar Kolay Gelsin .

Cevapla
burak 06 Eylül 2014

Emrah bey şimdi boyle bi sistem üzerine örnek olarakbir emlak sitesi yapıyorız diyelim iki adet veritabanımız var emlak ve resimler adında ilk önce index.php de ilanı ekledik daha sonra fotoekle.php sayfasına get ile emlak sayfasındaki id yi çekiyoruz resimleri ben şöyle kaydetmejk istiyorum resimler/id burda $klasor =”resimler”; buraya değişik olarak ne yazacaz

Cevapla
    Emrah Özgilik 02 Ekim 2014

    İlanın id’sine özel bir klasör oluşturmak istiyorsanız $klasor = “resimler/”.$id; şeklinde bir ekleme ile klasör oluşturup onun içine yükleyebilirsiniz.

    Cevapla
Mustafa YILDIZ 28 Eylül 2014

Merhabalar öncelikle bu güzel paylaşımınız için teşekkür ederim..

bizlerle paylaşmış olduğunuz çoklu resim upload kodlarını ürün ekleme sayfamda kullanacağım

1-SORUM: veritabanına kayıt ederken aynı resmin tekrar yüklenmemesini istiyorum bunun için de resimin ilk yüklendiği yani sunucudaki resimler klasörüne atıldığı anda kontrol etmesini ve aynı resimin tekrar yüklenmemesini nasıl sağlarız. Mysql için basit biliyorum eşsiz seçilip yüklenme engellenebilir ama resim dosyası sunucuya yinede yüklenmiş olur. bunu nasıl ortadan kaldırabiliriz.

2.SORUM: Resimlerin ilk seçilip yüklenerek yükle.php sayfasında ekrana basıldığında
print “”;
kodları ekleyerek resimlerin daha küçük görünmesini sağladım burada altlarına sil butonu eklenip sunucudan da silinmesi sağlanabilirmi, nasıl ?

bu iki soruma cevap verebilirseniz çok ama çok sevinirim saygılar

Cevapla
    Emrah Özgilik 02 Ekim 2014

    Merhabalar , veritabanına kayıt ederken resmin ismini benzersiz yaparsanız sorundan kurtulursunuz class.upload.php kullandı iseniz örnekteki gibi resmin ismini kendi değiştirir sıkıntı çıkmaz.

    Resimlerin küçük görünmesi için $foo->image_x ve $foo->image_y değişkenlerine boyutlandırmalarını vermeniz yeterli. Sil butonunu da ekleyip mysql delete ile kaydı silmeden önce unlink(dosyaninyolu/dosyaadi); şeklinde resmi silebilirsiniz.

    Cevapla
atlantisfaca 29 Eylül 2014

emeğine sağlık hocam ne zamandır aklımda takılan bir soru işareti idi… çok güzel anlatmışssın

Cevapla
ahmet 27 Ekim 2014

ben veri tabanına değilde mesela o eklediğim 25. ürünse 25 diye bir klasörün içine eklesin bunu nasıl yapabilirim ve bu dosyaları klasörden nasıl silebiliriz

Cevapla
    Emrah Özgilik 27 Ekim 2014

    Ürünün idsini yüklenecek klasöre eklerseniz bu söylediğinize ulaşabilirsiniz. Mesela ;

    $klasor = “resimler/”.$urun_id;

    gibi … silme işlemini de php unlink fonksiyonu ile aynı mantıkta yapabilirsiniz.

    Cevapla
Emre 10 Nisan 2015

örneği deniyorum ama localde resimleri seçip butona tıkladıgımda post işlemi gerçekleşmio

Cevapla
    Emrah Özgilik 20 Haziran 2015

    enctype=”multipart/form-data” kısmını form tagınıza yazdığınızdan emin olun.

    Cevapla
Ramazan 06 Ağustos 2015

İlk satırda hata verdi $_POST[‘resim’]
yetine $_FILES[‘resim’] olacak o

Cevapla
    Emrah Özgilik 13 Ağustos 2015

    Merhabalar Ramazan bey, kodları yanlış almış olabilirsiniz ilk satırda $_POST[‘yukle’] mevcut submit butonunuz name kısmına yukle yazarsanız kod hatasız çalışacaktır.

    Cevapla

Bir yorum bırakmak ister misin ?