eburhan Upload class
Web sitesi hazırlarken upload işlemlerinde gerekli önlemleri almazsak daha sonra istenmeyen sonuçlarla karşılaşabiliriz. Örneğin kötü niyetli birisi "hack.php" gibi bir dosyayı yükleyip çalıştırırsa web sitemizi hack edebilir. Veyahut geçerli bir resim dosyası olmadığı halde "resim.gif" gibi bir dosyayı yükleyebilir. Buna benzer problemlerin önüne geçmek için PHP diliyle bir upload sınıfı hazırladım.
Sınıfın en önemli özellikleri
- Belirttiğiniz dosya türleri dışında dosyaların yüklenmesine izin vermez
- Yüklenen dosyalarda "resim" dosyaları varsa, her birinin gerçekten bir resim dosyası olup olmadığını otomatik olarak kontrol eder.
- Yüklenecek dosyaları istediğiniz klasöre kaydedebilirsiniz. Klasör yoksa sizin yerinize oluşturmayı dener ve "chmod" ayarını yapmaya çalışır.
- Aynı anda kaç adet dosyanın yükleneceğini ayarlayabilirsiniz. Örneğin; tek bir yükleme işleminde en az 5, en fazla 15 dosya yüklenebilsin gibi...
- Yüklenen dosyaların boyutlarını sınırlandırabilirsiniz. Örneğin; yüklenmek istenen herbir dosyanın boyutu en az 10, en fazla 100 KB olsun gibi...
- Yüklenen dosyaları yeniden isimlendirebilirsiniz. Ayrıca yüklenen her bir dosya için benzersiz isimler de oluşturabilirsiniz.
- Dosya isimlerinin başına veya sonuna bir ifade ekleyebilirsiniz.
- Bütün kotroller sunucunun "geçiçi" klasöründe yapılır. Herhangi bir sorun oluşmazsa, dosyaları istediğiniz klasöre taşıyabilirsiniz.
Sınıfın kullanımı
İlk önce upload işleminin yapılabilmesi için bir upload formu hazırlamamız gerekiyor. Alttaki kodlarla basit bir upload formu oluşturabiliriz.
Yukarıdaki kodların ekran görüntüsü aşağıdaki resimdeki gibi görünecektir.

Bu upload formunu işlemek için eburhan Upload class'ı şöyle kullanabilirsiniz.
-
<?php
-
// sınıfı çağır
-
require_once('eb.upload.php');
-
-
// yüklenecek dosyalar varsa devreye gir
-
if( $_FILES )
-
{
-
// sınıfı hazırla
-
$up = new UPLOAD( $_FILES['dosyalar'] );
-
-
-
// yüklenecek dosyalar hangi klasöre kayıt edilecek
-
$up->yolDizin('./upload');
-
-
// 100 KB'a kadar olanlara izin ver
-
$up->maxBoyut(100);
-
-
// izin verilecek dosya türleri
-
$up->tipKabul('gif,jpg,png');
-
-
-
// yükleme işlemini başlat
-
if( $up->baslat() === FALSE ) {
-
} else {
-
echo 'Dosyalar başarıyla yüklendi';
-
}
-
-
}
-
?>
Yukarıdaki kodda yüklenmek istenen dosyaların upload isimli klasöre kaydedilmesini sağlıyoruz. Daha sonra herbir dosya boyutunun en fazla 100 KB olabileceğini ve sonra yüklenmek istenen dosyaların gif, jpg, png formatlarında olabileceğini belirtiyoruz.
Sonuç...
Hazırlamış olduğum eburhan Upload class sınıfının yetenekleri burada anlattığımla sınırlı değil. Daha fazla bilgi almak isteseniz alttaki bağlantıdan bu sınıfı indirebilirsiniz. İndireceğiniz dosya içerisinde ayrıntılı bir dökümantasyon mevcut. Bu dokümantasyon, sınıf hakkında merak ettiklerinize büyük bir ihtimal cevap verecektir. Yine de sormak istedikleriniz olursa bana istediğiniz zaman ulaşabilirsiniz
Yorum takibi
Geri izleme
Yazıyı Paylaş
23 Ekim 2007, 10:45
Programlama
Bugün 7 kez, toplam 3,301 kez okundu.
dosya yükleme, php, upload, web, yükleme

