8768 sujets

Développement web côté serveur, CMS

Salut, j'ai un code qui permet de lire le contenu d'un fichier mais j'ai l'impression qu'il lit pas du début à la fin Smiley decu

le code :
$handle = fopen('facpseudos.php', 'a+');
$omeg = 0;
$gamm = 0;
if ($handle)
{
    fseek($handle, 0);
    while (!feof($handle))
    {
        $chaine = explode(":", (fgets($handle)));
        $fac = $chaine[1];
        switch($fac){
            case 'omega':
            $omeg++;
            break;
            case 'gamma':
            $gamm++;
            break;
            }
    }
fclose($handle);
}
echo 'users omega : '.$omeg.' et users gamma : '.$gamm;


Le fichier :
premiereligne:omega
to175:gamma
energix10:omega
Niiwatori:omega
spectruskiller:gamma

et la sortie :
users omega : 0 et users gamma : 1

Help svp ! Merci
Je ne sais pas ce qui cloche dans ton code, mais voilà ce que je ferais:
$handle=fopen('facpseudos.php','a+');
$omeg=0;
$gamm=0;
if($handle) {
    while($line=fgets($handle)) {
        $str=explode(":",$line);
        $fac=$str[1];
        if($fac=='omega') $omeg++;
        elseif($fac=='gamma') $gamm++;
    }
    fclose($handle);
}
echo 'users omega : '.$omeg.' et users gamma : '.$gamm;
C'est simplement les caractères de fin de ligne qui perturbent la comparaison. Il ne doit pas y avoir de retour ligne sur la dernière entrée donc c'est la seule qui est comptabilisée.

Tu fais une comparaison $fac=='omega' mais en fait la valeur de $fac est omega\n (ou omega\r\n si le fichier est encodé au format DOS).

Tu peux faire trim($fac) === 'omega' pour supprimer les retours ligne.
Modifié par FraiseTagada99 (31 May 2014 - 17:19)