logo Homepage
+  NewbieContest
|-+  Programmation» Langages Web» Redirection 302 PHP
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Redirection 302 PHP  (Lu 4740 fois)
the lsd
Administrateur

Profil challenge

Classement : 190/54277

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3096

poulping for fun & profit


Voir le profil WWW
« le: 10 Janvier 2017 à 10:10:47 »

Hello all,

J'étais tranquillement en train de vous pondre un chall hier, et je suis tombé sur un comportement étrange de php. Ci dessous, le code :

Code: (php)
<?php
// page : http://localhost/header.php
echo ('test');
header('Location: http://localhost/header.php?itworks');
?>


Théoriquement, ce code ne fonctionne pas, php refusant d'envoyer des en-têtes http à partir du moment où le buffer de sortie n'est pas vide. Ceeeeeependant, sur mon localhost, avec PHP7, ce code fonctionne sans problème, je suis bien redirigé vers header.php?itworks.

Quelqu'un aurait une explication sur le pourquoi du comment ?

Enjoy

The lsd
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
lovenunu
Beta testeur

Profil challenge

Classement : 21/54277

Membre Complet
*
Hors ligne Hors ligne
Messages: 171


Voir le profil
« #1 le: 10 Janvier 2017 à 13:54:36 »

hello the_lsd.
Je suppose que maintenant PHP n'evoies pas le buffer de sortie tout de suite. (et ça doit être lié à cette rfc: https://wiki.php.net/rfc/continue_ob)

Si on le vide à la main dans ton exemple, ça pète bien:
Code:
<?php
echo ('test');
ob_flush();
header('Location: http://localhost/header.php?itworks');

« Dernière édition: 10 Janvier 2017 à 14:18:52 par lovenunu » Journalisée

Tant pis je remplacerai ma nuit par une sieste.
the lsd
Administrateur

Profil challenge

Classement : 190/54277

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3096

poulping for fun & profit


Voir le profil WWW
« #2 le: 10 Janvier 2017 à 14:55:00 »

moké, j'étais bien tombé sur des mecs qui parlaient d'ob_flush, mais j'étais pas tombé sur la doc

Du coup, de ce que je comprend de la doc, toute la sortie est bufferisée à part et donc rien n'est envoyé immédiatement, ce qui explique que le header() fonctionne, puisque le client n'a rien reçu.

Nickel, j'ai ma réponse
Thanks

Enjoy

The lsd
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
Pages: [1]
  Imprimer  
 
Aller à: