Compteur de téléchargement: où est l'erreur?

octani Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
octani Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je débutais avec un petit script php comme suivant:
j'ai crée une page download.php, quand on clique sur un lien de téléchargement le code s'exécute et incrémente le nombre de téléchargement du fichier dans un fichier texte data.txt: on y ecrit $count:::$file.
le code est:
<?php
$data = "data.txt";
$file=$_POST['file']; //nom du fichier à télécharger
$filename="files/$file";
$fp = fopen($data,"r+") or die("impossible..."); //ouvrir data.
txt
$fpc = file_get_contents($fp); // récupérer son contenu
if(strpos($fpc, $file)!== false) { // si data.txt contient le nom du fichier on modifie son count en lui ajoutant 1 ( ici mon problème..)
$content = fread($fpc,filesize($data));
$content = str_replace($count, $count+1, $content);


fseek($f,0); 
fputs($fp,$content."\n");
 
fclose($fp);
}
else{ // si le nom du fichier n'est pas inclus on l'écrit et le count=1
$fp = fopen($data,"r+");

$count=1;
$content=$count." :: ".$file."\n";
fseek($f,0); 
fputs($fp,$content);
	 
fclose($fp);
}
// 
ici le code du téléchargement;
//
exit;


le téléchargement se déroule sans problème, sans aucune écriture dans data.txt sauf un 1!
J'attend vos aides avec remerciements .
Merci d'avance.

2 réponses

  1. Utilisateur anonyme
     
    Salut salut,

    J'ai noté quelques petites choses bizarre dans le code :
    $fpc = file_get_contents($fp);

    Ici tu passes en paramètre la variable issue du fopen, or la fonction file_get_contents prend un chemin en paramètre, as tu vérifie le retour que tu avais dans la variable $fpc? Je pense qu'il est NULL.
    Dans ton cas fais plutôt :
    $fpc = file_get_contents($data);
    $data étant le chemin du fichier.

    $fpc sera donc une chaine String, pour vérifier la présence d'une chaine et mettre à jour le compteur, j'aurais fais qqch comme ça :

    $tab_content=explode("\n",$fpc);
    //On obtient un tableau avec une ligne par indice
    


    Avec ensuite une boucle qui vérifie ligne par ligne la présence ou non de la chaine dans le tableau $tab_content en mettant à jour le paramètre.

    Il y a peut être mieux mais je trouve que c'est le plus intuitif.
    0
  2. octani Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci bien kyser soze , de me répondre.
    j'ai rectifié mon code comme suit:
    <?php
    $data = "data.txt";
    $file=$_POST['file'];
    $filename="files/$file";
    $fpc = file_get_contents($data); 
    if(!strpos($fpc, $file)!== false) {
    $tab_content=explode("\n",$fpc);
    $tab_content[0]++;
    $content=$tab_content[0]." :: ".$tab_content[1];
    fputs($fpc,$content);
    fseek($fpc,0); 
    fputs($fpc,$content."\n");
    fclose($fpc);
    }
    else{
    $fp = fopen($data,"r+");
    $count=1;
    $content=$count." :: ".$file."\n";
    fseek($fp,0); 
    fputs($fp,$content);
      
    fclose($fp);
    }
    ...
    ?>
    

    Mais l'écriture ne se fait plus dans data.txt.
    le code ( $file=$_POST['file'] ) est-t-il juste ?
    c'est pour récupérer la valeur d'un input radio d'une autre page contenant un form:
    <form action ="telecharge.php" method= "post">
    <input type="radio" name="file" value="pain.pdf">pdf<br>
    <input type="radio" name="file" value="viande.doc">doc<br>
    <input type="radio" name="file" value="poisson.zip">zip<br>
    <input name="submit" type="submit" value="télécharger vite!"/>
    Merci de m'aider.
    0