Lors d’une présentation d’un compteur de visite en PHP à insérer dans une page HTML, j’ai constaté que le code n’était pas interprèté !
Le serveur web renvoi le contenu du fichier au lieu du résultat, alors que le même script avec l’extension php fonctionne.

Pour que le serveur web renvoi le résultat du script, il faut modifier la configuration du serveur.

Le compteur

C’est un compteur basique, il se contente d’incrémenter une valeur dans un fichier pour mémoriser le nombre de passages sur la page et d’afficher cette valeur. Il n’essaie pas de déterminer le nombre de visiteurs uniques ni d’identifier l’origine des visiteurs, pour cela il existe des outils ou des sevices adaptés à cet usage.
Il permet aussi de faire un peu de révision sur le langage PHP !

Contenu de la page html contenant le script :

    <html>
    <head>
    </head>
    <body>
    <center><h1>Compteur de visite</h1></center>
    <p>Appel du script de comptage</p>
    <?php
    $fichier="compteur.txt";

    print "<p>Nom du fichier de compteur : $fichier </p>";
    if( !file_exists($fichier) ) {
    print "<p>Creation d'un fichier vide.</p>";
    $fp = fopen($fichier, "w");
    fwrite($fp, "0");
    fclose($fp);
    }

    if (!$fp = fopen("$fichier","r+"))
    { echo "<p>-E-> Echec de l'ouverture du fichier $fichier</p>";
    }
    else
    { $nbvisites = fgets($fp,10);
      if ($nbvisites=="") $nbvisites = 0;
      $nbvisites++;
      fseek($fp,0);
      fputs($fp,$nbvisites);
      fclose($fp);
      print "<p>Nombre de visite : $nbvisites</p>";
    }
    ?>

    <p>Fin de l'affichage du compteur.</p>

    </body>
    </html>

La page affichée dans le navigateur ne renvoie pas le nombre de visites :

    Appel du script de comptage
    Nom du fichier de compteur : $fichier "; if( !file_exists($fichier) ) { print "
    Creation d'un fichier vide.
    "; $fp = fopen($fichier, "w"); fwrite($fp, "0"); fclose($fp); } if (!$fp = fopen("$fichier","r+")) { echo "
    -E-> Echec de l'ouverture du fichier $fichier
    "; } else { $nbvisites = fgets($fp,10); if ($nbvisites=="") $nbvisites = 0; $nbvisites++; fseek($fp,0); fputs($fp,$nbvisites); fclose($fp); print "
    Nombre de visite : $nbvisites
    "; } ?>
    Fin de l'affichage du compteur.

Configurer le serveur Web

Explications

Avec quelques recherches, l’informations est facile à trouver :

  • si la page a l’extension html, alors elle est renvoyée vers le navigateur de l’utilisateur. Le navigateur ne sait pas interprèter le php, uniquement le JavaScript.
  • si la page a l’extension php, alors le code contenu dans le fichier est interprèté et le résultat est envoyé vers le navigateur

Paliatif

Pour que la page compteur.html s’affiche correctement, il faut donc la renommer en compteur.php.
Dans ce cas, la page s’affiche correctement :

    Appel du script de comptage

    Nom du fichier de compteur : compteur.txt

    Nombre de visite : 6

    Fin de l'affichage du compteur.

Un fichier php peut contenir du code html, seules les parties spécifiques doivent être encadrées par les balises de code.

Correction

Pour que les fichiers *.html contenant du code php, il faut rajouter un fichier .htaccess à la racine du site Web. Ce fichier viendra complèter le contenu du fichier httpd.conf qui définit la configuration du serveur Apache.
Ce fichier doit contenir :

    AddType application/x-httpd-php .htm
    AddType application/x-httpd-php .html

Quand ce fichier est présent, le contenu des fichiers html est analysé comme celui des fichiers ayant l’extension php et le code est donc interprèté.