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é.)
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.
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()
ourequire()
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.
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.
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.
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 .
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?