Downloadcounter zählt auch bei Abbruch...
Jan
- php
0 Jens Holzkämper0 Jan
0 XaraX0 SorgenkindMech0 Tom
Hallo,
ich habe nun einen Download-counter in PHP gebastelt. Dieser zählt in der DB stets dann um eins hoch, wenn auf den Link (musik.mp3) geklick wird.
Problem: er zählt auch dann hoch, wenn der download abgebrochen wird.
Wie kann man dies vermeiden und nur wirklich durchgeführte Downloads zählen?
Danke für Ratschläge,
Jan
Tach,
Problem: er zählt auch dann hoch, wenn der download abgebrochen wird.
Wie kann man dies vermeiden und nur wirklich durchgeführte Downloads zählen?
du kannst nur sehen ob die http-Verbindung aufgebaut wird, falls ja hat der Download begonnen, ob er auch erfolgreich war kannst du nicht feststellen. Man könnte die Logfiles durchgehen und sehen ob genug Daten übertragen wurden, dann besteht zumindestens die Möglichkeit, dass die Datei komplett geladen wurde.
mfg
Woodfighter
Hallo Woodfighter,
d.h. demnach ensteht, wennn auf Abbruch geklickt wird, keine entsprechnde HTTP-Verbindung?
D.h. man könnte hier eine if Bedingung eibauen... und so zumindest nur dann hochzählen, wenn der download begonnen hat.
Damit würde man zumindest diejenigen nicht mitzählen, die von vornherein auf "Abbrechen" klicken?!
1.) Habe ich das richtig verstanden?
2.) mit welchem Befehl kann ich abfragen ob eine entsprechende HTTP-Verbindung zustandegekommen ist?
Grüsse & Danke,
Jan
Tach,
d.h. demnach ensteht, wennn auf Abbruch geklickt wird, keine entsprechnde HTTP-Verbindung?
nein, da einige Browser, z.B. die Mozilla Familie, bereits den Download startet, während das Dialogfeld angezeigt wird.
2.) mit welchem Befehl kann ich abfragen ob eine entsprechende HTTP-Verbindung zustandegekommen ist?
Das steht im Logfile des Webservers, falls der entsprechend konfiguriert ist.
mfg
Woodfighter
Hallo Jan,
ich habe nun einen Download-counter in PHP gebastelt. Dieser zählt in der DB stets dann um eins hoch, wenn auf den Link (musik.mp3) geklick wird.
Problem: er zählt auch dann hoch, wenn der download abgebrochen wird.
Wie kann man dies vermeiden und nur wirklich durchgeführte Downloads zählen?
Es gibt schlichtweg keine Möglichkeit, die 100%ig garantiert, daß nur dann Dein Counter hochgezählt wird, wenn ein File komplett (denn da fängt es schon an [vgl.: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.5]) geladen wurde.
Gruß aus Berlin!
eddi
hi du
ich weiß nicht genau ob ich jetz richtig liege, da ich das noch nicht probiert habe, aber es wäre eventuell so realisierbar:
der download zeigt nicht direkt auf die datei, sondern wird vom script gelesen
sprich es gibt besipielsweise eine download.php
dich ich beispielsweise über download.php?getfile=test.gif aufrufe (hat sogar den vorteil, dass ich bestimmen kann, dass sogar für text oder bild-dateien ein download-dialog kommt)
aufbau der download.php:
<?php
header("Content-type: application/download");
header("Content-Disposition: attachment; filename=".basename(@$datei));
@readfile(@$datei);
?>
wenn man es jetz sozusagen so machen würde, dass zeile für zeile der datei augegeben würde, dann könnte man zwischendurch prüfen, ob die verbindung noch aufrecht ist, sprich bei abbruch würde man das script sterben lassen, und auch nur ganz am ende den counter hoch setzen
wichtig dabei ist natürlich, dass eventuelle fehlermeldungen oder ähnliches unterdrückt werden, da sonst der download kaputt wäre ;)
weiß nich ob es so gehen könnte, was meint ihr?
Hello,
der download zeigt nicht direkt auf die datei, sondern wird vom script gelesen
sprich es gibt besipielsweise eine download.php
die ich beispielsweise über download.php?getfile=test.gif aufrufe (hat sogar den vorteil, dass ich bestimmen kann, dass sogar für text oder bild-dateien ein download-dialog kommt)
aufbau der download.php:
<?php
ignore_user_abort(false);
require('../.ht_include/counter.inc');
header("Content-type: application/download");
header("Content-Disposition: attachment; filename=".basename($dateiname));
if ( readfile($dateiname))
{
counter();
}
?>
So könnte das klappen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom