Erreur d'un compteur très simple
Masterfree
Messages postés
212
Statut
Membre
-
Masterfree Messages postés 212 Statut Membre -
Masterfree Messages postés 212 Statut Membre -
Bonjour à tous,
Je voulais mettre un compteur de visites très simple sur mon site mais j'ai eu cette erreur :
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at H:\temp\Template_Html5 et Css\explications\explications.html:80) in H:\temp\Template_Html5 et Css\main_inc\compteur.php on line 2
Je comprends à peu près qu'il s'agit de session_start(), mais je ne sais pas pourquoi.
Source pris ici 'http://www.commentcamarche.net/forum/affich-24397331-faire-un-compteur-de-visite-visiteurs-en-php"
Voudriez-vous m'expliquer le pourquoi du comment ?
Merci d'avance de vos réponses.
--
Cordialement.
Sabrimi
Je voulais mettre un compteur de visites très simple sur mon site mais j'ai eu cette erreur :
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at H:\temp\Template_Html5 et Css\explications\explications.html:80) in H:\temp\Template_Html5 et Css\main_inc\compteur.php on line 2
Je comprends à peu près qu'il s'agit de session_start(), mais je ne sais pas pourquoi.
Source pris ici 'http://www.commentcamarche.net/forum/affich-24397331-faire-un-compteur-de-visite-visiteurs-en-php"
<?php
session_start();
if(file_exists('compteur_visites.txt'))
{
$compteur_f = fopen('compteur_visites.txt', 'r+');
$compte = fgets($compteur_f);
}
else
{
$compteur_f = fopen('compteur_visites.txt', 'a+');
$compte = 0;
}
if(!isset($_SESSION['compteur_de_visite']))
{
$_SESSION['compteur_de_visite'] = 'visite';
$compte++;
fseek($compteur_f, 0);
fputs($compteur_f, $compte);
}
fclose($compteur_f);
echo '<strong>'.$compte.'</strong> visites.';
?>
Voudriez-vous m'expliquer le pourquoi du comment ?
Merci d'avance de vos réponses.
--
Cordialement.
Sabrimi
4 réponses
-
Bonjour
A priori, ce n'est pas le code source qui est mauvais, mais l'utilisation que tu en fais.
Le fichier compteur.php est inclus alors que des données ont déjà été envoyées à l'utilisateur par le fichier explications.html.
Ça ne peut pas marcher parce que l'ouverture de session utilise les en-têtes du protocole HTTP, et que quand tu envoies de données, il n'est plus possible de revenir aux en-têtes.
La solution est de déplacer l'instruction session_start() pour la mettre avant l'envoi des données.
Il faudrait voir le code de la page qui appelle compteur.php pour te dire exactement où si tu ne le vois pas toi-même. -
Merci de ta réponse, même si c'est explicatif... pour toi !
Comme tu me l'as demandé, voici comment est appelé le fichier.[...] <a href="contact/contact.php">Contact</a> | </div> <div id="compteur"> <?php include ('main_inc/compteur.php'); ?> </div> <div id="copyright"> <script src="js/copyright.js" type="text/javascript"></script> </div> [...]
-
Il faut que tu enlèves la ligne session_start(); du début de compteur.php.
Il faut la remettre au tout début de ta page qui contient le include :<?php session_start(); ?>
Il n'est pas impossible que d'autres erreurs apparaissent si tu as copié-collé d'autres morceaux aveuglément comme celui-ci. -
J'ai bien compris ce que tu veux dire et je l'ai fait.
Bon, apparemment, ça marche... mais à chaque fois que j'actualise la page, le compteur est incrémenté !
Ca ne m'arrange pas trop, aussi, je vais essayer de mettre un autre compte ... qui ne compte pas les actualisations.
En tout cas, merci de ton aide.
Bonne journée.
Cordialement.
Sabrimi