PHP Fehlerhafte Logik in einen PHP Script

M

master.rv

Gast
Morgen,

habe ein kleines Logik Problem in einen PHP Script.
Angenommen jemand klickt auf ein Link zu download einer Datei auf. Das auch funktioniert ,und danach wird eine Mail Versand die den Zähler (wie oft) an mich verschickt. So weit gut.

Das Problem entsteht wenn man den download doch nicht speichert sondern abbricht. Die Mail wird trotzdem verschickt was natürlich Unsinn ist.

Wie kann ich es vermeiden?

<?
if($_GET['file']){

$datei1="a.txt";
$from="webmaster@xxxxxxx.de";
$to="webmaster@xxxxxx.de";
$domain="www.xxxxxx.de";

if($_GET['file']=="zip"){
header("Content-type: application/octet-stream");
header("Content-Disposition: inline; filename="dateix.zip"");
header("Content-length: ".(string)(filesize("../download/dateix.zip")));
readfile("../dateix.zip");

if(file_exists($datei1)){
$zaehler1="0";
fopen($datei1, "a" );
$datei1=fopen($datei1,"r+");
$aufruf1=fgets($datei1,6);
$zaehler1=$aufruf1+1;
rewind($datei1);
fwrite ($datei1,$zaehler1);

$subject="dateix.zip wuerde heruntergeladen.";
$subject1="dateix.zip wuerde zum $zaehler1 mal heruntergeladen.";
$message=" Hallo Webmaster von $domain,\n\n der $subject1 \n\n ";

mail($to,$subject,$message,$headers,"-f ".$from) or print "<div align="center" color="red">
Konnte Mail nicht verschicken!</div>";
}
die();
}
}
?>
 
Zuletzt bearbeitet von einem Moderator:
Das Zeichen an 436ter Stelle ist verkehrt. Tausche es durch jenes an Stelle 621.
 
Hi,

Sithys schrieb:
Das Zeichen an 436ter Stelle ist verkehrt. Tausche es durch jenes an Stelle 621.

nichts für ungut, aber sollte ich wirklich die Stelle durch zählen finden? Es wäre sehr nett von Dir wenn Du es direkt zeigen könntest.
Es ist mein zweites Script das ich geschrieben habe. Und ich kenne die Möglichkeit es automatisch zählen lassen noch nicht.
 
Er will damit auf die CODE-Tags hinweisen, die kannst du auch noch nachträglich einfügen.

Ein Problem ist bspw., dass der Download nicht angehalten und wieder aufgenommen werden kann. Ein Downloadmanager wird auch nicht funktionieren.
Für eine saubere Lösung gibt's mehrere Ansätze:
1. Weiterleitung mit einem 307 Temporary Redirect
2. Generierung von eindeutigen URLs mit einer ID drin
3. ...

Verabschiede dich von der Idee, einen einzelnen Download an sich zählen zu können. Die Korrelation Download:HTTP Request ist nicht 1:1.​

Dein Zählen mit fopen/fread/fwrite ist schlecht, und zwar wirklich, da du eine Race-Condition hast. Besser arbeitest du dich zeitnah mal in Datenbanken ein (z.B. ​sqlite, falls du keinen MySQL-Server aufsetzten willst).
 
Hi,

ehrlich gesagt ist dieses Script für mich so wie eine Übung Aufgabe. Bis auf die unnötige Mail Benachrichtigung bei abgebrochenen download, funktioniert der Script korrekt. Das was Ihr mir als Tipps gibt ist für mich noch viel zu hoch. Ich wollte nur das kleine Problem beseitigen, leider bin noch nicht so weit. Diese Mail Info war eher nur als Nachricht für mich, zeitgleich nach dem download das jemand die Datei heruntergeladen hat. Es gibt eigentlich 2 Dateien die für download stehen (sie sind aber nicht stark gefragt und die Routinen sind gleich nur die Variablennamen unterscheiden sich). Und mein Script zählt die Downloads ziemlich gut, getrennt für die 2 Dateien.

Trotzdem ich bedanke mich bei Euch recht herzlich für die Unterstützung.

Grüße Ludwig
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben