Ne fermez pas vos tags à la fin des fichiers PHP

Pendant que NikO nous présente ses conventions de codage, parlons d’une autre bonne pratique concernant les tags de délimitation de blocs en PHP.

Le langage PHP n’impose pas de fermer un bloc de code avec ?> si se bloc se trouve tout à la fin du fichier, et pour cause, mieux vaut l’omettre dans les fichiers susceptibles d’êtres inclus par d’autres !

Prenons ce bout de code :
date.php

<?php
$year = date('Y');
?>
 

Notez bien la ligne blanche après le tag de fermeture. Et maintenant :

redirige.php

<?php
include('date.php');
if($year < 2009) {
  header('Location: //dunglas.fr');
  exit;
}
?>
Si notre serveur est à l'heure, nous ne sommes plus en 2008 et vous pouvez voir cette page !

Catastrophe ! C’est la très pénible erreur Warning: Cannot modify header information – headers already sent by… qui s’affiche.

PHP a envoyé la ligne blanche (\n) de notre fichier date.php au navigateur, avec les en-têtes HTTP qui vont bien. Impossible d’ajouter de nouveaux en-têtes ni de rediriger l’utilisateur une fois que le début du corps de la requête a été envoyé.

Il faut savoir que certains éditeurs de texte ajoutent automatiquement un retour charriot à la fin des fichier lors de leur création ou de leur enregistrement.

Otez les ?> à la fin de vos classes, bibiliothèques et tout autres fichiers qui seront inclus par d’autres. Même si votre éditeur n’a pas se malheureux comportement, ce n’est peut-être pas le cas de ceux de vos collègues, des contributeurs du projet sur lequel vous travaillez… ou que vous utilisez.

PHP et ses tags

Il existe plusieurs manières de délimiter les blocs de code en PHP :

  • <?php et ?> (les tags standard)
  • <? et ?> (leur version courte)
  • <?= et ?> (équivalent de <?php echo et ?>)
  • <% et %> (style ASP)
  • <script language="php"> et </script> (style HTML)

Parmi tous ces tags, seul le couple <?php et ?> est générique et recomandé. Les tags de style HTML sont dépréciés et peu communs tandis que que les autres sont dépendants de la configuration de PHP et peuvent ne pas être disponibles.  Le code PHP contenu dans des blocs délimités par des tags non standards risque tout simplement de ne pas être exécuté et d’être affiché à l’écran sur certains serveurs !

Afin d’éviter tout problème leur de la distribution ou du déploiement de vos scripts, bannissez l’utilisation des formes de tags différentes de <?php et ?>.

Plus de bonnes pratiques ? PHP Talks !