Page 1 sur 1

Redirection malgré message d'erreur

Posté : 07 sept. 2007, 18:06
par Ryle
Hello !

Je suis en train de m'arracher les cheveux.. j'ai une erreur sur une page, mais malgré l'affichage d'un message à l'écran (et donc l'envoi d'info au navigateur), le header est exécuté et je me retrouve redirigé sans voir qu'il y a eu une erreur... pas pratique pour débuguer.

Configuration du php.ini (php 5.2.0) :

Code : Tout sélectionner

error_reporting = E_ALL & ~E_NOTICE display_errors = On
Code pourtant basique :
<?php
  echo error_reporting(E_ALL);
  echo 'CA NE PEUT PAS MARCHER !';
  header('Location:index.php'); // je suis pourtant bien redirigé !
?>
J'ai essayé avec ini_set('error_reporting', E_ALL), même résultat.
Idem pour error_reporting(E_ALL | E_STRICT) ou si je met le E_ALL directement dans .ini
...

Je dois louper quelque chose, mais ne vois pas quoi... besoin de vos lumières avant de plus avoir un poil sur le caillou ! :(

Posté : 07 sept. 2007, 18:16
par iclo
Idée peut-être stupide, mais si le buffer n'est pas encore rempli, rien n'est envoyé au navigateur, et il est encore possible d'envoyer un header, sans qu'il n'envoit le message classiquer "Header already sent..."
Si tu fais un echo très long avant le header (genre un bon gros code html), il ne plante pas ?

Posté : 07 sept. 2007, 18:25
par Ryle
Effectivement, si je colle 4100 caractères avant, le buffer est plein et le header n'est pas exécuté... mais jusqu'à présent, le moindre espace ou retour à la ligne suffisait à bloquer le header, je comprend pas pourquoi il me faut maintenant remplir le buffer.. ou alors il y a un paramétrage du .ini qu'à changé ?

je vais quand même pas envoyer 4000 caractères de code html en commentaire pour être sur d'avoir mes messages d'erreur quand j'ai une erreur... :?

Re: Redirection malgré message d'erreur

Posté : 07 sept. 2007, 18:28
par Calimero
Salut camarade piaf,

regarde dans ton php.ini du côté des valeurs :

Code : Tout sélectionner

output_buffering = Off ;output_handler = zlib.output_compression = Off ;zlib.output_handler =
Je t'ai copié ici les valeurs qu'elles ont chez moi. Si elles sont différentes chez toi, ça peut expliquer que tu puisses sans problème envoyer des headers après le début de la sortie, vu que ça active le buffer de sortie.

Posté : 07 sept. 2007, 18:31
par Jules Petibidon
hello,

oui, il y a une section output buffering dans le php.ini. Tu peux le vérifier rapidement avec phpinfo :)

Groumpf ! grillé... pfff !

Posté : 07 sept. 2007, 18:31
par Hubert Roksor
Vous parlez de quel buffer exactement ? L'output buffer de PHP ? Le php.ini par défaut indique un output buffer de 4K mais je crois me rappeler que la ligne est désactivée, dans tous les cas, vérifie ton phpinfo()

Si vous parlez d'un autre buffer, merci d'expliciter :)

Edit: je sais qu'il y a littéralement une dizaine de buffers entre un echo d'un serveur et la réception du client, mais seul l'output buffer de PHP permet de réordonner données et en-têtes, à ma connaissance.

Posté : 07 sept. 2007, 18:44
par Ryle
Bien vu ! :)

J'ai poursuivis la piste donné par iclo et suis arrivé à ce que vous décrivez. Il y avait effectivement un "output_buffering = 4096" dans le .ini - ce qui ne m'avait absolument pas choqué vu que c'est une valeur classique pour un buffer, ce qui n'est pas forcément le cas avec 'Off' ;) - et j'ignorais que cela pouvait influer sur le comportement des headers :)

Un grand MERCI à tous, vous me sauvez ce qui me reste de cheveux ;)

Nota : le zlib.output_compression était bien à Off quant à lui.. allez savoir pourquoi le buffer était spécifié.. y en a j'vous jure, y font n'importe quoi de leur .ini :)