web-dev-qa-db-fra.com

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

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

(Je suis sûr qu'ils ne l'ont pas oublié.)

190
Naughty.Coder

Eh bien, omettre la balise de fermeture n'est qu'une solution pour éviter les espaces et autres caractères en fin de fichier. Par exemple, tout caractère ajouté accidentellement derrière la balise de fermeture déclencherait une erreur lors de la tentative de modification ultérieure des informations d'en-tête.

Le retrait de la balise de fermeture est une sorte de "bonne pratique" faisant référence à de nombreuses directives de codage.

175
dhh

De PHP: Instruction Separation

La balise de fermeture d'un bloc PHP à la fin d'un fichier est facultative et, dans certains cas, son omission est utile lors de l'utilisation de include() ou require() Ainsi, les espaces non désirés ne se produiront pas à la fin des fichiers et vous pourrez toujours ajouter des en-têtes à la réponse ultérieurement. les pièces générées par les fichiers inclus.

84
Metalshark

php.net sur PHP tags :

Si un fichier est du code pur PHP, il est préférable d’omettre la balise de fermeture PHP à la fin du fichier. Cela évite les espaces ou les nouvelles lignes ajouté après la balise de fermeture PHP, ce qui peut entraîner des effets indésirables, car PHP va démarrer la mise en mémoire tampon de la sortie quand le programmeur n'a pas l'intention d'envoyer une sortie à cette sortie) point dans le script.

33
brismuth

Ils le font pour ne pas risquer d'avoir des espaces après la balise de fermeture, ce qui pourrait empêcher les en-têtes de fonctionner.

Ceci est, bien sûr, vrai pour les fichiers uniquement PHP.

15
Soufiane Hassou

CodeIgniter Framework suggère d'omettre les balises de fermeture pour

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

Vous pouvez le lire ici .

7
beawolf

Les versions modernes de PHP définissent le output_buffering flag dans php.ini. Si la mise en mémoire tampon de sortie est activée, vous pouvez définir des en-têtes HTTP et des cookies après la sortie de HTML, car le code renvoyé n'est pas envoyé au navigateur immédiatement.

Les exemples sont-ils toujours valables dans ce contexte?

5
danidacar
  1. Il montre un espace blanc indésirable/page blanche. Les en-têtes HTTP ne fonctionnent pas pour ces espaces non désirés.
  2. Most L'injection de JavaScript est effectuée à la fin du fichier. Il affichera un message d'erreur et cassera le code, le code JavaScript injecté ne sera pas exécuté.
0
Nafis Ahmad