Pourquoi il est déconseillé d'utiliser les balises courtes (short tags) ?

Rechercher

Pourquoi il est déconseillé d'utiliser les balises courtes...

  • Par Emacs
  • 18 commentaires
  • 23210 lectures
  • RSS -  Atom

Comme vous le savez tous, tout script PHP doit être entouré de balises spécifiques. Ces dernières permettent à l'interprêteur de savoir à quel endroit dans le fichier se trouve du code PHP à exécuter. Sur Apprendre-PHP.com, tous les scripts présentés utilisent les balises <?php et ?>; et ce n'est pas du tout par hasard...

Les différentes balises de délimitation de code PHP

Il existe en effet plusieurs syntaxes de balises PHP. Les voici détaillées dans la liste suivante :

  • <?php et ?> (tags formels du langage)
  • <? et ?> (tags courts très employés par les webmasters débutants)
  • <?= et ?> (très rarement utilisés)
  • <% et %> (tag issus du langage ASP - rarement utilisés)
  • <script language="php"> et </script?> (très rarement utilisés)

Pourquoi préférer <?php et ?> ?

Tout simplement parceque les tags <?php et ?> assurent une portabilité totale sur tous les serveurs et toutes les versions de PHP. Ce sont les tags par défaut du langage PHP.

En revanche, les « short-tags » pourraient empêcher l'exécution de vos scripts pour les deux raisons suivantes :

  • Le serveur qui héberge vos pages php désactive l'utilisation de ces balises par la directive short_open_tags du php.ini placée à la valeur off.
  • Il y'a une confusion avec la balise d'ouverture d'un fichier XML.

En effet, un fichier XML débute par la syntaxe suivante :

Prologue d'un fichier XML
<?xml version="1.0" encoding="utf-8" standalone="yes"?>

On remarque la présence du short tag <? au tout début du code et ?> à la fin. A la lecture du fichier, l'interprêteur PHP tentera d'exécuter cette ligne (pensant que c'est du PHP) et renverra une erreur d'analyse similaire à celle ci-dessous :

Erreur de syntaxe : conflit entre l'interprêteur PHP et le fichier XML
Parse error: syntax error, unexpected T_STRING in /Applications/MAMP/htdocs/Tests-PHP/xml.php on line 1

Le seul moyen de palier à ce problème est de générer ce code XML à l'aide d'une instruction echo() par exemple.

Solution pour éviter ce conflit
<?php
echo '<?xml version="1.0" encoding="utf-8" standalone="yes"?>',"\n";
?>

Je ne vais pas modifier tous mes fichiers quand même...

Si vous ne comptez pas changer d'hébergeur, alors ne modifiez pas tous vos scripts mais par contre pensez à adopter cette bonne pratique pour vos applications futures. Vous n'êtes pas à l'abri d'une configuration différente d'un serveur (celui d'un client par exemple).

Notez par exemple que le logiciel EasyPHP.2 interdit par défaut les balises courtes afin de forcer les développeurs à adopter cette bonne pratique :-)

Ce tutoriel a été réalisé à partir du billet de Frédéric Bouchery : Pourquoi il ne faut pas utiliser les balises courtes ?



Les commentaires

1. Par makram le 12/12/2007 08:39

Merci

2. Par Emacs le 12/12/2007 09:19

Pas de quoi

3. Par ravnnika le 23/12/2007 17:06

Enfin je trouve une explication. Merci !

4. Par Jjenn le 01/01/2008 12:11

Cela est pourtant logique. Merci pour la précision.

5. Par HardMicro-fr le 05/01/2008 03:07

Merci pour l'explication

6. Par baton le 10/02/2008 22:33

C'est donc pour ça...

Merci pour l'info

7. Par Geoffroy le 10/02/2008 23:10

Pas mal, c'est vrai que ça peut servir
J'utilisais <? et ?> au début, mais maintenant je n'utilise plus que <?php ?>, j'ai déjà eu un problème avec un serveur à cause de ça

8. Par Sun Location le 07/05/2008 14:07

Merci

9. Par Sithran le 08/05/2008 17:27

A partir de quelle version de PHP les balises courtes seront-elles retirées ?

10. Par Emacs le 08/05/2008 19:05

