Php ile dosya download

Merhabalar. Bu yazımda elimden geldiğince hem class yapısı hem de php ile uzak sunucudaki bir dosyayı kendi local veya sunucumuza kaydetmeyi göreceğiz.

Öncelikle sınıfımızın bir planını yapalım.

Merhabalar. Bu yazımda elimden geldiğincehem class yapısı hem de php ile uzak sunucudaki bir dosyayı kendi localveya sunucumuza kaydetmeyi göreceğiz.

Öncelikle sınıfımızın bir planını yapalım.

  • Sınıfımıza indirilecek dosyanın tam url adresini belirteceğiz.
  • Dosyanın indirileceği dizinin belirtilmesi
  • İndirilmek istenen dosyanın yeni bir isim, random bir isim veya direk dosya adı ile kaydedilmesi
  • Dosya uzantısının alınması
  • İndirilecek dosya içeriğinin okunup depolanması
  • İçeriği okunan dosyanın kaydedilmesi
  • Kullanıcıya bildirim yapmak için bildirim hazırlanması


Şimdi yukarıda belirttiğimiz işlemleri yapmaya koyulalım..

<?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>’;
        }
}
?>

 

Şimdi biraz daha ayrıntıya girelim.

setUrlAddress() metodunda kullanıcıdan dosyanın tam url adresini alıyoruz ve bunu sınıfımızın içinde kullanılmak üzere tanımlanmış $fileUrl ye daha sonra kullanmak için depoluyoruz.


setDirectory() ile kullanıcıdan alınan dizin adının yazılabilir ve okunabilir olup olmadığı kontrol ediliyor dizin yazılamaz ve okunamaz ise $getMsg dizimize gerekli bildirim mesajları ekleniyor. Eğer yazılabilir ve okunabilir ise sınıf içinde tanımladığımız $dir değişkenin de depolanıyor.


setFileName() sınıfımızın üç adet parametre alan fonksiyonu. Bu metot yukarıda da belirttiğimiz gibi üç adet parametre almaktadır bunlar true false ve kullanıcı tanımlı isim. Eğer parametre olarak true verilirse metot random bir isim üretip $fileName değişkenine eşitleyecektir. False değeri verilirse dosya adında değişiklik yapmadan $fileName’e eşitleyecektir. İkisi de girilmediği taktirde kullanıcının belirttiği dosya ismi $fileName’e eşitlenecektir.


getFileNameExtension() metodumuz ile de download edilmek istenen dosyanın uzantısını döndürüyoruz.


getData() ile de download edilecek dosyanın içeriği okunup $content içine depolanıyor. Bu metotda cURL kullandım eğer cURL yüklü değil ise doğal olarak sınıf çalışmayacaktır. Ayrıca cURL kullanmamın bir diğer nedeni ise user-agent bilgisinin gönderilmesi bunun da nedeni bazı siteler user-agent kontrolü yapmaktalar bu sebeple bunu da bir nebze aşmış oluyoruz.


saveData() metodu sınıfımızın start fonksiyonu oluyor öncelikle getData() çağrılarak download edilecek dosyanın içeriğinin alınması sağlanıyor. Ardından $file ile kullanıcıdan aldığımız bilgilere göre kaydedilecek dizin ve dosya yazma modunda açılıyor ve fwrite() ile içeriği alınan dosya kaydediliyor. Sonuc doğru ise uygun bildirim mesajları ayarlanıp fonksiyondan true olarak dönüyoruz eğer bir hata oluştu ise false dönüyoruz.


getMessage()  sınıfımızın son metodu. Bu metod ile $getMsg ye depolanmış bildirim mesajlarını foreach ile uygun bir formatta bildirim yapıyoruz.

Bir örnekle tamamlayalım

<?php											 
# 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();
}

?>


Yazım hatalarım için özür dilerim. Uygulamayı buradan indirebilirsiniz.


Yusuf Koç

Arama Terimleri:

dosyanın download edilmesi php, php uzak dosya indirme, php dosya download, php download file, php file download, php uzaktan dizin içeriğini indirme, php kaydetmeden dosya indirmek, php dosya download v2 0, php direk dosya indirme, is_bool php nedir

Benzer Konular:

  • Ftp kullanarak dosya yükleme PHP kodlarını kullanarak, sayfamız üzerinden ftp sunucumuza dosya yüklüyoruz…<?php  // $_FILES[] komutunu kullanacağız//PHP Manuele bakarak komut hakkında detaylı bilgi alabilirsiniz...
  • Ext4 Dosya Sistemi Geliyor. Slahdot’dan gelen rss haberlerinde karşılaştığım linux-watch.com’daki haber göre hard disk’lerinin terabyte sınırlarına ulaşmasıyla ext3 dosya sisteminin 21. yüzyıl hard disklerinin...
  • C ile dosya işlemleri C ile bir dosya içeriği nasıl okunur ve içerik ekrana yazdırılır ,dosyaya nasıl veri yazılır ya da yazılmış olan veri...
Yazar - 18 Ekim 2008. Kategori PROGRAMLAMA. Bu yazıya yazılan yazıları RSS üzerinden takip edebilirsiniz RSS 2.0. Yorum yazabilir veya geri izlemede bulunabilirsiniz.

"Php ile dosya download" için yapılan toplam yorum - 5

  1. teşekkürler güzel sınıf.

  2. uygulamayı indirdim inşallah dosyaları çalıştırabilirim

  3. peki wget komutunu php üzerinden kullanabilirmiyiz? örneğin rar lı bir dosya indirdik ve açmak istiyoruz?

  4. Eğer Bir Acemi Bunları ıncelerse. Anlamlarını Öğrenirse Çok ıyi ışler Çıkarabılır Diye Düşünüyorum.
    Not: Eğer Hata Görürsem Düzeltip Koyarım ;)

  5. Suleyman Demirkeser

    küçük bir öneri olarak curl fonksiyonlarında direk file parametresi var setopt seçeneklerinde. Bu parametre set edilerek direk dosyaya kaydetmeside sağlanabilir. fopen a alternatif olarakta direk file_put_contents kullanilabilir. Cok guzel bir calisma olmus, ellerinize saglik

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>