IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Entêtes déjà envoyés


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut Entêtes déjà envoyés
    Bonjour,

    j'ai changé d'hebergeur recemment et mes redirections qui étaient faites par des header et qui fonctionnaient plantent maintenant...

    voici les erreurs auxquelles j'ai le droit:


    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/136/sdb/5/8/magiealacarte/top.php:9) in /mnt/136/sdb/5/8/magiealacarte/connect.php on line 26

    Warning: Cannot modify header information - headers already sent by (output started at /mnt/136/sdb/5/8/magiealacarte/top.php:9) in /mnt/136/sdb/5/8/magiealacarte/connect.php on line 37

    Mes headers sont ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header ('Location: index.php'); 
    			exit();
    Merci de votre aide, je suppose que c'est encore dû au changement de version PHP...

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    J'avais déjà lu des choses dessus mais je ne suis pas parvenu a remettre mon code en marche. Comment se fait il que cela marche sur un hébergeur et pas sur un autre ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    si le buffer est activé sur le serveur, le problème ne se produit pas.
    mais il vaut mieux corriger ton code.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    Je dois donc utiliser d'autres moyens de redirections plus 'soft' comme le HTML ou JVS ?

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je dois donc utiliser d'autres moyens de redirections plus 'soft' comme le HTML ou JVS ?
    Non, car même si cela reste possible, ce n'est pas du tout une bonne solution.
    Enfin, c'est mon avis.

    Le problème, c'est que les infos que tu donne ne sont pas suffisantes pour te dire quel serait le vrai problème.
    Bien que la cause principale est dû à un envoie d'un entête trop tôt, les raisons peuvent être multiples.
    Donc rien nous dit que ce serait directement lié à ta redirection faite par un header().


    Il faudrait que tu donne plus de code, et particulièrement dans les fichiers et lignes avoisinantes qu'indique les messages d'erreurs.
    Le top.php (lignes 9) et le connect.php (ligne 26).

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    voila le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    	session_start();  
    	if($_SESSION['droit']!=1)
    	header ('Location: indexu.php'); 
    	exit();
    ?>
    et


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    	        	if ($data[0] == 1) // si on a trouvé dans la BDD on charge les données relatives au compte 
    				{ 
             				 session_start(); 
            				 $_SESSION['pseudo'] = $_POST['pseudo']; //demarrage de session perso
     
    						$reponse = mysql_query('SELECT * FROM user WHERE pseudo="'.mysql_escape_string($pseudo).'"');
    						$donnees = mysql_fetch_array($reponse);
     
    					 $_SESSION['droit'] = $donnees['droit']; // determination des droits admin ou non
    					$_SESSION['mail'] = $donnees['mail'];
    					$_SESSION['id']=$donnees['id'];
     
     
              				 header("Location: info.php"); 
    						exit();
           				}

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Arfff...
    Mettre du code, ok, c'est ce qui a été demandé, mais un poil de commentaire n'aurait pas été de trop non plus

    Si on ne parvient pas à faire le rapprochement entre le code et les lignes qu'indiquent les retours d'erreur.
    L'erreur serait à la ligne 26 et 37 du connect.php, il aurait été bon de préciser à quelle code ça correspondait. Bref, les messages d'erreur c'est fait pour aider à corriger les erreurs.

    Pour la 1er partie de code, il y a une condition : if($_SESSION['droit']!=1)
    Mais est ce qu'il est certain que l'élément droit existe dans la session ? Rien ne le dit.
    Théoriquement, il faudrait au moins tester son existence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (isset($_SESSION['droit']) && $_SESSION['droit'] != 1) {
        // Droit existe et est != de 1
        header(... etc ...)
        exit();
    }
    else {
        // droit n'existe pas
    }
    Pour mieux vérifier tout ça, (debugger), il est bon de faire ici un print_r($_SESSION) pour voir si droit existe dans tous les cas.


    Dans l'autre partie de code, tu exploite une variable $pseudo dans une requête.
    Mais comme on a pas tout le code, on peu se demander si cette variable existe bien, d'autant plus que juste avant tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['pseudo'] = $_POST['pseudo']; //demarrage de session perso
    Ce ne serait pas plutôt $_SESSION['pseudo'] que $session ?

    Aussi, tu démarre la session (session_start) en plein code.
    Pour quelle raison le fais tu as ce moment ? Quelle restriction y a t-il à le faire ainsi ?
    Ne serait il pas mieux de le faire (bien) avant ?

    Tu as une condition comme ceci : if ($data[0] == 1)
    Mais après tu exploite un tableau $donnees. N'y aurait il pas confusion ? Est ce normal ?


    Toujours est il que l'on peu tout à fait envisager ici que tu aurais une erreur faite avant le header(), ce qui aura pour effet de générer un contenu HTML, ce qui malheureusement provoque ce type d'erreur que tu as.
    N'as tu pas d'autres erreurs avant ?

    Toujours dans cette 2ème partie de code, n'a tu pas ne serait ce qu'1 saut de ligne avant le session_start() ou le header() ?
    Un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    // du code php
    ?>
    <--- ici un saut de ligne non permis (provoquera ce genre d'erreur)
    <?php
    sessiont_start();
    header(... etc ...);
    ?>

Discussions similaires

  1. [PHP 5.2] Savoir s'il y a un entête d'envoyé
    Par illeriane dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2009, 01h51
  2. [Cookies] setcookie et entêtes déjà envoyés
    Par ph_anrys dans le forum Langage
    Réponses: 3
    Dernier message: 05/03/2008, 12h35
  3. Réponses: 26
    Dernier message: 16/08/2007, 16h37
  4. Réponses: 16
    Dernier message: 19/02/2007, 16h25
  5. Réponses: 2
    Dernier message: 19/04/2006, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo