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 :

Une question sur la fonction header()


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut Une question sur la fonction header()
    Bonjour,

    Si header() est placée après du code, ça provoque une erreur, peut-on désactivé cela dans php.ini ?


    merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    ce n'est pas tellement après du <code>, mais plutôt après le premier octet envoyé au buffer de sortie, par la force des choses aux serveur web, et donc au client.

    Au niveau du php.ini, je ne pense pas que tu puisses utiliser une option particulière, cependant, dans ton code tu peux contrôler le moment où tu envoies le contenu du buffer au client.
    De telle sorte qu'avec cette méthode tu peux construire ton code comme bon te semble, avec un session_start en fin d'exécution si cela te plaît, sans provoquer la moindre erreur.

    Pour faire cela il faut utiliser les fonctions qui commencent par le préfixe ob_* pour OutputBuffering_*.
    Pour démarrer la mise en cache, car c'est le principe utilisé, il faut faire un appel à ob_start(); <http://fr2.php.net/ob_start> en tout début de script [strike]de préférence[/strike] nécessairement.
    En fin de script, tu pourras ajouter un ob_end_flush(); <http://fr2.php.net/manual/fr/function.ob-end-flush.php> cependant, php n'étant pas trop mal fait, cet appel est facultatif et sera plutôt utiliser pour véritablement contrôler le flux de données.
    Cet appel provoquera deux actions, l'arrêt de la mise en cache, et l'envoi au navigateur. L'arrêt de la mise en cache signifie que si tu fais un écho par la suite, tu ne pourras plus en contrôler la sortie.
    L'envoi des données au navigateur quand à lui signifie que tu à envoyés tes premiers octets, et que donc tu n'as plus droit de déclarer de nouvelles sessions.


    Précisons que ces fonctions sont géniales, et il est regrettable que ce mécanisme ne soit pas utiliser par défaut dans tous développements php.


    a plus

  3. #3
    Membre habitué Avatar de islyoung2
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Juin 2008
    Messages : 236
    Points : 177
    Points
    177
    Par défaut
    Dans le fichier php.ini tu met ON la variable output_buffering. mais je ne peut pas te garantir que sa ne te pose pas des problèmes latéraux , je ne l'ai jamais essayé.

  4. #4
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Utilise ob_start() et ob_end_flush() à la place et tu n'auras pas à modifier la config.
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par blueice Voir le message
    Utilise ob_start() et ob_end_flush() à la place et tu n'auras pas à modifier la config.
    Bonjour, je sais que tu proposes cela souvent, (je te lis réguliérement )

    Mais vraiment cette méthode me parait dangeureuse, ou bien il faut parfaitement maitriser sa génération de page HTML et que ce soit trés justifié !

    Pamis mes sites web, j'en ais un qui fait plus de 3000 pages dont un générateur de jeux d'échecs sur lequel tu peux jouer. Ors jamais je n'ais eu a recourir a du bufuring

    Mais aprés tout tu as sans doute trouvé des cas ou cette méthode est justifiée ?

    Bonne journée

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    Cela ne change rien que le site fasse 3000 pages ou 2 pages, si le besoin est de bufferiser, il faut bufferiser !

  7. #7
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Oui et je ne vois pas la dangerosité de la chose...
    Quel est le problème selon toi ?
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    Bonjour, je sais que tu proposes cela souvent, (je te lis réguliérement )

    Mais vraiment cette méthode me parait dangeureuse, ou bien il faut parfaitement maitriser sa génération de page HTML et que ce soit trés justifié !

    Pamis mes sites web, j'en ais un qui fait plus de 3000 pages dont un générateur de jeux d'échecs sur lequel tu peux jouer. Ors jamais je n'ais eu a recourir a du bufuring

    Mais aprés tout tu as sans doute trouvé des cas ou cette méthode est justifiée ?

    Bonne journée
    Ben par exemple dans le cadre de développent modulaire cela peut être extrêmement pratique.
    Différents évènements vont te permettra de manipuler le flux avant qu'il ne soit livré aux clients, et pouvoir manipuler ce buffer est indispensable dans ce cas.

    Un autre exemple serait par exemple de mettre en surbrillance tous les mots contenu dans la page. Une fois la page généré et contenu dans le buffer, tu l'attrapes, tu le modifies et tu le rends aux clients.

    non non vraiment ces fonctions sont irremplaçable!

  9. #9
    FoxLeRenard
    Invité(e)
    Par défaut
    Whaou !! j' ais parlé trop vite

    J' avoues ne jamais avoir employé cela mais tout vos témoignages prouvent que c' est parfois indispensable.

    Le coup de la surbrillance est trés convaincant !!

    En tout cas mille mercis a vous tous d' avoir défendu cette fonction

    blueice tu me demandes pourquoi je trouves ça dangeureux , ce serait plus honéte de dire plus compliqué pour moi, , bon allez promis je testerais ça pffff... décidément ici on vous pousse dans le dos pour aller plus loin, hier c' était le PDO et voila maintenant le bufuring

    Bon allez encore merci a vous de m'avoir répondu.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    Merci pour vos réponses et témoignages, ils sont très interressants.
    j'ai testé ce matin et ça fonctionne très bien et répond parfaitement au pb rencontré en plus je suis content de savoir que cela ne cause aucun pb de sécurité.

    ce qui est curieux c'est qu'en local le pb n'apparait pas mais seulement lorsque les fichiers sont hebergé (ovh)

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    On peut penser que cela provient de la configuration du niveau d'erreur de ton serveur local.
    Désolé, mais question administration je pense qu'OVH est bien meilleur que toi ; ) ou moi.

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

Discussions similaires

  1. Une question sur la fonction unlink
    Par abzal dans le forum Langage
    Réponses: 4
    Dernier message: 01/07/2008, 15h21
  2. une question sur le code ASP-Nuke
    Par ghita269 dans le forum ASP
    Réponses: 1
    Dernier message: 14/01/2006, 09h41
  3. Réponses: 2
    Dernier message: 21/12/2005, 09h39
  4. Une question sur le wap
    Par fabiofabio dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 19/11/2005, 16h24
  5. Encore une question sur malloc
    Par IG88 dans le forum C
    Réponses: 5
    Dernier message: 23/06/2004, 15h35

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