php 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 ;)