• 23-03-2010, 17:32:21
    #1
    Arkadaşlar Merhaba

    Curl İle RapidShareden Kendi Sunucuma Download Yapıyorum Yanlız Download İşlemini Gerçekletirirken Aynı Anda Bir Yüzde Çubuğu Yapmak İstiyorum

    Yanlız Sorun şuki Bildiğiniz Gibi Dosya İndirme İşlemi Bitmeden Herhangi Bir Mesaj Vermiyor Bunu Aşmanın En Basit Yolu Nedir Bu Engeli Nasıl Aşa Bilirim Bir Kaç Yöntem Denedim Ama Bir Sonuca Ulaşamadım.

    Kodlarım Bunlar

    indir.php
    <?PHP 
    include "fonksiyon.php";
    
    		$link = $_POST['url'];
    		$test_url=$link;
    		$ApiURL=RapidApiURL($test_url);
    		$Sonuc=RapidFileCheck($ApiURL);
    
    $link = "http://".$ayar["rapid"]["user"].":".$ayar["rapid"]["pass"]."@rs".$Sonuc['ServerID'].".rapidshare.com/files/".$Sonuc['DosyaID']."/".$Sonuc['DosyaAdı']."";
    	include("class.progress_bar.php");
    
    $pbar = new progress_bar('pbar',1,500,FALSE); //İlerleme Çubuğu İçin Sınıfı Başlatıyoruz
    
    $num_tasks = $Sonuc['DosyaBoyutu']; // Çubuğu Dosya Boyutuna Göre Ayarlıyoruz
    $pbar->create(); // Porgres Barı Oluşturuyoruz
    
    for($cur_task = 0; $cur_task <= $num_tasks; $cur_task++)
    {
    	usleep(10000); // 10000 microsaniye geçiktirme ile başlatıyoruz
    	flush();
    	$pbar->set_percent_adv($cur_task,$num_tasks); 
    }
    	indir($link,$Sonuc['DosyaAdı'],$ayar["dizin"]["yol"]); // İndirme İşlemi...
    ?>
    fonksiyon.php
    include "ayar.php";
    function RapidApiURL($URL)
    {
        //Url içerisinden dosya Id ve adını almamızı sağlayacak deseni tanımlıyoruz.
        $desen="/files\/(.*)\/(.*)/";
        preg_match($desen,$URL,$File);
        $RapidApi="http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles_v1";
        $RapidApi.="&files=" .$File[1]; //Dosya ID
        $RapidApi.="&filenames=" . $File[2];// Dosya Adı
        return $RapidApi;
    }
    
    function RapidFileCheck($URL)
    {
       $ch = curl_init();// CURL başlatılıyor
       curl_setopt($ch, CURLOPT_URL, $URL); // Adrese Curl ile bağlanıyor
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
       $string = curl_exec($ch); // Adresten dönen değer değişkene aktarılıyor.
       curl_close($ch);
       $string=split(",",$string);// Dönen sonuç ',' karakteri ile bölünerek array tipli bir değişkene aktarılıyor.
      
       Switch ($string[4])// DosyaDurumu
       {
           Case 0: $Sonuc['durum']=0;break;
           Case 1: $Sonuc['durum']=1;break;
           Case 2: $Sonuc['durum']=1;break;
           Case 3: $Sonuc['durum']=0;break;
           Case 4: $Sonuc['durum']=0;break;
           Case 5: $Sonuc['durum']=0;break;
           Case 6: $Sonuc['durum']=1;break;
       }
       if ($Sonuc['durum']=1){
    	   $Sonuc['DosyaID']		="" . $string[0] . "";
    	   $Sonuc['DosyaAdı']		="" . $string[1] . "";
    	   $Sonuc['DosyaBoyutu']	="" . byteFormat($string[2], "KB") . "<br />";
    	   $Sonuc['ServerID']		="" . $string[3] . "";
    	   $Sonuc['DosyaDurumu']	="" . $string[4] . "<br />";
    	   $Sonuc['KısaHostAdı']	="" . $string[5] . "";
       }
       return $Sonuc;
    }
    function indir($adres,$isim,$yol) {
    	$ch = curl_init($adres);
    	$fp = fopen($yol."/".$isim, "w");
    
    	curl_setopt($ch, CURLOPT_FILE, $fp);
    	curl_setopt($ch, CURLOPT_HEADER, 0);
    
    	curl_exec($ch);
    	curl_close($ch);
    	fclose($fp);
    }
    function byteFormat($bytes, $unit = "", $decimals = 2) {
        $units = array('B' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4, 
                'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8);
        $value = 0;
        if ($bytes > 0) {
           
            if (!array_key_exists($unit, $units)) {
                $pow = floor(log($bytes)/log(1024));
                $unit = array_search($pow, $units);
            }
    
            $value = ($bytes/pow(1024,floor($units[$unit])));
        }
    
        if (!is_numeric($decimals) || $decimals < 0) {
            $decimals = 2;
        }
     
        return sprintf('%.' . $decimals . 'f '.$unit, $value);
      }
    form.php
    <p align="center"><span class="header">File Downloader | Coded By MelihBuyuk</span></p><hr>
    
    <form action="indir.php" method="post">
    <table align="center">
    <tr><td><input type="text" class="input" name="url" size="70"></td><td>&nbsp;</td></tr>
    <tr><td>&nbsp;</td><td><input type="submit" value="yukle"  class="inputbuton" name="urlpost"></td></tr>
    </form>
    ve Son Olarakta

    class.progress_bar.php
    <?php
    class progress_bar
    {
    	var $name;		
    	var $percent; 
    	var $width;    
    
    	
    function progress_bar($name = 'pbar',$percent = 1,$width = 100,$auto_create = TRUE){
    		
    		$this->name = $name;
    
    		$this->percent = $percent;
    
    		$this->width = $width;
    		if($auto_create)
    		{
    			$this->create();
    		}
    }
    
    function create(){ ?>
    		<div align="center">
    		  <center>
    				<table cellspacing="0" cellpadding="0" style="FONT-FAMILY: Tahoma; FONT-SIZE: 11px;">
    				<tr><td></td>
    				<td><div style='border:#BBBBBB 1px solid; width:300px; height:10px;'>
    				<div id="progress" style='background-color:#000099; margin:1px; width:0%; height:9px;'>
    				<img name="<? echo($this->name)?>" border="0" src="http://www.realestate-in-fortworth.com/admin/images/fill.gif" width="<? echo(($percent * .01) * $width);?>" height="11">
    				</div>
    				</div></td><td></td><tr>
    				<tr>
    				<td align="left" id="received">0 KB</td>
    				<td align="center" id="percent">0%</td>
    				<td align="right" id="speed">0 KB/s</td>
    				</tr></table>
    			</center>
    		</div>
    <?
    	}
    
    function set_name($name)
    	{
    		$this->name = $name;
    	}
    
    function set_percent($percent)
    	{
    		$this->percent = $percent;
    
    		echo('<script>document.images.' . $this->name . '.width = ' . ($this->percent / 100) * $this->width . '</script>');
    	}
    function set_percent_adv($cur_amount,$max_amount)
    	{
    		$this->percent = ($cur_amount / $max_amount) * 100;
    		echo('<script>document.images.' . $this->name . '.width = ' . ($this->percent / 100) * $this->width . '</script>');
    	}
    
    function set_width($width)
    	{
    		$this->width = $width;
    	}
    }
    
    ?>
    Kodlar Ve Yazı Biraz uzunca Oldu Ama Umarım Ne Yapmak İstediğimi Anlamışsınızdır

    Bu Konuda Epey Sıkıştım Şimdiden Teşekkürler
  • 23-03-2010, 17:44:52
    #2
    Bunun için karşı tarafta ki dosya boyutunu öğrenip, daha sonra ajax ile inen dosyanın boyutunu kontrol edersin, daha sonra asıl dosyanın boyutu ile karşılaştırıp yüzdesini hesaplarsın kaçta kaçı inmiş diye, daha sonrada ajax ile grafiği ekrana basarsın, bunun saniyede bir tekrarlarsın..
  • 23-03-2010, 17:51:34
    #3
    Enigmatic adlı üyeden alıntı: mesajı görüntüle
    Bunun için karşı tarafta ki dosya boyutunu öğrenip, daha sonra ajax ile inen dosyanın boyutunu kontrol edersin, daha sonra asıl dosyanın boyutu ile karşılaştırıp yüzdesini hesaplarsın kaçta kaçı inmiş diye, daha sonrada ajax ile grafiği ekrana basarsın, bunun saniyede bir tekrarlarsın..
    Karşıdaki Dosyanın Boyutunu Alabiliyorum

    İndir Sayfası Şu Şekilde

    <?PHP  
    include "fonksiyon.php"; 
    
            $link = $_POST['url']; 
            $test_url=$link; 
            $ApiURL=RapidApiURL($test_url); 
            $Sonuc=RapidFileCheck($ApiURL); 
    
    $link = "http://".$ayar["rapid"]["user"].":".$ayar["rapid"]["pass"]."@rs".$Sonuc['ServerID'].".rapidshare.com/files/".$Sonuc['DosyaID']."/".$Sonuc['DosyaAdı'].""; 
    
        indir($link,$Sonuc['DosyaAdı'],$ayar["dizin"]["yol"]); // İndirme İşlemi... 
    ?>
    Dosya Boyutunu İse şu Şekilde Alabiliyorum

    Karşıdaki Dosyanın Boyutu KB Cinsinden

    $Sonuc['DosyaBoyutu']; // Karşıdaki Dosyanın Boyutu KB Cinsinden
    Bunu Benim İçin Küçük Bir Örnekle Açıklarsan Sevinirim Çünki Şuan Düşünce Olarak Sışıkmış Durumdayım

    Küçük Bir Örnek Yaparsan Gerisini Ben Getiririm

    Cevabın İçin Teşekkürler
  • 23-03-2010, 18:42:49
    #4
    Arkadaşlar Yardım Edecek Yokmu Baya Bi Sıkıştım çünki
  • 23-03-2010, 22:48:45
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    İstediğini php ile verimli bir şekilde yapamazsın malesef dosya boyutunu sunucunun ortalama indirme hızına böleceksin kaç saniyede download eder aşağı yukarı misal 100 MB bir dosyayı 30 saniyede indiriyorsa.Ajax progress kullanacaksın işte 30 saniyede %100 olacak şekilde buda tam verimli olmaz ama php ile anca öyle yapılır.
  • 23-03-2010, 23:54:14
    #6
    S4l1h adlı üyeden alıntı: mesajı görüntüle
    İstediğini php ile verimli bir şekilde yapamazsın malesef dosya boyutunu sunucunun ortalama indirme hızına böleceksin kaç saniyede download eder aşağı yukarı misal 100 MB bir dosyayı 30 saniyede indiriyorsa.Ajax progress kullanacaksın işte 30 saniyede %100 olacak şekilde buda tam verimli olmaz ama php ile anca öyle yapılır.

    Aslında Oluyor Olmuyor Değil Ama problem İlk Önce

    progress Bar işlem Yapıyor Bar İşlemini Bitirdiği anda Hemen Ardından Download işlemi Başlıyor benim Amacımsa İkisi Aynı Anda İşlem Yapması Yani Bir Birlerinin İşleminin Bitmesini Beklemeden İkisi Bir Çalışsın
  • 24-03-2010, 08:40:16
    #7
    Üyeliği durduruldu
    php kodlari ayrik zamanli calisir. bu durumda bu işi php ile yapabilmek pek mümkün degil.parca parca indirme işlemi fget gibi işlemlerle bir nebze yapilabilir. yinede şahsen çok verimli olacagini düşünmüyorum
  • 24-03-2010, 10:43:13
    #8
    dosyanın boyutunu alıp fgets ile 10 a bölün her proges barında value unu ona göre arttırabilirsiniz
  • 24-03-2010, 18:20:11
    #9
    RedZ adlı üyeden alıntı: mesajı görüntüle
    dosyanın boyutunu alıp fgets ile 10 a bölün her proges barında value unu ona göre arttırabilirsiniz
    Küçük Bi örnekle Açıklayabilirmisin

    Kısa Bişi Yeterli Kardeş Şuan İçin Beyin Durmuş Durumda Fikir Kıtlığı Çekiyorum