Duplicate possible:
En-têtes déjà envoyés par PHP
Donc, j'ai cette sortie sur ma page .. ne comprenant pas pourquoi je l'ai faire apparaître. Je suis nouveau sur php cependant, alors c'est peut-être quelque chose de facile à réparer
-J'ai un fichier header.php, qui contient toutes les informations importantes, ainsi que la bannière de la page. Ce header.php est inclus sur chaque page.
-Je l'ai vérifier la valeur de session pour m'assurer que l'utilisateur est autorisé à être à une certaine page. Si l'utilisateur n'est pas autorisé à y être, je le renvoie à la page de connexion
C'est là que l'erreur se produit cependant. C'est ce que j'ai
include_once ("header.php");
if ($_SESSION['uid']!='programmer')
{
header('Location: index.php');
echo 'you cannot be here';
exit;
}
L'index qu'il redirige a également l'en-tête. Alors, est-ce que ces multiples références d’en-tête me donnent cette erreur? Je ne vois pas d'autre moyen de faire ça, et ça me rend dingue!
Vous ne pouvez pas utiliser header()
une fois que le texte a été envoyé au navigateur. Étant donné que votre header.php
contient normalement du HTML, vous ne pouvez pas utiliser header()
.
Vous pouvez résoudre ce problème de plusieurs manières:
header.php
définit la session uid et d'autres éléments essentiels).ob_start()
en haut du script pour mettre la sortie en mémoire tampon.Si le fichier header.php "a la bannière", il est présumé que du contenu HTML est en sortie sur la page.
Vous ne pouvez pas émettre d'en-tête HTTP après avoir généré du contenu.
Vous ne pouvez envoyer aucun en-tête après avoir envoyé un autre contenu. Un coupable très probable est un espace supplémentaire après votre balise ?>
de clôture dans votre header.php. Il est généralement recommandé d’omettre la balise de fermeture dans tous les fichiers php uniquement scriptés.
Votre erreur devrait vous dire exactement quelle ligne (et quel fichier) envoie la sortie.
Bon, alors c'est réglé ...... je ne sais pas comment, quelqu'un peut peut-être expliquer pourquoi cela fonctionne tout d'un coup.
Ceci est mon code:
include_once ("header.php");
if ($_SESSION['uid']!='programmer') {
if(isset($_SESSION['uid'])) {
echo $_SESSION['uid'];
}
header('Location: index.php');
exit;
}
Laissez-moi répéter, tout fonctionne maintenant! PHP ... pourquoi travaillez-vous maintenant?
J'ai rencontré une erreur similaire (apparemment aussi de nulle part) en ce qui concerne une fonction de redirection qui était comme suit:
function Redirect($url) {
flush(); // Flush the buffer
header("Location: $url"); // Rewrite the header
die;
}
Apparemment, vous devez également ajouter ob_flush();
pour vider complètement l’ancien en-tête. La nouvelle fonction est:
function Redirect($url) {
flush(); // Flush the buffer
ob_flush();
header("Location: $url"); // Rewrite the header
die;
}
J'espère que cela aide quelqu'un d'autre à avoir ce problème!