Merhabalar çok uzun bir aradan sonra ilk defa post giriyorum bloğa. Bunun nedeni araya bayram tatili işlerin yoğunluğu da etken olmadı değil. Galiba biraz da ben boşverdim nedense. Dün oturup Pardus 2008 güncellemesi 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 dosya download sınıfımı biraz daha geliştirdim ekleme ve çıkarmalar yaparak daha kullanışlı bir hale getirdim.

İlk sürümdeki sınıfımız bir yapılandırıcı ile başlatılmaktaydı. Böyle olunca da her nesne için yeniden sınıf çağrılması ve başlatılması gerekiyordu ki bu da hem zaman kaybı hemde sıkıcı bir durum ortaya çıkarmaktaydı. Bu nedenle ilk versiyondaki yapılandırıcı olan __construct() metodumuzu bu yeni versiyon da kaldırmış bulunmaktayım.

Yeni sürümdeki metotlarımıza şöyle bir göz atalım..

setUrlAddress(): (yeni)
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(): (yeni)
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ır
kullanici tanimli isim:
Eğer metoda kullanıcı kendisi isim verirse o şekilde kaydedecektir. Örn: setFileName(’yeni_dosya’) gibi.

getFileExtension(): (yeni)
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(): (yeni)
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.

Evet şöyle bir baktımda baya konuştum sanırım. Bahsettiğimiz sınıfın yeni sürümü aşağıdadır.

< ?php
/* Php File Download v2.0
 * Yusuf KOÇ ( Raiden ) 
 * http://www.ysfkc.com
 *
 * Copyright 2008 Ysfkc.Com
 * Licensed under the GNU General Public License, version 2.
 * See the file http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
 */
 
class fileDownload
{
    private $fileUrl;
    private $file;
    private $dir;
    private $curl;
    private $content;
    private $fileName;
    private $fileExtension;
    private $getMsg = array();
 
    public function setUrlAddress($url)
    {
        $this->fileUrl = $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: <i>'.$this->dir.'/'.$this->fileName.'</i>';
            return true;
        }
        else
        {
            $this->getMsg[] = 'Dosya Download Edilemedi';
            return false;
        }
    }
 
    public function getMessage()
    {
        echo '<ul>';
        foreach ($this->getMsg AS $value)
        {
            echo "\t<li>".$value."</li>\n";
        }
        echo '</ul>';
    }
}
?>

Yeni sürüm php dosya download sınıfımız ile bir örnek yapalım.

< ?php
/* Php File Download v2.0
 * Yusuf KOÇ ( Raiden ) 
 * http://www.ysfkc.com
 */
 
# Sınıfımızı Dahil Ediyoruz.
# -------------------------------
include_once('ysfkc.file.php');
 
# Sınıfımızı Başlatıyoruz.
# -----------------------------
$file = new fileDownload;
 
# Download Etmek İstediğimiz Dosyayının URL Adresini Giriyoruz.
# -------------------------------------------------------------------
$file->setUrlAddress('http://www.ysfkc.com/dosyalar/ajax.tar.gz');
 
# Download Edilecek Dizini Belirtiyoruz.
# ----------------------------------------
$file->setDirectory('test');
 
# Dosyaya Random İsim Verdiyoruz True Parametresini Girerek.
# 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ız