BruderGogo am 09.06.2005 15:09 schrieb:
Hi!
Ich würde gerne wissen, was ich machen muss, um jemanden die Downloadgeschwindigkeit zu begrenzen, wenn er etwas von meiner Page runterlädt. Zum Beispiel wie hier, wo premium user die volle brandbeite benutzten können, und normale nur maximal 10 k/b. http://www.esl-europe.net/de/cs/5on5/mr15/eas/download/400324/
ich würde das auf meiner page gerne so anbieten, dass eingeloggte user die volle bandbreite ausnutzten können, und nicht eingeloggte eine begrenzung der geschwindigkeit haben.
MfG
Wenn Du einen eigenen dedizierten Server mit Apache 1.3 hast, dann sind mod_bandwidth oder mod_throttle wahrscheinlich praktische Lösungen: http://www.cohprog.com/mod_bandwidth.html
http://www.snert.com/Software/mod_throttle/index.shtml
Du könntest auch einen FTP-Server aufsetzen, bei dem sich User authentifizieren müssen - die meisten moderneren FTP-Server bieten Methoden zur Bandbreitenbegrenzung auf Userbasis. Für die nicht-authentifizierten User setzt Du dann eben ein recht niedriges Bandbreiten-Limit auf den Anonymous-Zugang.
Wenn Du keinen dedizierten Server hast, sondern nur einen PHP/MySQL-Shared-Host, kannst Du auch eine (wenngleich nicht so elegante) Bandbreitendrosselung mit PHP erreichen, wenn Du die Datei über ein Script auslieferst (was auch diverse anderen Vorteile hat, z.B. um Deeplinking durch Drittseiten zu unterbinden). Der Trick ist, in einer Schleife immer ein Dateihäppchen mit fread vom lokalen Dateisystem einzulesen und dann auszuliefern und danach kurz zu warten, bevor der nächste Happen serviert wird. Das hat gleichzeitig den Vorteil, dass sich der Speicherverbrauch des Scriptes durch Wahl eines hinreichend kleinen (aber nicht zu kleinen) Buffers (also der Häppchengröße) reduzieren lässt:
Beispiel (hab's nur teilweise getestet):
set_time_limit(0);
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-length: ".(string)(filesize($fullpath)));
header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Pragma: no-cache");
if ($file = fopen($fullpath, 'rb')) {
while(!feof($file) and (connection_status()==0)) {
sleep(1);
print(fread($file, 1024*$buffersize));
flush();
}
$status = (connection_status()==0);
fclose($file);
Viele Grüße
Markus