2010-09-21 8 views
2

Jusqu'à récemment, mon LAMP fonctionnait comme je l'avais prévu et en utilisant l'en-tête de PHP() pour rediriger se comportait selon la documentation. De nulle part, cela a changé. Le problème peut être vu ici:L'en-tête PHP() est envoyé après ouput

<html> 
<head> 
<title> BLAH </title> 
</head> 

<body> 
<p> TEXT </p> 
<?php 
echo "BLAH BLAH BLAH"; 
sleep(10); 
header("Location: http://example.com"); 
?> 
</body> 
</html> 

Pour autant que je sache, la redirection ne devrait pas se produire - mais il le fait. J'ai essayé de faire écho, en ajoutant du HTML, en attendant d'éviter les conditions de course possibles, mais en vain. Quand j'accède à cette page, aucune sortie n'est montrée, et après 10 secondes je suis redirigé.

Je n'ai pas eu beaucoup de chance de faire des recherches sur le Web car la plupart des gens ont exactement le problème inverse, et je n'ai rien trouvé d'utile dans les journaux du serveur. Je n'ai fait aucun changement de configuration ou mise à jour de paquet. Les gens que j'ai demandé étaient également perplexes. Je cours PHP 5 et Apache 2 sur une machine virtuelle CentOS.

P.S .: Ma première question ici, mais la lecture de ce site m'a aidé plusieurs fois et je l'adore :).

+6

ressemble à la mise en mémoire tampon de sortie est activée. check your php.ini –

+0

Oui, ce que Raoul a dit –

+0

Essayez un 'flush()' au lieu de 'sleep (10)'. Notez qu'Internet Explorer démarre le rendu après avoir reçu 1024 octets. – bouke

Répondre

1

Merci Raoul, c'était ça.

J'ai totalement oublié que j'avais travaillé sur une autre machine Debian avant la machine virtuelle. Et, bien sûr, son php.ini par défaut était différent de celui des CentOS. Debian avait output_buffering = Off tandis que CentOS était défini sur 4096. En outre, les erreurs PHP étaient désactivées sur la machine virtuelle. Merci encore, les gars, il est très rassurant de savoir que ce n'est pas un langage obscur bizarre ou un défaut de conception insaisissable. À votre santé.

Questions connexes