Rechercher : dans
Par :

Session_start() headers already sent

Dernière réponse le 25 aoû 2008 à 19:21:09 dracucharles, le 17 mar 2008 à 14:58:27 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Firefox 2.0.0.12

Meilleures réponses pour « session_start() headers already sent » dans :
[PHP] Headers already sent by..... Voir Lorsque vous utilisez une fonction PHP qui manipule les en-têtes HTTP comme par exemple: header() setcookie() session_start() Il est important d'utiliser ces fonctions avant d'avoir généré le moindre flux vers le client. A partir du moment où...
Bad pool caller / Header VoirSymptômes Un écran bleu d'affiche avec le message suivant : Bad Pool Caller Bad Pool Header Résolution Le message d'erreur Bad Pool Caller ou Bad Pool Header signifie que l'appel d'une application a échoué. Il est généralement suivi d'un certain...
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
Faire fonctionner une carte wifi atheros Voir*1. Les Dépôts *2. Linux-headers *3. Madwifi-tools **Remarque *4. Charger les modules *5. Vérifier *6. Un cas spécifique:AR5007EG *Pour finir La plupart des commandes sont à taper en étant root (administrateur) 1. Les...

1

croy, le 17 mar 2008 à 15:25:12

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 ?

Répondre à croy

2

dracucharles, le 17 mar 2008 à 15:29:20

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.

Répondre à dracucharles

3

croy, le 17 mar 2008 à 15:35:08

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 ?

Répondre à croy

4

vdumontier, le 17 mar 2008 à 15:41:54

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 ..

Répondre à vdumontier

5

croy, le 17 mar 2008 à 15:46:19
  • +1

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.

Répondre à croy

6

dracucharles, le 17 mar 2008 à 16:12:23

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.

Répondre à dracucharles

7

croy, le 17 mar 2008 à 16:23:18

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.

Répondre à croy

8

vdumontier, le 17 mar 2008 à 16:46:25

Y ' a t'il moyen de voir ce que fait log.php ?

merci

Répondre à vdumontier

9

dracucharles, le 17 mar 2008 à 17:04:23

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

Répondre à dracucharles

17

kedjmar, le 25 aoû 2008 à 18:24:51

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_ad­min.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_ad­min.php:21) in /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_ad­min.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_ad­min.php:21) in /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_ad­min.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_ad­min.php:21) in /web/sites/vhbu3/1/223/81397/public/www/admin/sessionopen_ad­min.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();

?>

Répondre à kedjmar

18

 croy, le 25 aoû 2008 à 19:21:09

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.

Répondre à croy

10

vdumontier, le 17 mar 2008 à 17:12:04

Dans ta page admin.php

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

?

Répondre à vdumontier

11

croy, le 17 mar 2008 à 17:24:05

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.

Répondre à croy

12

vdumontier, le 17 mar 2008 à 17:25:10

Voila qui devrait résoudre tous les problèmes :)

Répondre à vdumontier

13

dracucharles, le 17 mar 2008 à 17:48:50

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

Répondre à dracucharles

14

croy, le 17 mar 2008 à 17:55:47

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.

Répondre à croy

15

dracucharles, le 17 mar 2008 à 18:05:02

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

Répondre à dracucharles

16

gLuk, le 24 avr 2008 à 11:17:25

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

Répondre à gLuk
Collection CommentÇaMarche.net