Erreur d'un compteur très simple

Fermé
Masterfree Messages postés 172 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 avril 2020 - 17 juin 2013 à 04:56
Masterfree Messages postés 172 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 avril 2020 - 17 juin 2013 à 14:26
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.

4 réponses

Utilisateur anonyme
17 juin 2013 à 09:16
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
Masterfree Messages postés 172 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 avril 2020 4
17 juin 2013 à 13:27
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
Utilisateur anonyme
17 juin 2013 à 13:44
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
Masterfree Messages postés 172 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 avril 2020 4
Modifié par Masterfree le 17/06/2013 à 14:26
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