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