10
votes

PHP: Comment savoir si la sortie a déjà commencé?

J'utilise le même script PHP pour Y compris et pour AJAX Chargement. Il s'agit de certains éléments de catalogue aléatoire qui sont chargés avec la page et peuvent être chargés avec Ajax. J'ai besoin d'utiliser en-tête () fonctionner uniquement s'il est chargé via AJAX.

Lorsque j'utilise la fonction d'en-tête et que la sortie a déjà commencé, je reçois un avertissement PHP à ce sujet. Comment PHP sait-il que la sortie a déjà commencé? Quelle est la meilleure façon de déterminer cela et de ne pas appeler la fonction d'en-tête?

merci.


0 commentaires

6 Réponses :


21
votes

http://php.net/manual/fr/function.Headers- SENT.PHP

// If no headers are sent, send one
if (!headers_sent()) {
    header('...');
    exit;
}


3 commentaires

Merci beaucoup! Juste ce dont j'avais besoin. Et au fait pourquoi sortir?


L'utilisation de la sortie est directement du manuel PHP référencé pour un appel «en-tête: emplacement» qui l'exige. Dans votre cas, vous ne devriez pas l'ajouter, ou vous allez casser la sortie.


Ouais désolé, je l'ai copié directement du manuel et j'ai oublié de le supprimer :)



3
votes

Une option est d'appeler ob_start () au début, qui Tampons toute votre sortie . De cette façon, vous pouvez envoyer des en-têtes à tout moment.


0 commentaires

5
votes

Il y a un intégré facile pour cela: xxx

pas beaucoup plus à ajouter :)


0 commentaires

2
votes

Headers_sent () renvoie true si vous ne pouvez pas envoyer d'en-têtes supplémentaires.


0 commentaires

0
votes

Si vous envoyez quelque chose au client, la sortie a commencé.

Par exemple, même une seule étiquette HTML, elle est déjà sortie.

Vous pouvez structurer votre application afin que cela ne se produise pas, Ou vous pouvez activer la mémoire tampon de sortie:

http://php.net/manual/fr/function.Ob- start.php


0 commentaires

0
votes

Retirez simplement la ligne vide avant que le code ne commence et ajoutez de la sortie; Après la fin de votre sortie.


1 commentaires

Il n'y a pas de code dans la question - comment savez-vous ce qui est là et que n'est pas? La plupart des réponses actuelles suggèrent d'utiliser headers_sent () - y a-t-il une raison pour laquelle votre suggestion pourrait être meilleure?