14 Ağustos 2008Php ile dosya download etme
Merhabalar efendim yine baya bir uzun aradan sonra yeniden yazı yazma fırsatı doğdu. Bu kadar uzun neden bekledim önce onlardan biraz bahsedeyim. Elimde bir mobilya e-ticaret işi vardı. Tüm zamanımı ona ayırdığım için bloğa vakit ayıramadım. Hoş bundan sonra da yine yok olucam bir hafta kadar malum herkes tatiline gitti geldi ve sıra bende :). Lafı Fazla uzatmadan gelelim bu yazıdaki konumuza.
Başlığımızdan da anlaşıldığı gibi php ile uzak sunucudaki bir dosyayı kendi belirttiğimiz ve yazma izni olan dizinimize download edeceğiz. Adı geçen sınıfımız php5 baz alınarak kodlanmıştır.
Sınıfımızı şöyle bir tanıyalım ve içeriği paylaşalım değil mi ?
<?php /** * File Downloader * Yusuf KOÇ <yusufkoc@ayva.net> * http://www.ysfkc.com * */ class fileDownload { private $fileURL; private $file; private $dir; private $curl; private $return = array(); private $content; /* Set Url Name */ public function __construct($url) { $this->fileURL = $url; } /* Set Directory */ public function setDirectory($name) { if (!is_writable($name) || !is_readable($name)) { exit('<ul>'.$name.' Hatası.<li>Dizin Okuma Modunda Değil</li><li>Dizin Yazma Modunda Değil</li></ul>'); } else { $this->dir = $name; } } /* Get Data */ protected function getData() { $this->curl = curl_init(); curl_setopt($this->curl,CURLOPT_URL, $this->fileURL); curl_setopt($this->curl,CURLOPT_RETURNTRANSFER,1); $this->content = curl_exec($this->curl); curl_close($this->curl); } public function saveData() { /* Parse File Name */ preg_match("#http:\/\/.*\/(.*)#i",$this->fileURL,$this->return); /* Call Data */ $this->getData(); $this->file = fopen($this->dir."/".$this->return[1],"w"); if (fwrite($this->file,$this->content)) { return true; } else { return false; } } } ?>
Sınıfımızı yukarıda da gördüğümüz gibi dört adet metoddan oluşmaktadır. Sınıfımız bir construct ile direk tetiklenerek başlatılıyor. Ardından setDirectory() metodu ile dosyamızı hangi dizine indirceksek onu belirtiyoruz ve saveData() metodu ile de dönen sonuca göre bilgilendirme yapıyoruz.
Sınıfımızın kullanımına gelir isek şu şekilde kullanabiliriz.
<?php # File Download Sınıfı Dahil Ediliyor. # ----------------------------------- include_once('file.download.class.php'); # Sınıfımız Başlatılıyor # --------------------- $file = new fileDownload('http://www.ysfkc.com/dosyalar/php_ile_resim_thumnail_olusturma.rar'); # Download Dizinimiz Belirtiliyor # ------------------------------ $file->setDirectory('test'); # Durum Kontrol Ediliyor # --------------------------- if ($file->saveData()) { echo "Dosya download edildi."; } else { echo "Dosya download edilemedi. Yeniden Deneyiniz."; } ?>
Öncelikle sınıfımızı mevcut dosyamıza dahil ediyoruz. Ardından sınıfımızı download edeceğimiz dosyamızın url adresini girerek başlatıyoruz. Daha sonra download dizinimizi belirtip ardından durum kontrolü yaparak dosyamızın download edilip veya edilmediği hakkında bilgi elde ediliyor.
Örnekteki dosyamızı buradan indirebilirsiniz. Güle güle kullanın kullanırken de beni hatırlayın ![]()

Gercekten güzel yazılarının devamını php konular olarak bekliyorum
merhaba yusuf cok faydali bir dokuman olmus ellerine saglik yalniz bir sorum olacakti bunu dosya degil de bir resim dosyasini almak istersek nasil bir yol izlemeliyiz yani ornegin http://resimcekileceurl.com/resim.jpg den sadece resimi cekip bunu sql e ekleme gibi bisey aciklama yaparsan cok memnun olurum
tesekurler tekrar
@orkun
olarak değiştirip yine indirebilirsin. yalnız dosya ismine $this->return[1] olarak ulaşabilirsin.
Merhaba,
Uzun zamandan sonra ceviz.net’e(LoS.ToF) tekrar bir bakayım dedim o sıra blog’unu gördüm.
İyi güzel OO ile hazırlanmışsın sınıfı da bence burada biraz hatalar mevcut:
Her dosya için new bir sınıf kopyası oluşturuyorsun, her sınıfın tekrardan oluşturumu sana performans kaybı sağlayacaktır bilgine.
Hımm, örnek kodlar silinmiş, o zaman bir de şöyle belirteyim
“public function saveData()” yı static hale getirir isen, her sınıf için tekrar tekrar fonksiyonu oluşturmadan da gerekli işlemi yapabilirsin.
Ayrıca getUrl, getDirectory gibi fonksiyonlarda yardımcı olacaktır.
Öncelikle yorumunuz için teşekkür ederim Murat BEŞER. Kodlarınızı silmek zorunda kaldım sayfa yapısı bozuluyordu. Önerilerinizi dikkate alacağım. Aynı zamanda bu yazdıklarımın hepsi birer örnek nitelikte tabi ki yeni başlayanlara..
Tabikide öyle olacak, o yüzden kodlarımızın kullanım esnekliğini öğrettiğimiz insanlara anlatmak lazım.
Sonuçta onlar bizim eserimiz
@murat
yıllaaaaar önce Delphi ile ilgili aramızda ufak bir yanlış anlaşılma olmuştu (Sene 2002-2003 olabilir). Eminim hatırlamazsın.
Bilmelisinki sonra çok pişmanlık duydum; çok ta kafama takıldın.
o gereksiz konuşma ve gerilme için “gerçekten” üzgün olduğumu bilmelisin.
Umarım gene görüşür; olumlu tartışmalar yaparız.
Gerçekten anladığım bir php uygulaması… Teşekkürler
[...] yaparken komodo ide diye tanıttığım program da yine daha önceden yazmış olduğum php ile dosya download betiğine biraz çeki düzen verdim ve böylelikle hem komodo ide yi biraz kullanmış oldum hem de [...]