PHP redirection sans header() ou méta
Je suis en train de concevoir une page qui ne contient certaines actions de base de données, puis redirige l'utilisateur vers la page, ils sont venus. Le problème est que j'utilise un require()
fonction pour obtenir la connexion à la base de données, de sorte que les en-têtes sont déjà envoyés. Une balise meta est hors de question, car je veux qu'il ressemble à tous les processus sont fait à partir de la page de provenance. Des conseils à donner? Est-il une manière que je peux utiliser le require()
et la header()
ou dois-je déposer? Est-il une alternative à header()
?
Comment fonctionne une connexion à une base de données rend les en-têtes seront-ils envoyés?
OriginalL'auteur Yoshiyahu | 2011-01-22
Vous devez vous connecter pour publier un commentaire.
Comme Artefacto a noté, la connexion à la base de données ne devrait pas nécessiter de sortie. Résoudre ce que vous êtes, y compris (par ex. database_connect.php) pas de sortie. Voir cette recherche sur les "headers already sent" question, qui peut vous aider à trouver des "caché" de sortie.
OriginalL'auteur Matthew Flaschen
Si vous ne pouvez pas envoyer le
header()
avant certains contenus est envoyé, l'utilisation le tampon de sortie en plaçant unob_start();
au début de votre script avant tout est envoyé. De cette façon, tout le contenu sera stocké dans un buffer, et ne seront pas envoyés jusqu'à la fin du script ou lorsque vous envoyez manuellement le contenu du tampon.Sur une autre note, il suffit de
require
ing un autre fichier ne serait pas générer les en-têtes/contenu, à moins que le script inclus les envoie. Les communes les plus "caché" de cause de ce est passée inaperçue d'espace avant ou après le<?php ?>
balises.OriginalL'auteur Wiseguy
Dans ce cas, toutes les sorties sont mises en mémoire tampon. Cela signifie, les en-têtes sont traitées en premier, puis la sortie en vient à jouer...
OriginalL'auteur Andreyco
Vous ne pouvez pas envoyer les en-têtes après un peu de contenu a déjà été envoyé. Déplacer le
header()
appel à l'avant de larequire()
appel.OriginalL'auteur Fahad Sadah
Vous ne pouvez pas envoyer des en-têtes d'après toutes les données ont été envoyées au client.
Cependant, l'utilisation de
require
ne pas dire que la sortie de quelque chose. Si je comprends bien votre droit, vous pouvez inclure vos fichiers de base de données, exécutez vos requêtes et rediriger l'utilisateur. C'est parfaitement valide.Si vous avez besoin d'envoyer de sortie (pourquoi si vous avez besoin de faire une redirection?) une autre option est d'utiliser le tampon de sortie. En utilisant le tampon de sortie, vous n'êtes pas d'envoyer les données au navigateur lorsque vous l'écho, mais de les stocker dans une mémoire tampon. Les données seront envoyées lorsque vous appelez ob_end_flush ou que vous arrivez à la fin du script. Après ob_end_flush, vous ne serez pas en mesure d'envoyer de nouveaux en-têtes. Vous commencez à le tampon de sortie avec ob_start.
require()
semble envoyer les en-têtes automatiquement. Je n'ai pas de texte de sortie.OriginalL'auteur alexn
Il est possible d'utiliser
header()
avecrequire()
lorsque j'utilise le tampon de sortie. Cela signifie que l'ensemble du script est mis en mémoire tampon et d'envoyer d'abord lorsque le script est venu à une fin.Je l'ai fait en faisant cela,
OriginalL'auteur Cudos