1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Downloadgeschwindigkeits Begrenzung

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von MACRASSI, 17.12.05.

  1. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Ich wollte mal fragen wie mache ich das denn das Besucher meiner HomePage zb. nur mit 6KB Dateien runterladen können?

    Gruß Rasmus

    Ps. Will das nur mal wissen, wende das ja nicht bei meiner kleinen HomePage an, das bringt ja nichts ;)
     
  2. Flo82

    Flo82 Eifeler Rambour

    Dabei seit:
    19.04.05
    Beiträge:
    587
    Hi,

    hab das vor Jahren mal auf nem Windowsrechner mit ftp gemacht. Da konnte ich die Download- und Uploadrate zuweisen. Also registrierte User volle Geschwindigkeit, Anonyme 6KB. War n lokaler Web-server bei mir daheim.;)
    Des Tool war damals bei dem Package WAMP dabei. Obs jetzt noch dabei ist, weiß ich leider net. Schätz mal fürn Mac gibts was ähnliches.

    Gruß
    Flo
     
  3. Sir Q

    Sir Q Rheinischer Winterrambour

    Dabei seit:
    12.04.05
    Beiträge:
    921
    Hi MACRASSI,

    wenn du einen root-Server hast, kannst du eine ganze menge machen und auch für unterschiedliche FTP-accounts unterschiedliche begrenzungen/freiheiten einbauen (z.B. accountXY darf nur 2mb pro tag runterladen, oder accountZZ darf nur soviel runterladen wie er hochgeladen hat).

    Beim Apache wird es schwieriger, weil das Programm ja dazu da ist, webseiten so performant wie möglich auszuliefern. Die einfachste Möglichkeit Files nur mit 6kb/s downloaden zu lassen ist - genügend leute parallel die datei runterladen lassen *g* dann wird automatisch langsamer :)

    Ernst bei seite - wenn du einen download per PHP-Script (am besten per mod-rewrite getarnt) realisierst, dann tunnelt man in der Regel die eigentliche Datei (außerhalb der root) mit readfile durch. Wenn du da aber einen eigenes construkt ersetzt:

    Code:
    function delay_dl($filename)
    {
    	$chunksize = 1*(1024*1024); 	// 1 KiloByte Chunks
    	$buffer = '';
    
    
    	$handle = fopen($filename, 'rb');
    	if ($handle === false)
    	{
    		return false;
    	}
    	while (!feof($handle))
    	{
    		$buffer = fread($handle, $chunksize);
    		echo $buffer;
    		flush();
    		usleep(160);	// 160 Mikrosekunden pause
       }
    
       $status = fclose($handle);
       return $status;
    }
    Der Code ist nicht getestet - aber so aus dem Kopf - und das eine knappe stunde nach dem aufstehen denke ich, das es funktionieren müsste den Download damit aufzuhalten.

    Der Trick ist einfach der, bei 6 KB/s muß eine Pause von 0.166667 Sekunden 166.66666 Mikrosekunden erfolgen - gehen wir davon aus, das das Senden etwas zeit braucht, nehmen wir nur 160 Mikrosekunden - rein Rechnerisch wird damit bei 6 mailigen aufruf schon allein fast eine sekunde mit warten gefüllt, und dabei immer nur ein KB gesendet (macht also 6 Chunks zu je 1Kb pro Sekunde) ...

    ~

    Nachtrag, das war mein einundelfzigster Eintrag - 111 - schön binär :)
     
  4. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Mhm, wenn ich das script teste lade ich mit 70KB und mehr runter und er zeigt mir dann den dateiinhalt im Browser an...

    Gruß Rasmus
     
  5. Sir Q

    Sir Q Rheinischer Winterrambour

    Dabei seit:
    12.04.05
    Beiträge:
    921
    Hi MACRASSI,

    1. du mußt einen header senden - damit der Browser weiß, was da ankommt. Also einen content-type senden -
    Code:
    header("Content-type: application/pdf");
    wenn du ein PDF downloadest. Must mal etwas googeln nach anderen Content-types ...

    2. eventuell stimmt meine Überlegung für die Zeit nicht - probier es mal mit einer anderen - ruhemethode aus:
    Code:
    sleep(1);
    währe dann einfach mal genau eine sekunde pause. Vieleicht stimmt meine idee mit der ersten usleep (microsekunden) ja auch nicht ...

    ~

    Naja, programmieren ist halt nicht wie „Apple benutzen“ - es funktioniert in der Regel nicht auf anhieb. So ein Script-Schnipsel ist oft nur ein Fingerzeig - ausprobieren, die Idee aufgreifen und experimentieren - oder feststellen das es quatsch ist und was anderes machen ...
     
  6. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Hab den Thread mal wieder ausgegraben.
    Egal ob ich mit der einen oder der funktion das Script laufen lasse, ich bekomme immer wieder eine Downloadgeschwindigkeit von 60-200kb/s.

    Gruß Rasmus
     
  7. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Benutzt du den vorgeschlagenen Code von oben?
    Falls nein, poste mal deinen verwendeten.
    Fall ja, die Chunksize erscheint mir im obigen Code falsch gesetzt. Im Kommentar steht 1 Kilobyte, angegeben sind aber 1024*1024 Byte = 1 Megabyte. Damit wird pro Sekunde (Falls sleep(1)) max. ein Megabyte gesendet... bisl viel.
     
  8. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Ich hab das so wie oben.
    Ich will das man mit maximal 6kbs downloaden kann. (so das ich das einstellen kann)

    Gruß Rasmus

    Ps. Danke für eure Hilfe

    Ach ja, ich hab das so:

    Code:
    <?php
    // Wir werden eine PDF Datei ausgeben
    header('Content-type: application/mp3');
    
    // Es wird downloaded.pdf benannt
    header('Content-Disposition: attachment; filename="downloaded.mp3"');
    
    // Die originale PDF Datei heißt original.pdf
    //readfile('original.jpg');
    
    
    function delay_dl($filename)
    {
    	$chunksize = 1*(1024*1024); 	// 1 KiloByte Chunks
    	$buffer = '';
    
    
    	$handle = fopen($filename, 'rb');
    	if ($handle === false)
    	{
    		return false;
    	}
    	while (!feof($handle))
    	{
    		$buffer = fread($handle, $chunksize);
    		echo $buffer;
    		flush();
    		sleep(1);	// 160 Mikrosekunden pause
       }
    
       $status = fclose($handle);
       return $status;
    }
    
    delay_dl("podcast_download.mp3");
    
    ?>
    
     
  9. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    dann änder doch mal die Größe eines Chunks:
    Code:
    $chunksize = 6*1024;
    
    Geht's nun?
     
    MACRASSI gefällt das.
  10. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Jo!
    Jetzt klappts.
    Danke für die schnelle Hilfe.

    Gruß Rasmus

    Ich poste hier mal den ganzen Code so wie es sein muss.(fals jemand sowas braucht)

    Code:
    <?php
    // Wir werden eine PDF Datei ausgeben
    header('Content-type: application/mp3');
    
    // Es wird downloaded.pdf benannt
    header('Content-Disposition: attachment; filename="downloaded.mp3"');
    
    // Die originale PDF Datei heißt original.pdf
    //readfile('original.jpg');
    
    
    function delay_dl($filename)
    {
    	$chunksize = 6*1024; 	// 1 KiloByte Chunks
    	$buffer = '';
    
    
    	$handle = fopen($filename, 'rb');
    	if ($handle === false)
    	{
    		return false;
    	}
    	while (!feof($handle))
    	{
    		$buffer = fread($handle, $chunksize);
    		echo $buffer;
    		flush();
    		sleep(1);	// 160 Mikrosekunden pause
       }
    
       $status = fclose($handle);
       return $status;
    }
    
    delay_dl("podcast_download.mp3");
    
    ?>
    
     

Diese Seite empfehlen