23 Ekim 2007, 23:37
öncelikle eline sağlık
ancak bir eksik var sanırım ya da ben işin içinden çıkamadım:
mesela izin verilen dosya tipleri rar,zip,jpg,gif olsun. bu durumda rar dosyaları da _imgKontrol’den geçiyor ve resim olmadığı için hata alıyor ve sonuçta hiç bir dosya yüklenmiyor…
24 Ekim 2007, 16:48
Güzel hazırlanmış bir class. Teşekkürler.
25 Ekim 2007, 11:04
@bocek
Uyarın için teşekkürler.
imgKontrol() fonksiyonuna gerekli kodları yazmayı unutmuşum (: Şimdi düzelttim.
Yeniden indirip test edersen sevinirim
25 Ekim 2007, 13:31
Daha denemedim ama amacınızı buradan tebrik etmek istiyorum.
25 Ekim 2007, 15:40
[…] - eburhan.com - eburhan Upload class […]
27 Ekim 2007, 13:34
Ben sadece blog işiyle uğraştığım için işime yaramıyor ama güvenliği nasıl artırırım diyenler için faydalı bir yazı..
28 Ekim 2007, 14:17
Türkçe bloglar arasında en faydalılardan birisi. Rüya tabiri, fıkra olmadan da şahane bir blog olabiliyormuş. Eline sağlık…
2 Kasım 2007, 13:23
Güzel olmuş ellerine sağlık fakat tür jpg veya gif ise resize ettirilebilirdi. ellerine sağlık tekrardan. benim ki fikir tabi oturup birtane de ben yazayım.
2 Kasım 2007, 15:48
@Coder
Resim boyutlandırmayı bilerek eklemedim çünkü bu sınıfın görevi “yalnızca sunucuya dosya yüklemek” olsun istedim.
Ayrıca ben resim işlemleri için yine kendi yazdığım ayrı bir sınıf kullanıyorum. İleride yayınlarım belki. Ama siz bu upload sınıfını “miras alarak” resim boyutlandırma yeteneği kazandırabilirsiniz.
13 Kasım 2007, 13:21
Teşekkurler Güzel çalışma
13 Kasım 2007, 13:35
Açıkçası kendim yazacaktım php classısta arayim derken
Türk mucit yapıvermiş.
20 Kasım 2007, 10:54
Merhaba, class’inizi kendi yazdigim bir icerik yönetim sisteminde kullaniyorum.
tipKabul() fonksiyonunda dosya uzantilari yerine mime-type’lara göre kontrol ettirseniz olmaz mi? Bazi resimlerin uzantilari resmin gercek tipinden farkli olabiliyor.
20 Kasım 2007, 14:22
@Leon
Öncelikle class’ı kullandığın için teşekkürler. Soruna gelince…
Mime-type ile kontrol ettirmek bana göre güvenli değildir. Çünkü bir dosyanın mime-type’ını kolayca değiştirebiliyorsun. Böylece olunca gerçekte PHP olan bir dosyayı PNG resmiymiş gibi yükletebilirsin.
Ayrıca bu class yüklenmek istenen dosyalardan hangilerinin gerçekten resim olup olmadığını kendisi otomatik olarak kontrol ediyor. Senin ekstra birşey yapmana gerek yok yani
8 Aralık 2007, 23:29
peki bu upload’dan sonra linki falan nasıl göstercez onları da yazsaydın keşke.
9 Aralık 2007, 13:35
@YuqseLx
Ne linki acaba? Biraz daha açıklayıcı yazarsan sevinirim.
10 Aralık 2007, 21:40
yani upload ettikten sonra resmin gösterim şekilleri imageshack.us’taki gibi
16 Ocak 2008, 19:41
Hocam güzel bir class olmuş demin kullandım bir işimde. yanlız, bu upload edilen dosyanın adını nasıl alabiliriz, böyle bir imkanımız olabilir mi ?
18 Ocak 2008, 22:51
2 ufak hata bildirmek istiyorum:
1. _dosyaIsmiTemizle() fonksiyonunda “ü” ve “Ü” harfleri “u” harfi yerine “y” harfine dönüştürülüyor. klavyede “u” ve “y” yanyana olduğu için bir hata yapılmış sanırım.
2. yine _dosyaIsmiTemizle() fonksiyonunda “$onlyName” değişkeni ile ilgili bir sorun var. Eğer yüklemek istediğim dosyanın uzantısı, dosya isminde de geçiyorsa sorun oluşuyor. Örneğin: “bu.bir.jpg.dosyası.jpg” isminde bir resim yüklemek istersem “bu_bir.jpg” şekline dönüşüyor. Çünkü “$onlyName” explode() ile bulunuyor ve bu da bu çeşit bir hataya sebep oluyor.
20 Ocak 2008, 13:09
Çok güzel bir class olduğunu belirtmek isterim
$up->yeniAd();
bu fonksiyonu dizi halinde çalıştırmak isterseniz
class yapısında fonksiyonda else parametresindeki $ad kısmına [$i] demek yeterli oluyo bunu farkettim paylaşmak istedim ellerine sağlık.
20 Ocak 2008, 13:13
Yorumlarınızın hepsini not ettim. Birkaç gün içerisinde yeni bir güncelleme yayınlayacağım. Class’ı kullandığınız için teşekkürler
25 Ocak 2008, 09:44
[…] eburhan Upload Class isimli PHP uygulaması ile bir sunucuya dosya yükleme işlemi yapabiliyorduk. Css Message Boxes isimli CSS uygulaması ile de web sayfamızı kullananlara, yapılan bir işlemin sonrasında renkli mesaj kutuları gösterebiliyorduk. Bu 2 uygulamada bazı güncellemeler oldu. Eğer bu uygulamalardan herhangi birisini kullanıyorsanız bu yazıdaki güncellemelere gözatmanızı öneriyorum. […]
9 Şubat 2008, 17:21
Selamlar,
Kontroller için Erişim kontrol listesi tarzında yapsan daha hoş olurdu..
10 Şubat 2008, 00:33
@Onur Yerlikaya
Nasıl mesela? Bir örnek gösterebilir misin?
10 Şubat 2008, 17:33
Öncelikle çok güzel ve düzenli kodlanmış bu sınıfı yazdığınız için çok çok teşekkürler. Ufak bir önerim olacak:
Dosya tür kontrollerinde uzantılardan ziyade MIME tür kontrolü baz alınsa daha iyi olur gibime geliyor, biliyorum resim dosyaları için bu yapılmış durumda zaten ama bilinen sıkça kullanılan dosya türleri için de bu tip kontrol desteklense daha iyi olur kanımca…
Saygılarımla…
24 Nisan 2008, 12:50
Çok güzel bir çalışma gerçekten ellerinize ve gözlerinize sağlık.
Fakat benim sormak istediğim birşey var. Bu sınıfınızı jquery’nin ajax fonksiyonu ile kullanmak istediğimde formu serialize yaptığım zaman ne yazık ki dosya bilgileri hariç bütün bilgileri alabiliyorum formdan. Çözüm için bir öneriniz var mı acaba? Ne yazık ki basit bir çözüm bulamadım.
24 Nisan 2008, 14:24
@tmrtzcn
Ajax ile dosya gönderirken farklı bir yol izlemen gerekiyor. Aşağıdaki linkten bu konuda bilgi alabilirsin.
http://ajax-tr.com/ajax-ile-dosya-gondermek/
8 Mayıs 2008, 12:54
peki bir sunucudan kendi sunucumuza dosya çekmek istersek nasıl olacak ? nasıl yapabiliriz ?
9 Mayıs 2008, 18:09
@ahmet
sunucudaki bir dosyayı kaydetmek için php’nin yerleşik “file_get_contents” fonksiyonunu kullanabilirsin. Veya cURL eklentisi etkinse onu da kullanabilirsin. Şurada örnek bir kod var.