web-dev-qa-db-fra.com

PHP header-redirect location ne fonctionne pas - pourquoi?

Voici mon dossier. Je veux le rediriger, mais rien ne se passe. Pour vérifier ce qui se passe, j'ai ajouté un écho avant la partie en-tête.

Il ne génère ni erreur ni redirection vers index.php. Qu'est-ce qui ne va pas? J'ai activé/désactivé la mise en mémoire tampon de la sortie, mais rien ne la fait rediriger. Que puis-je faire?

<?
error_reporting(E_ALL);
echo 'This is an error';

header("Location: login.php");
die();
?>

Merci

24
Industrial

Je me suis rappelé que j'avais installé xDebug sur l'environnement de test réel et après l'avoir googlé, j'ai trouvé ce site: http://bugs.xdebug.org/view.php?id=532

Je vais donc télécharger la dernière version de xDebug et changer le php.ini en conséquence pour le nouveau fichier et tout fonctionne comme un charme. Des en-têtes sont envoyés - la redécision est effectuée et des erreurs sont affichées.

Merci à tous pour votre aide!

1
Industrial

De documentation PHP :

header() doit être appelée avant d'envoyer une sortie réelle, soit par des balises HTML normales, des lignes vides dans un fichier, soit à partir de PHP.

Et dans votre cas, vous utilisez echo avant header()

44
Soufiane Hassou

Avez-vous activé les balises courtes? essayez-le avec la balise longue <?php:

<?php
error_reporting(E_ALL);
header("Location: login.php");
die();
?>
1
jah

Les erreurs d'affichage sont-elles activées?
@ Gumbo - C'est sûr!

eh bien, ce n'est pas le cas. car

Pour vérifier ce qui se passe, j'ai ajouté un écho avant la partie en-tête.

si vous aviez display_errors activé, cela afficherait une erreur, au moins lorsque vous turned output buffering on.

Donc, tout d'abord, assurez-vous que vous pouvez voir les messages d'erreur.
imprimez simplement une variable non définie,

error_reporting(E_ALL);
echo $undef9306;

Je suis sûr que vous ne le verrez pas. Vous devez donc activer l'affichage des erreurs

Ensuite, côté serveur, vous pouvez utiliser la fonction headers_sent() pour voir si des en-têtes ont été envoyés. Côté client, utilisez le renifleur HTTP pour voir si quelque chose a été envoyé

Et vérifiez votre fichier pour la nomenclature.

0
Your Common Sense