Pourquoi le compteur ajoute 2 à chaque exécution?

Résolu/Fermé
octani Messages postés 22 Date d'inscription dimanche 15 janvier 2012 Statut Membre Dernière intervention 28 juillet 2013 - Modifié par octani le 6/06/2013 à 11:56
octani Messages postés 22 Date d'inscription dimanche 15 janvier 2012 Statut Membre Dernière intervention 28 juillet 2013 - 6 juin 2013 à 23:39
Bonjour,
Sur le net j'ai trouvé un petit code php:
- une page.php avec:
<form action ="download.php" method= "post">
<input type="radio" name="file" value="file1.pdf">file1<br>
<input type="radio" name="file" value="file2.pdf">file2<br>
<input name="submit" type="submit" value="Download"/>
- la page download.php contient le code suivant:
<code>
<?php
if(!file_exists("counter.txt")) {
die("Unable to open the counter.txt file! Please create it and set correct permissions.<br>");
} else{
$file1 = fopen("counter.txt", "r");
$num = fgets($file1,4096);
$num += 1;
fclose($file1);
$file2 = fopen("counter.txt", "w");
fputs($file2, $num);
fclose($file2);
}
echo "Thank you for downloading a file there are " . $num ." ". "no. downloads ";
$file = $_POST['file'];
$filename="files/$file";
if( $file == "" )
{ echo "<html><title>No file has been found</title></body></html>";
exit;
} elseif ( ! file_exists( $filename ) )
{
echo "<html><title>please choose a file to Download</title><body>";
exit;
};
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
readfile("$filename");
exit();

Problème:
le code incrémente dans counter.txt un ajout double 2 , 4 , 6 , 8 ...!
Selon moi je crois que la partie du téléchargement du code header... exécute tout le code une deuxième fois! est ce que c'est vrai?
Merci de m'aider à résoudre le problème.
A voir également:

2 réponses

octani Messages postés 22 Date d'inscription dimanche 15 janvier 2012 Statut Membre Dernière intervention 28 juillet 2013
6 juin 2013 à 23:39
Voila j'ai passé des heurs étant débutant, pour corriger mon code si dessus; l'erreur provient de l'existence du fichier à télécharger, même s'il existe il faut ajouter un if comme suit:

<?php
$file_name = $_POST['filename'];
//hits
$name=basename($file_name );
if(file_exists("files/$file_name")){
if(!file_exists("stat/$name.txt")){
$f1 = fopen("stat/$name.txt", "w");
fputs($f1,0);
fclose($f1);
}

if(file_exists("stat/$name.txt")){
$f2=fopen("stat/$name.txt","r+");
$nb=fgets($f2,10);
$nb+=1;
fseek($f2,0);
fputs($f2,$nb);
//$c=fread($f2,$nb);
fclose($f2);
}
}
.............
?>
il ne reste qu'améliorer le code en cas de l'inexistence du fichier à télécharger, et d'exclure les fichiers d'extension comme php html txt ... pour sécurité.
0
Profil bloqué
6 juin 2013 à 11:51
Je rappelle que on ne doit pas parler de Hacking ou autre outil dans ce forum .
-2
octani Messages postés 22 Date d'inscription dimanche 15 janvier 2012 Statut Membre Dernière intervention 28 juillet 2013
6 juin 2013 à 23:24
Où est le hacking = piratage !! dans un petit code banal de compteur de téléchargements ??
Si c'est du hacking, où est l'erreur dans le code? C'est facile pour une personne qui comprend bien du hacking !
0