Pourquoi certains scripts omettent-ils la balise de fermeture PHP, '?>'? [dupliquer]

cette question a déjà une réponse ici:

dans certains scripts, je vois qu'ils omettent d'écrire une étiquette de fermeture ?> pour le script. Pourquoi est-ce et devrais-je le faire aussi?

(je suis sûr qu'ils ont pas oublié.)

177
demandé sur Peter Mortensen 2010-07-10 17:36:23

7 réponses

bien, omettre la balise de fermeture n'est qu'une solution pour éviter les blancs et autres caractères à la fin du fichier. Par exemple, n'importe quel char qui est accidentellement ajouté derrière la balise de fermeture déclencherait une erreur en essayant de modifier les informations d'en-tête plus tard.

la suppression de l'étiquette de fermeture est une sorte de "bonne pratique" faisant référence à de nombreuses lignes directrices de codage.

170
répondu dhh 2010-07-10 13:41:14

à Partir de PHP: Instruction de Séparation

la balise de fermeture D'un bloc PHP à la fin d'un fichier est optionnelle, et dans certains cas l'omettre est utile en utilisant include() ou require() , de sorte que les espaces blancs indésirables ne se produiront pas à la fin des fichiers, et vous serez toujours en mesure d'ajouter des en-têtes à la réponse plus tard. Il est également pratique si vous utilisez la mémoire tampon de sortie, et ne voudrait pas voir ajouté des espaces non désirés à la fin des parties générées par les fichiers inclus.

79
répondu Metalshark 2014-11-27 13:12:57

php.net sur les étiquettes PHP :

si un fichier est du pur code PHP, il est préférable d'omettre la fermeture PHP tag à la fin du fichier. Cela empêche les espaces accidentels ou nouveaux les lignes étant ajoutées après la balise de fermeture PHP, ce qui peut causer des effets parce que PHP va commencer à mettre en mémoire tampon de sortie quand il n'y a pas l'intention du programmeur pour envoyer de sortie à ce point dans le script.

31
répondu brismuth 2015-11-17 18:10:42

ils le font pour éviter le risque d'avoir des espaces blancs après l'étiquette de fermeture qui peut arrêter les en-têtes à travailler.

ceci est, bien sûr, vrai pour les fichiers PHP seulement.

14
répondu Soufiane Hassou 2010-07-10 13:40:41

Codeigniter Framework suggère d'omettre les étiquettes de fermeture pour

"... peut causer des sorties indésirables, des erreurs PHP ou des pages vierges".

vous pouvez le lire ici .

7
répondu beawolf 2018-05-15 13:16:57

Moderne versions de PHP définir le output_buffering drapeau php.ini . Si la mise en mémoire tampon de sortie est activée, vous pouvez configurer les en-têtes HTTP et les cookies après la sortie HTML, parce que le code retourné n'est pas envoyé immédiatement au navigateur.

les exemples sont-ils toujours valables dans ce contexte?

5
répondu danidacar 2014-11-27 13:13:54
  1. il montre l'espace blanc indésirable / page blanche. Les en-têtes HTTP ne fonctionnent pas pour ces espaces non désirés.
  2. Plus JavaScript injection est faite à la fin du fichier. Il affichera un message d'erreur et cassera le code, le code JavaScript injecté ne sera pas exécuté.
0
répondu Nafis Ahmad 2014-07-19 15:39:58