Header already sent by... [2]
Résolu
eti-N
Messages postés
36
Date d'inscription
Statut
Membre
Dernière intervention
-
eti-N Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
eti-N Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
Bonjour
J'ai écrit une page web en PHP que j'ai, jusque là, testé avec un logiciel appelé WAMP(ou Wampserver ), qui permet de tester des pages PHP sans . Seulement il n'affiche pas toutes les erreurs relatives aux variables superglobales $_SESSION, $_COOKIES et à la fonction HEADER().En envoyant mon site sur le web, je me heurte à l'erreur suivante:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php:1) in /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at/home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php:1) in /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php on line 2
la ligne en question est:session_start();
J'ai déjà lu quelques articles concernant ce problème disant qu'il ne Faut laisser AUCUN espace avant la première balise PHP et ne pas utiliser la fonction header(); sur la même page que les variables $_SESSION. (ce dont je me suis assuré)
Voici les parties importantes de mon code:
Notez bien qu'il n'y a aucun caractère avant le première balise, mais le code ne marche quand-même pas
Merci de votre aide...
eti-N
J'ai écrit une page web en PHP que j'ai, jusque là, testé avec un logiciel appelé WAMP(ou Wampserver ), qui permet de tester des pages PHP sans . Seulement il n'affiche pas toutes les erreurs relatives aux variables superglobales $_SESSION, $_COOKIES et à la fonction HEADER().En envoyant mon site sur le web, je me heurte à l'erreur suivante:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php:1) in /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at/home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php:1) in /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php on line 2
la ligne en question est:session_start();
J'ai déjà lu quelques articles concernant ce problème disant qu'il ne Faut laisser AUCUN espace avant la première balise PHP et ne pas utiliser la fonction header(); sur la même page que les variables $_SESSION. (ce dont je me suis assuré)
Voici les parties importantes de mon code:
<?php session_start(); $_SESSION['connect']=''; ?><!DOCTYPE html> <html> <head> <title>Autres</title> <link href="codecss.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="page"> </div > </body> </html>
Notez bien qu'il n'y a aucun caractère avant le première balise, mais le code ne marche quand-même pas
Merci de votre aide...
eti-N
A voir également:
- Header already sent by... [2]
- Supercopier 2 - Télécharger - Gestion de fichiers
- 2 ecran pc - Guide
- +33 2 22 06 18 43 ✓ - Forum Mobile
- Faire 2 colonnes sur word - Guide
- Whatsapp 2 - Guide
3 réponses
Bonjour
Tu as très probablement enregistré ton script autres.php en UTF8 avec BOM alors qu'il faut l'enregistrer SANS BOM.
Le BOM (Byte Order Mark) est un caractère spécial, (en fait , 3 octets en utf8) invisible qui est mis en tout début de fichier. Ré-enregistre-le en utilisant la bonne option de ton éditeur.
ne pas utiliser la fonction header(); sur la même page que les variables $_SESSION Ça, il n'y a aucune raison.
Tu as très probablement enregistré ton script autres.php en UTF8 avec BOM alors qu'il faut l'enregistrer SANS BOM.
Le BOM (Byte Order Mark) est un caractère spécial, (en fait , 3 octets en utf8) invisible qui est mis en tout début de fichier. Ré-enregistre-le en utilisant la bonne option de ton éditeur.
ne pas utiliser la fonction header(); sur la même page que les variables $_SESSION Ça, il n'y a aucune raison.
Le BOM n'a pas de rapport avec meta charset ni avec le HTML.
C'est un caractère qui est ajouté en tête d'un fichier texte (que ce soit du HTML ou de la poésie) par l'éditeur de texte lui-même, pas par l'utilisateur. Il n'est pas affiché.
Ce caractère n'existe que pour les fichiers enregistrés en Unicode, donc ceux en UTF-8.
Les éditeurs de texte donnent généralement la possibilité d'enregistrer les fichiers avec ou sans BOM. Certains ont la (mauvaise) idée d'enregistrer AVEC BOM par défaut, il faut alors aller dans les menus pour modifier l'option.
Pour en savoir plus sur le BOM :
https://fr.wikipedia.org/wiki/Indicateur_d%27ordre_des_octets
Pour la manip à faire dans ton éditeur texte : ça dépend de lequel tu utilises, mais normalement tu devrais trouver l'option toi-même en cherchant un peu.
C'est un caractère qui est ajouté en tête d'un fichier texte (que ce soit du HTML ou de la poésie) par l'éditeur de texte lui-même, pas par l'utilisateur. Il n'est pas affiché.
Ce caractère n'existe que pour les fichiers enregistrés en Unicode, donc ceux en UTF-8.
Les éditeurs de texte donnent généralement la possibilité d'enregistrer les fichiers avec ou sans BOM. Certains ont la (mauvaise) idée d'enregistrer AVEC BOM par défaut, il faut alors aller dans les menus pour modifier l'option.
Pour en savoir plus sur le BOM :
https://fr.wikipedia.org/wiki/Indicateur_d%27ordre_des_octets
Pour la manip à faire dans ton éditeur texte : ça dépend de lequel tu utilises, mais normalement tu devrais trouver l'option toi-même en cherchant un peu.
Bonjour
le message apparaît sur le serveur simplement par ce que le paramétrage de celui ci est réglé pour afficher les warning.
tu peux le gérer via le php.ini ou en ligne de commande php via l'instruction error_reporting(0);
Tu dois sûrement faire un include de cette page depuis une autre dans laquelle tu as déjà démarré les sessions.. non ?
Quoi qu'il en soit. ..ce ne sont que des "avertissements" .. pas des erreurs à proprement parlé.
EDIT : en relisant ton message d'erreur...il semble bien que le_pere et eti aient raison.
tu as sûrement un souci de caractère en trop...et donc peut être un pb d'encodage de ton fichier.
Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
le message apparaît sur le serveur simplement par ce que le paramétrage de celui ci est réglé pour afficher les warning.
tu peux le gérer via le php.ini ou en ligne de commande php via l'instruction error_reporting(0);
Tu dois sûrement faire un include de cette page depuis une autre dans laquelle tu as déjà démarré les sessions.. non ?
Quoi qu'il en soit. ..ce ne sont que des "avertissements" .. pas des erreurs à proprement parlé.
EDIT : en relisant ton message d'erreur...il semble bien que le_pere et eti aient raison.
tu as sûrement un souci de caractère en trop...et donc peut être un pb d'encodage de ton fichier.
Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
le message apparaît sur le serveur simplement par ce que le paramétrage de celui ci est réglé pour afficher les warning.
Un message d'erreur ne s'affiche pas simplement parce que l'affichage des erreurs est autorisé. Il s'affiche avant tout parce qu'il y a une erreur. Il faut songer à la corriger avant de masquer le message. Casser le thermomètre ne fait pas baisser la fièvre.
C'est un simple avertissement parce qu'il n'arrête pas l'exécution du script. Cependant, les sessions ne marcheront pas. Fonctionnellement, c'est une erreur rédhibitoire. Comment peut-on dire "bof, yaka la cacher" ?
Tu dois sûrement faire un include de cette page depuis une autre dans laquelle tu as déjà démarré les sessions.. non ?
Bien sûr que non. Le message d'erreur précise sans équivoque possible que les sorties ont commencé à la ligne 1 de ce même fichier : output started at /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php:1, pas dans un autre qui aurait été inclus antérieurement.
Avec les éléments fournis par eti-N, l'explication du BOM est la plus évidente.
Un message d'erreur ne s'affiche pas simplement parce que l'affichage des erreurs est autorisé. Il s'affiche avant tout parce qu'il y a une erreur. Il faut songer à la corriger avant de masquer le message. Casser le thermomètre ne fait pas baisser la fièvre.
C'est un simple avertissement parce qu'il n'arrête pas l'exécution du script. Cependant, les sessions ne marcheront pas. Fonctionnellement, c'est une erreur rédhibitoire. Comment peut-on dire "bof, yaka la cacher" ?
Tu dois sûrement faire un include de cette page depuis une autre dans laquelle tu as déjà démarré les sessions.. non ?
Bien sûr que non. Le message d'erreur précise sans équivoque possible que les sorties ont commencé à la ligne 1 de ce même fichier : output started at /home/httpd/vhosts/nomdedomaine.com/httpdocs/test/autres.php:1, pas dans un autre qui aurait été inclus antérieurement.
Avec les éléments fournis par eti-N, l'explication du BOM est la plus évidente.
Je l'ai lu après. J'étais en train d'écrire quand tu l'as mis.
Reste que, message lu rapidement ou pas, dire que les warnings ne sont pas vraiment des erreurs est ...une erreur et inciter les gens à les ignorer est, sauf rares cas où la cause est bien comprise et incontournable, un bien mauvais conseil. Je voulais éviter à eti-N de le suivre.
Reste que, message lu rapidement ou pas, dire que les warnings ne sont pas vraiment des erreurs est ...une erreur et inciter les gens à les ignorer est, sauf rares cas où la cause est bien comprise et incontournable, un bien mauvais conseil. Je voulais éviter à eti-N de le suivre.
encore une question:
Sur le fait de pouvoir utiliser header(); sur la même page que session_start(); et que $_SESSION[]:
https://www.commentcamarche.net/faq/1916-php-headers-already-sent-by
il est bien précisé qu'il n'est pas possible de le faire, ce qui m'embête beaucoup, puisque ces fonctions vont souvent de paire: on établi la connexion et on envoie le client sur la page d'intérêt.
finalement, c'est possible, ou pas?
Sur le fait de pouvoir utiliser header(); sur la même page que session_start(); et que $_SESSION[]:
https://www.commentcamarche.net/faq/1916-php-headers-already-sent-by
il est bien précisé qu'il n'est pas possible de le faire, ce qui m'embête beaucoup, puisque ces fonctions vont souvent de paire: on établi la connexion et on envoie le client sur la page d'intérêt.
finalement, c'est possible, ou pas?
Effectivement, c'est écrit, mais c'est faux. Il n'y a aucune raison pour que ça ne marche pas, et il suffit de faire l'essai pour constater que ça marche.
session_start() n'envoie pas de données au client, seulement des en-têtes, il n'y a donc aucun inconvénient à utiliser header après session_start().
Il ne faut pas croire tout ce qu'on trouve sur CCM, très loin de là ! Les bonnes explications sont dans les manuels de référence. Les forums sont pratiques parce que tu peux y trouver des gens qui vont se pencher sur ton cas précis, mais pour les questions de fond, CCM ne fait certainement pas partie des références fiables.
session_start() n'envoie pas de données au client, seulement des en-têtes, il n'y a donc aucun inconvénient à utiliser header après session_start().
Il ne faut pas croire tout ce qu'on trouve sur CCM, très loin de là ! Les bonnes explications sont dans les manuels de référence. Les forums sont pratiques parce que tu peux y trouver des gens qui vont se pencher sur ton cas précis, mais pour les questions de fond, CCM ne fait certainement pas partie des références fiables.
c'est en rapport avec <meta charset="utf-8" /> ?