Fermer la balise (?>) Sur les fichiers PHP?

17

Certaines personnes jurent en fermant leurs fichiers PHP avec ?>, certains disent qu'il est plus optimisé pour le laisser de côté.

Je sais qu'il n'est pas essentiel de l'avoir là-bas, je me demande simplement quels sont les avantages et les inconvénients de faire cela, et quelles sont les meilleures pratiques.

Steve Robbins
la source
Certaines personnes supposent que l'expression "plus optimisé" signifiait "fonctionnera plus rapidement". L'orateur (dont la première langue n'est peut-être pas l'anglais) aurait pu vouloir quelque chose de plus «plus optimal» ou «une meilleure pratique».
Scott C Wilson

Réponses:

27

Ce n'est pas tant une question de performances - l'analyse de la fin ?>est triviale et ne fera aucune différence notable, sauf si vous incluez un million de fichiers par seconde.

IIRC, php.net recommande de NE PAS ajouter le ?>, et les raisons vont quelque chose comme ceci:

  • c'est inutile
  • il est facile d'ajouter accidentellement des espaces blancs significatifs après le ?>, qui seront envoyés au client, ce qui à son tour peut conduire à des erreurs obscures "en-têtes déjà envoyés" (cela se produit lorsqu'un fichier inclus contient des espaces blancs, et vous essayez de définir un en-tête après y compris ce fichier)
tdammers
la source
Sur la base des réponses ici (en particulier en ce qui concerne les espaces vides indésirables provoquant des erreurs "en-têtes déjà envoyés"), j'ai changé mon habitude d'inclure religieusement un?> À la fin d'un fichier PHP. J'ai remarqué que lorsque j'ai créé un nouveau fichier avec PHPStorm, le modèle vient d'insérer un <? Php sans la balise de fermeture?>, Et j'ai pensé que c'était juste un codage bâclé. Maintenant je sais mieux.
tcrosley
Cette raison précise - «en-têtes déjà envoyés» - était la raison pour laquelle cela a été rigoureusement interdit par mon employeur (un grand portail web). C'est une chose lorsque vous l'oubliez à la fin d'un fichier que vous venez d'écrire. C'est une autre si vous modifiez une entrée de bibliothèque qui comprend 3 profonds, votre éditeur de texte insère les espaces sans que vous le sachiez, et tout à coup, un portail dirigé par des gars à 2 bâtiments de là cesse de fonctionner. L'arbre des inclusions est souvent composé de plus de 100 fichiers, trouver le bogue devient un exercice de patience. Attendez-vous à une visite de "profonde gratitude" des semaines plus tard lorsque le bogue sera détecté et retrouvé.
SF.
1
PHP envoyant un espace blanc après la balise de fermeture est un autre exemple de mauvaises décisions de langage.
user949300
12

Non, ils ont tort.

?>est facultatif en PHP à la fin d'un fichier. Et vous trouverez une bonne raison à cela. Le plus important est qu'un espace vide à la fin d'un fichier ne vous empêchera pas d'envoyer des en-têtes. C'est un bug difficile à repérer car vous pouvez le trouver dans n'importe quel fichier n'importe où.

La façon habituelle de faire est de mettre une balise de fermeture lorsque PHP est mélangé avec HTML et de ne pas le mettre pour des fichiers PHP purs. C'est même une norme de codage du framework ZEND et bien d'autres.

Optimisé signifie que le code s'exécute plus rapidement. C'est facile de leur prouver le contraire. Profilez le code et découvrez qu'ils vous disent des conneries.

deadalnix
la source
4

Je pense qu'il est recommandé aux débutants d'éviter de l'ajouter afin qu'ils ne provoquent pas l'envoi accidentel de caractères de nouvelle ligne supplémentaires. Puisqu'il n'est pas essentiel de l'avoir comme vous l'avez mentionné, je pense que le raisonnement général est qu'il vaut mieux le laisser pour éviter les erreurs.

Je ne pense pas qu'il y ait une quelconque "optimisation" en cause.

Je vous pointerais ici: /programming/4410704/php-closing-tag et ici: /programming/3219383/why-do-some-scripts-omit-the -closing-php-tag

manojlds
la source
1
débutants ou non ... il n'y a tout simplement aucune raison (sauf pour les cas de TOC) de les avoir
Mchl
@Mchl Je voudrais souligner que les raisons de l'abandon sont assez triviales et qu'en fin de compte, cela se résume à la préférence du programmeur et ce n'est pas vraiment un problème de TOC ...
Kenneth
1
Je grince des dents à chaque fois que je vois ?>dans des fichiers contenant du PHP pur.
Aviateur caféiné
@Kenneth: S'ils sont triviaux - je ne les vois pas. La partie OCD était conçue comme une blague.
Mchl