Merhaba arkadaşlar aslında buraya yazdıklarım daha önce kendi bloğumda yayınlamış olduğum yazılardır. Bu yazımda da size daha önceden yazdığım php ile uzak bir sunucudaki dosyayı kendi sunucumuza veya local bilgisayarımıza nasıl download edebiliriz onu anlatmaya çalışacağım.Aslında php ‘nin yerleşik copy fonksiyonu ile gayet basit bir şekilde uzak sunucudaki dosya download edilebilirken aynı zamanda güvenlik vb. nedenlerle bu fonksiyonun kapalı olabilme ihtimalinide düşünerek cURL kullanarak bu örneği yaptım.Copy fonksiyonu ile nasıl download edildğini de görelim isterseniz.$dosya = ‘http://www.ysfkc.com/dosyalar/down.tar.gz’;$dosya_adi = basename($dosya);$kaydedilecek_dizin = ‘test’;if (copy($dosya,$kaydedilecek_dizin.’/’.$dosya_adi)){echo ‘Dosya kaydedildi’;}else{echo ‘Dosya kaydedilemedi.’;} Yukarıdaki gibi basit bir işlemle indirmemiz olası lakin söylediğim gibi copy fonksiyonun kapalı olması ihtimali üzerine ben aşağıdaki sınıfı yazdım.Öncelikle sınıfımız hakkında bilgi verelim.setUrlAddress():
Erişim public. Bu metot ile download edeceğimiz dosyanın tam url adresini belirtiyoruz.setDirectory():
Erişim public. Bu metot v1 den v2 ye aynen aktarıldı ve işlevi download edilecek olan dosyanın hangi dizin içine indirileceği belirtiliyor. Unutmadan söylemek gerekir ki dosyanın download edileceği dizinin izin hakları ayarlanmış olmalıdır.setFileName():
Erişim public. Bu metot ile indirmek istediğimiz dosyaya yeniden isim vermek için kullanıyoruz. Ek parametreleri vardır bunlar;true:
metoda true değeri girildiğinde random bir isim verecektir.false:
metoda false değeri girildiğinde url deki dosya adını alacaktırkullanici tanimli isim:
Eğer metoda kullanıcı kendisi isim verirse o şekilde kaydedecektir. Örn: setFileName(’yeni_dosya’) gibi.getFileExtension():
Erişim private. Bu metoda sınıf içinden erişim yapılmaktadır. Böyle ayarlanmasının sebebi kullanıcının kafasının karışmaması içindir. Görevi ise indirilmek istenen dosyanın uzantısını döndürmektedir.getData():
Erişim private. Bu metot ile download edilmek istenen dosyanın içeriği alınıyor ve kaydedilmek üzere depolanıyor. Bu metot v1 den v2 ye aynen aktarıldı.saveData():
Erişim public. Bu metot ile içeriği okunup depolanan dosyanın belirtilmiş olan dizine kaydedilmesini sağlıyor. Yine bu metotda v1 den v2 ye aynen aktarıldı.getMessage():
Erişim private. Bu metodumuz ise sınıf içinde tanımlanan getMsg adlı dizide toplanan output çıktılarını uygun ve düzenli bir şekilde kullanıcıya yansıtmak için kullanılan bildirim metodur.Sınıfımızdan bahsettikten sonra gelelim sınıfımızı yayınlamayafileUrl = $url;}public function setDirectory($name){if (!is_writable($name) || !is_readable($name)){$this->getMsg[] = ‘Belirtmiş Olduğunuz Dizin Yazılabilir Değil’;$this->getMsg[] = ‘Belirtmiş Olduğunuz Dizin Okunabilir Değil’;}else{$this->dir = $name;}}public function setFileName($name){if (is_bool($name) && $name === false){$this->fileName = preg_replace(“/^(http://.*/)?/i”,”,$this->fileUrl);}else if (is_bool($name) && $name === true){$this->fileName = md5(sha1(uniqid(mt_rand().microtime()))).’.’.$this->getFileExtension();}else{$this->fileName = $name.’.’.$this->getFileExtension();}}private function getFileExtension(){return preg_replace(‘/^(http://.*.)?/i’,”,$this->fileUrl);}private function getData(){$this->curl = curl_init();curl_setopt($this->curl,CURLOPT_URL, $this->fileUrl);curl_setopt($this->curl,CURLOPT_USERAGENT,$_SERVER[‘HTTP_USER_AGENT’]);curl_setopt($this->curl,CURLOPT_RETURNTRANSFER,1);$this->content = curl_exec($this->curl);curl_close($this->curl);}public function saveData(){# Callback getData()$this->getData();# Open new file$this->file = fopen($this->dir.’/’.$this->fileName,’w’);if (fwrite($this->file,$this->content)){$this->getMsg[] = ‘Dosya Kaydedildi.’;$this->getMsg[] = ‘Dosya Yolu: ‘.$this->dir.’/’.$this->fileName.’‘;
return true;}else{$this->getMsg[] = ‘Dosya Download Edilemedi’;return false;}}public function getMessage(){echo ‘

    ‘;foreach ($this->getMsg AS $value){echo “t

  • “.$value.”
  • n”;
    }echo ‘

‘;
}}?> Gelin şimdi de bir örnek yapalım ve konuyu bitirelim. Gerekli açıklamaları örnekte comment satırlarda aktardım.setUrlAddress(‘http://www.ysfkc.com/dosyalar/ajax.tar.gz’);# Download Edilecek Dizini Belirtiyoruz.# —————————————-$file->setDirectory(‘test’);# True: Dosya adı random olarak verilir# False: Direk ajax.tar.gz olarak alacaktır.# İsterseniz de $file->setFileName(‘yeni_isim’) ile kendiniz de isim verebilirsiniz.$file->setFileName(true);# Son Olarak Dosya Kaydetme İşlemini Başlatıyoruz.# —————————————————————-if ($file->saveData()){# Download İşlemi Başarılı Oldu İse Bildirim Mesajını Alıyoruz.# —————————————————————-$file->getMessage();}else{# Download İşlemi Başarılı Olmadıysa Hata Bildirimini Yapıyoruz# —————————————————————-$file->getMessage();}?> Evet görüldüğü gibi kullanımı oldukça basit bu sınıf uzak sunucudaki bir dosyayı kendi sunucumuza veya local bilgisayarımıza kaydetmek için gayet kullanışlı.Örneğimizi indirmek için tıklayınızSaygılar.Yusuf Koç