Double compteur dans un fichier texte

Nouveau WRInaute
Je voudrais un compteur qui enregistre les visiteurs uniques quotidiens sur la deuxième ligne, et les pages vues sur la première. Voici mon code qui ne fonctionne pas.

Code:
$fichier = fopen ('compteur.txt', 'r+'); // Ouverture en lecture-écriture
$pagesvues = fgets ($fichier); // Pages vues à la première ligne
$visiteurs = fgets ($fichier); // Visiteurs à la deuxième ligne
$pagesvues++; // On incrémente $pagesvues
fseek($fichier,0); // On remet le pointeur en haut à gauche du fichier
fputs ($fichier, "$pagesvues\n"); // On ecrase l'ancien nombre de pages vues à la première ligne que l'on remplace par le nouveau, puis on va à la deuxième ligne
if (!isset($_COOKIE['visiteur'])) { // Si le visiteur n'est pas déjà passé dans la journée
setcookie ('visiteur', true, time()+86400); // Maintenant on saura qu'il est déjà passé
$visiteurs++; // On incrément $visiteurs
fputs ($fichier, $visiteurs); // On ecrase l'ancien nombre de visiteurs à la deuxième ligne que l'on remplace par le nouveau
}
fclose ($fichier); // Fermeture de la connexion au fichier

Avant de lancer le script pour le première fois, je créé le fichier "compteur.txt" avec ça dedans:
Code:
0
0

Après une exécution du script, le résultat fait peur à voir: voici le fichier compteur.txt:
Code:
0 "3 petits carrés"
1

Après 2 exécutions, ca empire:
Code:
0 "3 petits carrés"
"1 petit carré"

Après, le fichier ne change plus...

Qu'est ce qui ne va pas ?
 
WRInaute impliqué
Tu vas te prendre la tête pour rien avec un fichier texte.
J'te conseille plutôt de balancer ça dans une base de données.

Fais une table (site_compteurs) à 2 colonnes (visites,pagevues) (je simplifie à mort là, on pourrait faire des choses mieux).

Ensuite sur chaque page (avant l'envoi de ton premier header) mets ça :

Code:
//visiteur déjà reconnu (on n'incrémente que les pages)
if( isset($_COOKIE['visiteur']) )
{
mysql_query("UPDATE site_compteurs SET pagesvues = pagesvues + 1;");
}
//"première" visite
else{
setcookie('visiteur',1,time()+86400,'/','www.tonsite.extension');
mysql_query("UPDATE site_compteurs SET pagesvues = pagesvues + 1, visites = visites + 1;");
}

//et on récupère le tout à la fin si on veut l'afficher sur le site
$sql = mysql_query("SELECT visites,pagesvues FROM site_compteurs LIMIT 1;");
$compteurs = mysql_fetch_assoc($sql);

Pour le domaine du cookie (c'est mieux de le mettre, ça risque de ne pas fonctionner sur certains navigateurs), si tu veux que ça soit utilisé sur tout le site, genre si y'a des sous-domaines, vire les www (ça fera ".domaine.extension" par exemple).
 
Discussions similaires
Haut