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 :

header already sent


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut header already sent
    B'jour!

    J'ai voulu implémenter, sur mon site, la fonction de mémorisation des identifiants des utilisateurs via un cookie.

    Tout va bien sauf... que j'ai un soucis de "header already sent".

    Mon erreur me renvoie sur du texte qui a déjà été envoyé, et qui a été envoyé à cause du menu qui, sur ma page d'index, est inclus avant l'affichage du contenu.

    Je sais bien qu'il ne faut pas qu'il y ai de texte avant que le header soit envoyé, mais que puis-je faire contre mon menu qui est inclus avant le contenu??
    Ca ne m'a pas posé de soucis avec mes sessions pourtant?

    C'est surtout pour ce dernier point que je suis perplexe ...

    Bien sur, si j'inclus mon contenu avant mon menu, ça fonctionne, mais tout le design est modifié...

    Avez-vous des pistes pour me mettre dans le droit chemin s'il vous plait? :p

    Merci d'avance

    David

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Par défaut
    Bonjour,

    Si tu n'as pas d'autres solutions que de gérer les cookies une fois que le contenu a été affiché (en règle générale cela signifie que tu devrais repenser l'architecture de ton application), le buffering pourra t'aider.

    Jettes un coup d'oeil aux fonctions ob_start et ob_end_flush.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    Ha super, merci de l'info. Au moins j'ai un recours

    Je veux bien concevoir que l'application n'est pas bien construite, je ne suis pas professionnel. Cependant je ne vois pas trop comment je pourrais faire autrement là...

    J'ai ma page d'index qui inclut ... tout. Le contenu est chargé en fonction d'un gros switch.
    Dans la mesure ou la page d'index inclut déjà un session_start(), puis la lecture du cookie, puis l'inclusion du header, puis celle du menu, puis celui du contenu, etc... je ne vois pas comment je pourrais faire pour créer mon cookie avant que quelque chose ne soit envoyé? Sauf si... je mets l'inclusion du menu avant celle du contenu. Est-ce finalement la seule solution "propre"?

    Est ce que l'utilisation de buffers peut nuire à la qualité de mon application? Est-ce que je peux rencontrer des problèmes plus tard en continuant le développement?
    Et si j'ai bien compris, cela permet de regrouper tous les header qui sont envoyés "à droite et à gauche", de les transmettre d'un coup, puis de s'occuper du contenu du site après?

    Merci de vos infos précieuses!

    D.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Par défaut
    La solution propre serait de stocker le contenu de la page à afficher après ton menu dans une variable "$contenu". Tu renseignes cette variable en début de script, et dans ton affichage (après avoir affiché ton menu) tu fais :
    echo $contenu;

    Sinon, j'ai utilisé plusieurs fois ob_start et ses amis sans avoir de problèmes ... je ne sais cependant pas la perte de performance que cela implique (à mon avis c'est surtout au niveau mémoire !)

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par divad Voir le message
    B'jour!
    J'ai voulu implémenter, sur mon site, la fonction de mémorisation des identifiants des utilisateurs via un cookie.
    Tout va bien sauf... que j'ai un soucis de "header already sent".
    Mon erreur me renvoie sur du texte qui a déjà été envoyé, et qui a été envoyé à cause du menu qui, sur ma page d'index, est inclus avant l'affichage du contenu.
    Je sais bien qu'il ne faut pas qu'il y ai de texte avant que le header soit envoyé, mais que puis-je faire contre mon menu qui est inclus avant le contenu??
    Ca ne m'a pas posé de soucis avec mes sessions pourtant?
    C'est surtout pour ce dernier point que je suis perplexe ...
    Bien sur, si j'inclus mon contenu avant mon menu, ça fonctionne, mais tout le design est modifié...
    Avez-vous des pistes pour me mettre dans le droit chemin s'il vous plait? :p
    Merci d'avance
    David

    Bonjour, j'arrives aprés la bagare

    Mais je crois a te lire qu'il est bon de te proposer un plan enfantin puisque une valeur de session ça coute rien ...

    l'Idée majeure, est que OUI la session s'ouvre etc ... avant tout HEADER
    Mais pas les changements de valeur

    Moi je fais un peut comme ça

    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
     
    <?PHP
    session_start();
    //=========== puis tout ce dont j'ais besoins ou risque d'avoir besoins
     
    if (!isset($_SESSION['truc1'])) {$_SESSION['truc1']="N";$truc1="N";}
         else {$truc1=$_SESSION['truc1'];}
     
    // ETC... ensuite aprés tout tes includes contrôles etc.. 
    // le header est bien open mais on peut faire
     
    if ($age_capitaine>12)
        {
    $_SESSION['truc1']=$age_capitaine;
    $truc1=$age_capitaine;
         }
    voila au cas ou ça t'aides

  6. #6
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Par défaut
    De plus il faut tout le temps envoyer le header avec tout autre code html.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    <p>Hello</p>
    ...
    <?php session_start(); ?>
    ...
    A remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php session_start(); ?>
    ...
    <p>Hello</p>
    ...
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    merci à tous de vos réponses.

    Je suis en train de tester là. La solution de real34 me parrait facile à mettre en place, mais je ne vois pas trop comment faire pour mettre le contenu dans une variable?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = include("switch.php");
    ne fonctionne pas.

    Parce que si je fais un un echo de $contenu, j'ai 1 qui apparait.

    Les connaisseurs doivent bien se moquer de ce que j'ai écrit, mais je ne vois pas trop comment faire
    il y a t il une histoire de concaténation à faire ou... je ne sais pas?

    Merci de votre aide!

    David

  8. #8
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    Quand tu fais le code est diffusé à cet endroit, tu ne peux pas le stocker de cette manière dans une variable.

    D'ailleurs le 1 que tu as dans $contenu ça veut dire que l'include c'est bien passé !!

    Si tu veux vraiment chopper le contenu de ton include il faut faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ob_start();
    include("switch.php");
    $contenu = ob_get_contents();
    ob_end_clean();
    Et la $contenu contiendra bien ton contenu

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut
    Quand on fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = include("switch.php");
    il faut que dans switch.php il y ait un return.
    Exemple de switch.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $mon_code_html='<p>Je suis du html dans une variable php</p>';
    ....
    ....
    ....
    return  $mon_code_html;
    ce qui donne au final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = '<p>Je suis du html dans une variable php</p>';
    Sinon le include retourne forcement "true" (d'ou le 1 si le fichier est disponible) dans la variable puis qu'il a réussi a inclure le fichier dans la variable et non le traitement du fichier inclus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] problème headers already sent
    Par charlene44 dans le forum Langage
    Réponses: 12
    Dernier message: 14/06/2006, 14h55
  2. Réponses: 11
    Dernier message: 11/05/2006, 12h16
  3. [Cookies] cookies et 'headers already sent'
    Par wellser dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2006, 14h37
  4. [Cookies] Warning : headers already sent
    Par arti2004 dans le forum Langage
    Réponses: 8
    Dernier message: 04/04/2006, 17h31
  5. [JpGraph] Header already sent
    Par grunk dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/02/2006, 17h54

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