Site réalisé sur
une plate-forme Word et Web


Joomla - Erreur Cannot send session cache limiter - headers already sent

@logo_WordEtWeb_mini

 

CMS  -  JOOMLA    -   Erreur « headers already sent »

 

 

Paniqué, un de mes amis m’a appelé. Il avait changé le mot de passe de sa base de données, et voici le message d’erreur qu’il avait en haut de son écran :

 

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /homez.305/LoginFTP/www/canaris-jaunes/configuration.php:1) in /homez.305/LoginFTP/www/canaris-jaunes/libraries/joomla/session/session.php on line 423

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homez.305/LoginFTP/www/canaris-jaunes/configuration.php:1) in /homez.305/LoginFTP/www/canaris-jaunes/libraries/joomla/session/session.php on line 423

 

Warning: Cannot modify header information - headers already sent by (output started at /homez.305/LoginFTP/www/canaris-jaunes/configuration.php:1) in /homez.305/LoginFTP/www/canaris-jaunes/libraries/joomla/session/session.php on line 426

 

headers already sent  - un peu de technique :

 

La plupart des sites Internet utilisent des sessions pour conserver les informations, envoyées par le visiteur, d’une page à l’autre.

 

La gestion des sessions commence toujours par la commande PHP : session_start();

Cette commande doit être exécutée tout au début du traitement d’une page et avant que le processus ait écrit un seul caractère dans le buffer HTML de la page.

Si un seul caractère, quel qu’il soit, est envoyé dans le buffer HTML de la page, la commande session_start(); verra qu’elle n’est pas la première à passer et vous affichera un magnifique message « … Cannot send session cookie - headers already sent … ».

 

Quand ce type d’erreur apparait sur un site Internet, il est extrêmement difficile au développeur de trouver la cause de l’erreur, car elle peut se trouver dans n’importe quel script utilisé et surtout concerner des caractères invisible de prime abord et qui se trouvent avant le massage en mode PHP. C'est-à-dire avant la ligne de commande « < ?php » dans un script PHP.

 

headers already sent  - découverte de la cause de l’erreur :

 

La tâche du développeur a été facilitée aujourd’hui du fait qu’un seul paramètre avait changé entre le moment « Correct » et le moment « Erreur ».

 

Séquence qui a permis de cerner ce problème :

 

·         Transfert de JOOMLA sur un hébergement mutualisé OVH.

·         Configuration initiale de JOOMLA par l’exécution du script wwwdomaine.com/installation/index.php.

·         Affichage de la page d’accueil du site : état correct

1.     Avec Filezilla transfert de « OVH à Micro » du fichier  configuration.php

2.     Sur le micro, pour le du fichier  configuration.php, avec notepad.exe

·         Ouverture du fichier

·         Sauvegarde et enregistrement du fichier

·         Fermeture du fichier

3.     Avec Filezilla transfert de « Micro à OVH » du fichier  configuration.php

·         Affichage de la page d’accueil du site : état erreur

 

headers already sent  - analyse de la cause de l’erreur :

 

A première vue la consultation du fichier  configuration.php, avec notepad.exe ne montre aucun problème.

 

Il m’a fallu faire appel à un éditeur hexadécimal de texte pour faire apparaître la cause réelle de l’erreur, que voici :

 

 

On peut constater que trois caractères non visibles sous notepad  ont été insérés avant la commande de passage au PHP : « < ?php ».

 

Il ne restait plus qu’à fabriquer le petit outil qui me corrigerait proprement cette anomalie.

 

J’ai donc créé l’outil « Clean_PHP_File.exe » qui supprime proprement tous les caractères situés avant « < ?php ».

headers already sent  - Téléchargement de « Clean_PHP_File.exe » et utilisation :

 

Traitement :

Télécharger dans Outils WordetWeb  le fichier « Clean_PHP_File.exe » et le mettre dans le dossier :

·         Windows 64 bits :   C:\Program Files (x86)

·         Windows 32 bits :   C:\Programmes ou C:\Program Files

Aller dans dossier contenant le fichier « configuration.php » de JOOMLA puis :

·         Passer la souris sur le fichier « configuration.php »,

·         Bouton droit : « Ouvrir avec »,

·         Sélectionner « Choisir le programme par défaut »,

·         Décocher « Toujours utiliser le programme sélectionné … »,

·         Bouton « Parcourir »,

·         Sélectionner le fichier « Clean_PHP_File.exe »,

·         Terminer en cloquant sur « OK ».

·         Le fichier « configuration.php » est nettoyé.