Download snelheid beinvloeden

  • Onderwerp starter Onderwerp starter eeyk
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

eeyk

Terugkerende gebruiker
Lid geworden
28 mrt 2007
Berichten
1.232
ik heb hier een script die de snelheid voor Geen Leden moet beïnvloeden.

Iemand die betaald krijg natuurlijk 45.0 kb per seconden
Iemand die gewoon lid is krijg maar 10 kb per seconden
en iemand die niet lid is mag niet meer dan 5kb per seconden downloaden..


hij werkt al maar $speed doet het niet goed

PHP:
if($_GET['cat'] == "4"){
if(isset($_GET['download'])){
if($data->level == 30){
$speed = "45.0";
}elseif($data->level == 1){
$speed = "10.0";
}else{
$speed = "5.0";
}
// local file that should be send to the client
$local_file = "upload/".$url;
// filename that the user gets as default
$download_file = $url;
// set the download rate limit (=> 20,5 kb/s)
$download_rate = $speed; 
if(file_exists($local_file) && is_file($local_file)) {
    // send headers
    header('Cache-control: private');
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: '.filesize($local_file));
    header('Content-Disposition: filename='.$download_file);
    // flush content
    flush();    
    // open file stream
    $file = fopen($local_file, "r");    
    while(!feof($file)) {
        // send the current file part to the browser
        print fread($file, round($download_rate * 2048));    
        // flush the content to the browser
        flush();
        // sleep one second
        sleep(1);    
    }    
    // close file stream
    fclose($file);}
else {
    die('Error: The file '.$local_file.' does not exist!');
}
}
}
 
Laatst bewerkt:
Wat bedoel je precies met "$speed werkt niet goed"? Het script werkt wel, maar....?
 
nou het downloaden gaat snel maar het wachten tot je een download scherm krijg zoals


Opslaan en uitvoeren dat duurt langer maar de download tijd moet langer niet het wachten op het scherm
 
ik heb het nog niet kunnen vinden weet iemand de oplossing?
 
Het script werkt hier prima. De snelheid wordt gelimiteerd en de download gaat dus langzaam. Wel een opmerking: de opgegeven snelheid in Kb/s wordt verdubbeld. Dit komt doordat
Code:
print fread($file, round($download_rate * 2048));
eigenlijk
Code:
print fread($file, round($download_rate * 1024));
zou moeten zijn.
 
ik heb de oplossing voor mijn probleem gevonden


Sleep(1); = Sleep(0);


maar nu volgende probleem download snelheid is te snel 59 kb moet 5.0 download rate hebben en moet niet gelijk klaar zijn
 
Laatst bewerkt:
Sleep op 0 zetten heeft als resultaat dat je script gewoon doorloopt. Dan kun je die regel net zo goed weglaten. Het hele idee achter de code is dat je X bytes verstuurd en dan 1 seconde wacht.

Stel, $speed is 5. In jouw code doe je dat maal 2048 en vervolgens zet je php 1 seconde in de wacht. Met als resultaat dat je 5*2048=10240 bytes per seconde doorlaat, oftwel 10 Kb/s (zoals ik al aangaf zou je met 1024 moeten vermenigvuldigen om de juiste snelheid te krijgen).
 
ik heb het ook veranderd naar 1024 maar download snelheid past zich niet aan

5.0 kb per seconden hij download 59,9 kb in 1 seconden dat kan toch niet dan?
 
Ik zou sowieso de downloadsnelheid niet proberen te beïnvloeden, maar gewoon de maximale download hoeveelheid beperken, maar dat even terzijde.

In plaats van steeds een stukje te doen en dan even te wachten, kun je niet makkelijk gewoon uitrekenen hoelang de download moet duren (bijvoorbeeld file is 55 kb, download moet 11 seconden duren) en dan het hele bestand ineens versturen, met sleep(11) ervoor of erna?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan