Posez votre question Signaler

Session_start() headers already sent [Résolu]

dracucharles 63Messages postés 17 mars 2008Date d'inscription - Dernière réponse le 11 nov. 2010 à 13:03
Bonjour,
J'héberge un site sur un FTP free, j'ai mon script admin.php qui est un formulaire de connexion pour accéder à la partie administration du site. Mais j'ai un message d'erreur en haut de ma page:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/158/sda/5/1/nom_ftp/Site/admin.php:1) in /mnt/158/sda/5/1/nom_ftp/Site/admin.php on line 2
Je sais que le session_start() se place une seule fois en haut du script et avant tout caractères.
Voici un extrait du code du script:
<?php
session_start(); // démarrage de la session
include('head.php');
include('menu.php');
?>
J'ai un message similaire sur la page index de la partie administration (index_admin.php).
Je ne comprends pas car le session_start() est placé à la première position, et j'ai créé le repertoire sessions à la racine du FTP.
Si vous pouvez m'expliquer mon erreur ou me dire ce qui ne va pas dans le script ça serait sympa.
Merci de votre aide.
Lire la suite 

Session_start() headers already sent »

19 réponses
Réponse
+1
moins plus
Salut

met session_start(); sur la même ligne que ton <?php

si ça marche toujours pas c'est que tu dois avoir un caractere qui traine ...

ton fichier admin.php est il appelé via include();? si oui vérifie qu'il n'y ai pas d'html avant ..
croy- 17 mars 2008 à 15:46
Je pense que si l'output est générée par un fichier qui "include" admin.php, le diagnostic ne dirait pas que l'output a commencé en ligne 1 de admin.php.

Il y a certinement un caractère non affichable qui traîne et un éditeur hexa permettra de le trouver.

Si tu veux, adresse-moi ton source et je regarderai.
simon - 11 nov. 2010 à 13:03
J'ai le même problème et en effet j'ai réencodé ma page en AINSI (avant j'avais converti en utf8) et la, plus de bug! j'utilise notepad++ aparement il faut faire attention quand on convertit l'encodage des caractères, fait des tests.

edit: marche avec utf8(sans BOM), c'est la solution que j'ai utilisée.
Ajouter un commentaire
Réponse
+1
moins plus
Oui j'ai vérifié et ça marche je n'ai plus de message d'erreur.
Pour notepad++ j'ai trouvé comment encoder en utf8 sans BOM (même si je ne sais pas ce que ça signifie)

Merci à tous pour votre aide
Ajouter un commentaire
Réponse
+0
moins plus
Le message précise que l'output a commencé en ligne 1 de admin.php : regarde bien ce qu'il y a en ligne 1 : une ligne blanche par exemple ?
Ajouter un commentaire
Réponse
+0
moins plus
Non, le code de ce script commence par ça:

<?php
session_start(); // démarrage de la session
include('head.php');
include('menu.php');
?>

Il n'y a pas de ligne blanche en première ligne, ni d'espace et c'est bien là le problème, je ne comprends pas pourquoi j'ai ce message.
Ajouter un commentaire
Réponse
+0
moins plus
Dans ce genre de situation, il y a qqch de bizarre au début de ton fichier, par exemple un caractère non affichable.

As-tu un éditeur hexadécimal ?
Ajouter un commentaire
Réponse
+0
moins plus
admin.php n'est pas appelé via un include
J'ai essayé de mettre session_start() sur la même ligne que <?php mais ça n'a rien changé
Pour ce qui est de l'éditeur hexadécimal j'utilise notepad++ mais je ne sais pas comment je peux voir si un caractère caché est présent.
Voila le code source complet de ma page.

<?php session_start(); // démarrage de la session
include('head.php');
include('menu.php');
?>
<div id='corps'>
<div id='sous-corps'>
<?php

if(isset($_SESSION['pseudo'])){
echo '<a href="index_admin.php">Accéder à la zone admin</a><br><br>';
echo '<a href="log.php?action=logout">Logout</a><br><br>';
}
else{
if(isset($_GET['erreur'])){

if($_GET['erreur'] == 1){
echo '<span style="color: FF0000;">Le compte n\'existe pas</span>';

}else if($_GET['erreur'] == 2)
echo '<span style="color: FF0000;">Le mot-de-passe que vous avec entré est faux</span>';
}
?>
<form action="log.php?action=login" method="POST">
Pseudo: <input type="text" name="pseudo" maxlength="32"><br><br>
Password: <input type="password" name="password" maxlength="32"><br><br>
<input type="submit" class="bouton" value="Login">
</form>
<?php
}
?> </div>
</div><!--fin CORPS-->
<?php
include('pied.php');
?>


J'espère que ça peut vous aider a comprendre mon problème.
croy- 17 mars 2008 à 16:23
Il serait préférable que tu m'adresses le fichier en pièce jointe d'un mail ou bien que tu me donnes une url pour le télécharger.

Je t'ai envoyé un "message privé" avec une adresse email adaptée.
Ajouter un commentaire
Réponse
+0
moins plus
Y ' a t'il moyen de voir ce que fait log.php ?

merci
Ajouter un commentaire
Réponse
+0
moins plus
Voilà le code de log.php en espérant que ça vous aidera a comprendre.

<?php
session_start();
include("configuration_sql.php");
$requete=mysql_query('select * from groupe_acces');
$enregistrement = mysql_fetch_array($requete);

if($_GET['action'] == 'login'){

$pseudo = $_POST['pseudo'];
$password = $_POST['password'];

if($password == $enregistrement['groupe_password'] && $pseudo == $enregistrement['groupe_nom']){
$_SESSION['pseudo'] = $enregistrement['groupe_nom'];
header("location: admin.php");
exit;
}else if($pseudo != $enregistrement['groupe_nom']){
header("location: admin.php?erreur=1");
exit;
}else{
header("location: admin.php?erreur=2");
exit;
}
}else if($_GET['action'] == 'logout'){
session_unset();
session_destroy();
header("location: index.php");
}
?>


Merci
kedjmar - 25 août 2008 à 18:24
svp moi aussi jai le m^mem problème
mais je ne sais pas comment résoudre
voila mon code:
Warning: session_start() [function.session-start]: open(/tmp/1/r/e/sess_1regadm, O_RDWR) failed: No such file or directory (2) in /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_admin.php on line 21

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_admin.php:21) in /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_admin.php on line 21

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_admin.php:21) in /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_admin.php on line 21

Warning: Cannot modify header information - headers already sent by (output started at /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_admin.php:21) in /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_admin.php on line 29

Warning: Unknown: open(/tmp/1/r/e/sess_1regadm, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (3;/tmp) in Unknown on line 0

pourtant kan je teste mes fichiers en local tout mar bien
voila le code de mon fichier
<?php
include_once('../connection.php');
include_once('../path.php');
$sql=" select * from admin where login='".$_REQUEST['txt_login']."' and password='".$_REQUEST['txt_password']."'";
//echo $sql;exit;
//$sql=$sql." and valideabonne=1"
$resultat=mysql_query($sql);
$nb_lignes=mysql_num_rows($resultat);
$row=mysql_fetch_object($resultat);

//echo $nb_lignes;exit;
if ($nb_lignes<=0)
{
header("Location: http://".$_SERVER['HTTP_HOST']."/".$path."admin/session_erreur.php");
}
elseif($nb_lignes)
{

$str=$row->idadmin."regadm";
session_id($str);
session_start();

$_SESSION['nom_admin'] = trim($row->nomadmin);
$_SESSION['id_admin'] = $row->idadmin;
$_SESSION['login_admin'] = $row->login;
$_SESSION['pwd_admin'] = $row->password;
//echo "je suis a ce niveau";
//echo $path."/index.php"; exit;
header("Location: http://".$_SERVER['HTTP_HOST']."/".$path."admin/index.php");
}

mysql_close();

?>
croy- 25 août 2008 à 19:21
Analyse le premier diagnostic (les suivants en découlent) : à la ligne 21 du script sessionopen_ad­min.php tu appelles session_start qui n'arrive pas à créer le fichier de session car le catalogue configuré pour cela n'existe pas.

La solution est soit de créer ce catalogue soit de changer la config. Il faut être sur le site pour fairre cela, ce qui n'est pas mon cas.
Ajouter un commentaire
Réponse
+0
moins plus
Dans ta page admin.php

qu'est ce que te renvoi echo $_SESSION['pseudo'];

?
Ajouter un commentaire
Réponse
+0
moins plus
Je viens de recevoir le ficher admin.php qui commençait bien par trois caractères non affichables (en hexa EF BB FF).

Ces trois caractères correspondent à un BOM utf8 introduit à un moment ou à un autre sans doute par un éditeur.
Ajouter un commentaire
Réponse
+0
moins plus
Voila qui devrait résoudre tous les problèmes :)
Ajouter un commentaire
Réponse
+0
moins plus
En effet, je ne sais pas pourquoi ces 3 caractères se sont introduits, pourtant j'ai effacé les premières et les ai réinscrites mais cela n'a rien changé.
Peux tu m'expliquer comment tu as fais pour les retirer, car je ne sais pas comment faire.

Merci encore
Ajouter un commentaire
Réponse
+0
moins plus
En utilisant un éditeur héxa : sur mon Mac j'utilise Hexedit.

As-tu vérifié que ça marchait avec le fichier que je t'ai retourné ?

Tu utilises Notepad : regarde s'il n'y a pas une préférence permettant de supprimer les BOM.

Demain j'aurai accès à un PC (quelle horreur!) et à Notepad et je regarderai ce point.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
J'ai rencontré le même problème pour un projet Web.
J'utilise un programme en ligne de commande qui supprime les 3 caractères de touts les fichiers utf-8 dans répertoire.
Comme ça je suis sur que mes fichiers sont nickel

Voici le lien :

http://hidalgoemmanuel.info/csharp-net/supprimer-les-tag-bom-dans-fichier-utf-8.html
Ajouter un commentaire
Ce document intitulé « session_start() headers already sent » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?