J'ai un doute mais il me semble qu'elle seront désactivées par défaut dans PHP 6, voire même supprimées. Mais à vérifier...

11. Par Ooops le 18/12/2008 18:57

Bonjour, il faudrait expliquer a ceux qui font des tutos (et Quickstart) sur le ZF de retirer les <?= de tous les fichiers phtml de leurs vues... ooh c'est pas bien
Et rappeler aussi , lorsqu'un fichier ne contient que du PHP == pas de balises de fin --> ?>
cela évite l'envoi d'espaces blancs et des erreurs du type header already sent ... cela fait aussi partie des bonnes pratiques. En tous cas bravo et merci pour ce super site très bien documenté et les tutos si bien expliqué.

12. Par gagarine le 19/01/2009 23:07

"Je vais pas changer tous mes fichiers..." bien si! Il suffit d'utiliser un bon IDE (eclipse par exemple). Un coup de rechercher/remplacer et en 5min c'est réglé.

13. Par Emacs le 20/01/2009 09:41

@gagarine : méfie toi du search & replace car ça peut causer des effets de bord assez gênants. Par exemple, si sur l'ensemble de ton projet, tu fais un search & replace de <? vers <?php alors tu peux potentiellement changer aussi les tags de fichiers XML qui se trouvent dans ton projet.

14. Par Kud le 21/02/2009 23:26

Bonjour, après quelques recherches à ce sujet (oui c'est en étudiant zend qui utilise les short tags dans ses scripts de vue que je me suis penché dessus), pourquoi sont ils si déconseillés ? car même si le virtualhost et le php.ini disent non aux short tags, rien ne t'empêche de définir dans ton index.php la valeur "1" aux short tags non ? et en ce qui concerne le xml, tu as donné toi même la réponse. Aurais-tu une idée ? Merci

15. Par Emacs le 22/02/2009 11:07

Ils sont déconseillés pour des raisons de compatibilité. Tu ne pourras pas toujours redéfinir à 1 l'utilisation des short tags selon le serveur sur lequel tu te trouves. Donc pour assurer une compatibilité maximale des scripts sur les serveurs, il faut tout de suite prendre la bonne habitude d'écrire les tags PHP prévus à la base : <?php

16. Par FMaz le 12/05/2009 20:40

Hum,

J'aimerais apporter le bémol suivant: Normalement, un fichier .xml n'est pas un type de fichier que PHP va parser.

Si vous utilisez un fichier .php qui génère un fichier .xml, de toute facon vous allez devoir utiliser une instruction header() pour définir le type MIME du fichier. Alors c'est pas comme si ca compliquait vraiment les choses de devoir faire le echo en question.



Ensuite, je trouve plutot réducteur de voir:
"tags courts très employés par les webmasters débutants."

En effet, je ne vois pas le lien avec le niveau. Si cette option existe, c'est pour une bonne raison.

Par exemple, si votre site utilise un système de template personnalisé, et que vous avez plusieurs dizaine de milliers d'inclusions de valeurs à faire.

Il est plus que possible que vous utilisiez la syntaxe suivante:

Bonjour <?=$nom;?> !

Au lieu de la syntaxe classique:
Bonjour <?php echo $nom; ?> !

Est-ce que je suis débutant pour autant ?



Bref, il existe certaines fois ou l'usage est tout à fait acceptable, et je trouve dommage qu'un article qui se veuille aussi constructif se montre aussi partisan et partial.

My 2 cents

17. Par Masseuro le 29/07/2009 17:04

Pour les fichiers .xml, désolé FMaz mais tout dépend de la réécriture d'url que tu as ou bien des options dans ton htaccess (qui permettrait qu'un fichier xml soit interprété en php ).

Mais sinon en effet rien de méchant. Le seul point important c'est que certains hébergeur n'autorise pas les short tags. Et ça c'est très gênant.

18. Par jernst le 14/09/2009 14:59

> Je ne vais pas modifier tous mes fichiers quand même...

J'ai créé un script qui fait ça tout seul si jamais :

http://ernstfamily.ch/jonathan/2009/06/conversion-de-scripts-php-utilisant-les-%C2%AB%C2%A0short-tags%C2%A0%C2%BB/