Erreur d'un compteur très simple

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"
<?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

  1. Utilisateur anonyme
     
    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.
    0
  2. Masterfree Messages postés 212 Statut Membre 4
     
    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>
    
    [...]
    

    0
  3. Utilisateur anonyme
     
    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.
    0
  4. Masterfree Messages postés 212 Statut Membre 4
     
    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
    0