ausführen nur, wenn Download komplett
Michael Keller
- php
0 Cheatah
Hallo zusammen!
Ich habe ein Download-Script, dass kurz gesagt folgendes macht:
Header-Ausgabe
readfile($file);
@mysql_db_query($db,"UPDATE download set downloaded=1 WHERE id='$id'");
Leider wird der db-query auch abgesetzt, wenn der Download nicht einmal beginnt, weil der Benutzer auf abbrechen klickt (im Browser)!
Jetzt meine Frage... kann man irgendwie feststellen, ob alle Daten gesendet wurden oder nicht?
mfg
Michael Keller
Hi,
Jetzt meine Frage... kann man irgendwie feststellen, ob alle Daten gesendet wurden oder nicht?
ob alle Daten gesendet wurden, ließe sich evtl. feststellen; spätestens über die Server-Logfiles. Du wirst allerdings niemals herausfinden können, ob alle Daten _empfangen_ wurden.
Cheatah
Hallo
ob alle Daten gesendet wurden, ließe sich evtl. feststellen; spätestens über die Server-Logfiles. Du wirst allerdings niemals herausfinden können, ob alle Daten _empfangen_ wurden.
Dies sollte kein Problem sein. Ich nehme nicht an, dass die ganze Datei gesendet wird, wenn der Empfänger den Download ablehnt.
Log-File Auswertung bringt mir nicht wirklich was - wird zu oft verwendet, sollte also praktischer gehen.
Die Frage ist eigentlich, ob PHP die ganze Datei ausgibt, auch wenn der Server sie nicht ganz versendet - nur dann würde php direkt mitbekommen, ob der Download gestartet bzw. beendet wurde oder nicht...
mfg
Michael
Hi,
Dies sollte kein Problem sein. Ich nehme nicht an, dass die ganze Datei gesendet wird, wenn der Empfänger den Download ablehnt.
was heißt denn hier "ablehnen"? Meinst Du abbrechen? Dein Server erfährt davon immer erst (deutlich) _nach_ dem Abbruch - und gewöhnlich sollte die Ausführung Deines Scripts dann längst beendet sein.
Die Frage ist eigentlich, ob PHP die ganze Datei ausgibt, auch wenn der Server sie nicht ganz versendet - nur dann würde php direkt mitbekommen, ob der Download gestartet bzw. beendet wurde oder nicht...
Der Download wurde gestartet - das weißt Du deshalb, weil Dein Script angesprochen wurde. Ob er beendet wurde, erfährst Du niemals. Und wenn der Server merkt, dass die Verbindung gekappt wurde, dann beendet er auch den Prozess, i.e. das PHP-Script.
Cheatah
Hallo
was heißt denn hier "ablehnen"? Meinst Du abbrechen? Dein Server erfährt davon immer erst (deutlich) _nach_ dem Abbruch - und gewöhnlich sollte die Ausführung Deines Scripts dann längst beendet sein.
ok.. dann wird das wohl nicht klappen!
Der Download wurde gestartet - das weißt Du deshalb, weil Dein Script angesprochen wurde. Ob er beendet wurde, erfährst Du niemals. Und wenn der Server merkt, dass die Verbindung gekappt wurde, dann beendet er auch den Prozess, i.e. das PHP-Script.
Da kommt mir eine Idee... ich könnte ja vor dem DB-Eintrag ein sleep() machen. Dadurch würde der Prozess noch laufen und bei abgebrochener Verbindung ev. beendet, bevor er den DB-Eintrag macht!
mfg
Michael Keller
Hi,
Da kommt mir eine Idee... ich könnte ja vor dem DB-Eintrag ein sleep() machen. Dadurch würde der Prozess noch laufen und bei abgebrochener Verbindung ev. beendet, bevor er den DB-Eintrag macht!
argl. Nein, das möchtest Du nicht, weil dann nämlich auch der Client wartet, _falls_ die Daten hinreichend schnell bei ihm ankommen - und falls nicht, war Dein sleep() nutzfrei.
Es existiert keine Lösung für Dein Problem. Du _musst_ mit einer Fehlerquote rechnen. Egal was Du tust.
Cheatah
Es hat zwar geklappt aber wie du schon gesagt hast wird der Client blokiert... ist also auch keine Lösung. Werde mich wohl damit abfinden müssen!
Trotzdem vielen Dank für die Hilfe!
mfg
Michael