Pourquoi il est déconseillé d'utiliser les balises courtes...
- Par Emacs
- 16 commentaires
- 7 939 lectures
- Format PDF
- 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 XMLParse 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?>
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
2. Par Emacs le mercredi 12 décembre 2007 à 09:09
Pas de quoi
![]()
3. Par ravnnika le dimanche 23 décembre 2007 à 17:05
Enfin je trouve une explication. Merci !
![]()
4. Par Jjenn le mardi 01 janvier 2008 à 12:12
Cela est pourtant logique. Merci pour la précision.
5. Par HardMicro-fr le samedi 05 janvier 2008 à 03:03
Merci pour l'explication
6. Par baton le dimanche 10 février 2008 à 22:10
C'est donc pour ça...
Merci pour l'info![]()
7. Par Geoffroy le dimanche 10 février 2008 à 23:11
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 mercredi 07 mai 2008 à 14:02
Merci
9. Par Sithran le jeudi 08 mai 2008 à 17:05
A partir de quelle version de PHP les balises courtes seront-elles retirées ?
10. Par Emacs le jeudi 08 mai 2008 à 19:07
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 jeudi 18 décembre 2008 à 18:06
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 lundi 19 janvier 2009 à 23:11
"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 mardi 20 janvier 2009 à 09:09
@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 samedi 21 février 2009 à 23:11
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 dimanche 22 février 2009 à 11:11
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 mardi 12 mai 2009 à 20:08
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

1. Par makram le mercredi 12 décembre 2007 à 08:08