Jan: Downloadcounter zählt auch bei Abbruch...

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

  1. 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

    1. 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

      1. 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

  2. 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

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
  3. 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?

    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau