samy-delux: Downloader mit Traffic begrenzung

Hallo,

Ich will einen Downloader erstellen. So weit kein Problem, aber es soll ne Traffic begerenzung haben.
Frage: Wie kann ich das realisieren. Und wi kann ich den bereits verbrauchten Traffic auslesen?
Ich hatte mir gedacht ich speicher einfach inner DB immer die Dateigröße der Datei die jemadn runterlädt. Das ist aber umständlich weil ich ja so ned merke wenn der User den Download abbricht und wenn die Datei 100 MB groß ist und er bei 10 MB abbricht dann werden in die DB ja trotzdem 100 MB geschrieben!

Gibbet dazu ein Tutorial weil ich sowas noch nie gemacht hab und Google leitet mich nur auf irgendwelche Downloader Seiten wie die von Getright weiter :(

mfg samy,

  1. Halihallo samy-delux

    Ich hatte mir gedacht ich speicher einfach inner DB immer die Dateigröße der Datei die jemadn runterlädt. Das ist aber umständlich weil ich ja so ned merke wenn der User den Download abbricht und wenn die Datei 100 MB groß ist und er bei 10 MB abbricht dann werden in die DB ja trotzdem 100 MB geschrieben!

    Nun, das ist nur je nach Konfiguration und Umsetzung des Systems
    möglich. Um die das Problem etwas genauer zu erleutern, muss man mit
    der Argumentation etwas tiefer anfangen:
    Wenn der Benutzer dein Download-Script aufruft, wird ein Request auf
    den Webserver ausgelöst. Dieser Webserver startet dein Script,
    welches die Datei einliest und ausgibt. Diese Ausgabe wird vom
    Webserver gecached (wieviel ist abhängig vom Webserver) und dann an
    den Client gesendet. Wenn du also z.B. 4MB Daten über PHP ausgegeben
    hast, heisst das nicht, dass auch bereits alle 4MB beim Client an-
    gekommen sind. Das ist das erste Problem, das zweite ist der Abbruch
    des Clients. Wenn der Client den Download abbricht, wird die
    Verbindung zum Webserver getrennt. Diese Verbindungstrennung wird
    jedoch dem PHP-Script im Normalfall nicht mitgeteilt. Mit anderen
    Worten: Dein Script kann nicht in Erfahrung bringen ob und wann der
    Client die Verbindung geschlossen hat. Es kann sein, dass dein
    Webserver eine Möglichkeit unterstützt, dass das Script, sobald die
    Verbindung vom Client geschlossen wird, abgewürgt wird (KILL-Signal).
    Daraus könntest du dann wenigstens -mit einigem Aufwand- etwas
    anfangen.
    Wenn du den Webserver selber programmieren könntest, wäre eine
    Traffic-Kontrolle einfach zu machen (über Sockets kann man den
    Zeitpunkt des Verbindungsabbruches einfach feststellen)...

    Eine weitere Möglichkeit diese Trafficbegrenzung zu implementieren,
    wäre eine Analyse des Logfiles des Webservers. Diese Speichern auch
    die Grösse der Dateien, welche gedownloaded wurden; jedoch IMHO
    lediglich bei staatischen Ressourcen (da der Request typischerweise
    gleich bei Beginn ins Log geschrieben wird, muss die Grösse der
    Ressource logischerweise bereits dann bekannt sein => nur bei
    staatischen Ressourcen möglich). So funktionieren auch die
    Trafficanalysen und -Limiten bei Webspaceangeboten (hm. werden dort
    tatsächlich nur staatische Ressourcen gemessen? - Weiss das wer?).

    Du siehst, du wirst es nicht einfach haben (oder es gibt eine
    einfache Möglichkeit, die ich übersehen habe). Warum willst du es
    denn so genau haben? - Einfach die Dateigrösse (ungeachtet
    Downloadabbruch) in der DB zu speichern, wäre IMHO eine einfach
    umzusetzende Lösung. Die Frage ist nur, ob sie auch genau genug
    ist...

    Viele Grüsse

    Philipp

    1. Halihallo

      Eine weitere Möglichkeit diese Trafficbegrenzung zu implementieren,
      wäre eine Analyse des Logfiles des Webservers. Diese Speichern auch
      die Grösse der Dateien, welche gedownloaded wurden; jedoch IMHO
      lediglich bei staatischen Ressourcen (da der Request typischerweise
      gleich bei Beginn ins Log geschrieben wird, muss die Grösse der
      Ressource logischerweise bereits dann bekannt sein => nur bei
      staatischen Ressourcen möglich). So funktionieren auch die
      Trafficanalysen und -Limiten bei Webspaceangeboten (hm. werden dort
      tatsächlich nur staatische Ressourcen gemessen? - Weiss das wer?).

      Selbst ist der Mann:
      Ich habe es kurz auf Apache 2.0.50/PHP5.0.1 getestet. Der Request auf
      ein PHP-Script wird gelogt *nachdem* das Script beendet wurde (selbst
      wenn die Verbindung vom Client abgebrochen wird) *und* die Grösse der
      Ausgabe wird mitgeloggt. Insofern sind alle Ressourcen bei der Traffic-
      berechnung berücksichtigt; die Zahl ist einfach zu gross, da auch
      abgebrochene Downloads vollumfänglich gemessen werden. Dies könnte
      jedoch vom System und dessen Konfiguration abhängig sein.

      Viele Grüsse

      Philipp