Lorsque l’on débute en PHP, l’un des tout premiers éléments que l’on rencontre, ce sont ces fameuses balises d’ouverture et de fermeture <?php
et ?>
. Elles semblent anodines, mais elles jouent un rôle essentiel : elles permettent au serveur de savoir où commence et où s’arrête le code PHP à interpréter. Sans elles, votre code ne serait tout simplement pas compris ni exécuté par le serveur.
Si vous venez du HTML, vous êtes déjà familier avec la notion de balises : elles encadrent du contenu et indiquent au navigateur comment l’interpréter. En PHP, le principe est assez similaire, mais ici, ce n’est pas le navigateur qui s’en occupe, mais le serveur web (comme Apache ou Nginx) qui lit votre script PHP avant d’en renvoyer le résultat au navigateur.
Dans ce guide, nous allons décortiquer ensemble les différentes formes de balises PHP, comprendre leurs usages, découvrir les cas où certaines sont à éviter, et voir comment elles s’intègrent au HTML. Nous prendrons aussi le temps d’analyser des exemples concrets et d’expliquer comment les bonnes pratiques de syntaxe peuvent éviter des erreurs parfois difficiles à repérer.
- Comprendre le rôle des balises d'ouverture et de fermeture en PHP
- La balise standard
- Les autres formes de balises : alternatives et historiques
- 4. Quand faut-il fermer la balise PHP ?
- Comment le serveur interprète les balises PHP
- Mélanger PHP et HTML correctement
- Les erreurs courantes avec les balises PHP
- 8. Les bonnes pratiques professionnelles
- Les balises PHP et la sécurité
- Compatibilité entre versions de PHP
- 11. PHP dans les frameworks modernes
- Astuce de pro : structurer vos fichiers intelligemment
Comprendre le rôle des balises d’ouverture et de fermeture en PHP
Le PHP est un langage côté serveur, ce qui signifie que le code n’est jamais envoyé directement au navigateur de l’utilisateur. Ce que le navigateur reçoit, c’est le résultat final — généralement du HTML, du CSS ou du JavaScript généré par le serveur.
Pour que le serveur sache quelle partie de votre fichier il doit exécuter comme du code PHP et quelle partie il doit laisser telle quelle (comme du HTML), il se base sur les balises d’ouverture et de fermeture.
Par exemple :
<?php
echo "Bonjour le monde !";
?>
Dans cet exemple simple, le serveur lit uniquement ce qui se trouve entre <?php
et ?>
. Tout le reste du fichier est ignoré par le moteur PHP et renvoyé tel quel au navigateur.
Ainsi, ces balises agissent comme des délimiteurs entre le code interprété et le contenu brut. Sans elles, le serveur n’a aucune idée de ce qu’il doit exécuter.
La balise standard <?php ... ?>
C’est la forme la plus courante, la plus reconnue, et surtout la plus recommandée.
Elle s’écrit ainsi :
<?php
// votre code PHP ici
?>
Tout le code situé entre ces deux balises est interprété comme du PHP.
Voici un exemple un peu plus complet :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Exemple PHP</title>
</head>
<body>
<h1>
<?php
echo "Bienvenue sur mon site !";
?>
</h1>
</body>
</html>
Dans ce cas, le code HTML et le code PHP cohabitent parfaitement. Le serveur exécute la portion PHP (echo "Bienvenue sur mon site !";
) puis renvoie au navigateur la page HTML finale avec le texte remplacé.
Cette méthode est universelle, ce qui veut dire qu’elle fonctionne sur tous les serveurs, quelles que soient leurs configurations. Elle est également activée par défaut, contrairement à d’autres formes de balises que nous allons voir plus bas.
Les autres formes de balises : alternatives et historiques
Il existe plusieurs autres syntaxes possibles pour ouvrir et fermer le PHP, mais elles ne sont pas toutes recommandées. Certaines sont désactivées par défaut dans les versions récentes de PHP, d’autres ont été conçues pour des cas précis.
La balise courte <? ... ?>
Il s’agit d’une forme abrégée de la balise standard :
<?
echo "Salut !";
?>
Cette syntaxe peut sembler pratique, mais elle n’est pas activée par défaut sur tous les serveurs. En effet, elle dépend de la directive short_open_tag
du fichier de configuration php.ini
. Si cette option est désactivée (ce qui est souvent le cas), votre code ne fonctionnera pas.
Pour cette raison, il est fortement conseillé de ne pas utiliser cette version abrégée. Elle peut rendre votre code incompatible sur d’autres serveurs, notamment si vous travaillez sur un hébergement mutualisé ou si votre projet doit être partagé.
b) La balise courte pour echo
: <?= ... ?>
Cette forme est quant à elle totalement sûre et standardisée depuis PHP 5.4. Elle équivaut à un <?php echo ... ?>
simplifié.
Exemple :
<p>Bonjour <?= $nom ?> !</p>
Ce code est équivalent à :
<p>Bonjour <?php echo $nom; ?> !</p>
Cette syntaxe est très pratique dans les fichiers où le PHP ne sert qu’à afficher des variables dans du HTML. Elle permet de rendre le code plus lisible et plus fluide.
En savoir plus sur : Les short open tag
c) Les balises ASP et script (anciennes et obsolètes)
PHP a longtemps permis d’utiliser d’autres formes inspirées d’ASP ou de JavaScript, mais elles sont désormais obsolètes et à bannir.
Exemple de balise ASP :
<% echo "Bonjour"; %>
Ou encore :
<script language="php">
echo "Salut";
</script>
Ces syntaxes sont désactivées par défaut depuis PHP 7.0, et leur usage est totalement déconseillé. Elles ne fonctionnent plus sur la majorité des serveurs modernes.
4. Quand faut-il fermer la balise PHP ?
Dans certains fichiers PHP, vous remarquerez que la balise ?>
n’apparaît pas à la fin. Et c’est tout à fait normal !
Prenons cet exemple :
<?php
function direBonjour() {
return "Bonjour à tous !";
}
Ici, il n’y a pas de balise de fermeture. Pourquoi ? Parce qu’elle est facultative lorsqu’un fichier contient uniquement du code PHP.
Ne pas fermer la balise présente plusieurs avantages :
- Cela évite les erreurs de type “headers already sent”, souvent causées par un espace ou une ligne vide après
?>
. - Cela rend le code plus propre et plus conforme aux bonnes pratiques actuelles.
Ainsi, si votre fichier est purement PHP (par exemple, un contrôleur, une fonction, une classe…), il est recommandé de ne pas fermer la balise.
En revanche, si vous mélangez du HTML et du PHP dans un même fichier, il est logique de la fermer pour revenir au HTML.
Exemple :
<?php
$nom = "Alban";
?>
<p>Bonjour <?= $nom ?> !</p>
Comment le serveur interprète les balises PHP
Quand un serveur rencontre un fichier .php
, il parcourt le fichier ligne par ligne.
- Si le serveur trouve du texte en dehors des balises PHP, il l’envoie tel quel au navigateur.
- S’il trouve du texte à l’intérieur, il l’exécute et envoie le résultat.
Prenons un exemple concret pour mieux comprendre :
<!DOCTYPE html>
<html>
<body>
<p>Avant PHP</p>
<?php
echo "Ceci est du PHP exécuté";
?>
<p>Après PHP</p>
</body>
</html>
Le serveur n’envoie pas les balises elles-mêmes au navigateur. Le code final reçu par le navigateur sera :
<!DOCTYPE html>
<html>
<body>
<p>Avant PHP</p>
Ceci est du PHP exécuté
<p>Après PHP</p>
</body>
</html>
Vous remarquez qu’il ne reste plus aucune trace du code PHP.
Mélanger PHP et HTML correctement
L’un des aspects les plus puissants de PHP, c’est justement sa capacité à s’intégrer dans du HTML. Mais cela peut rapidement devenir illisible si l’on ne s’y prend pas bien.
Exemple typique mal structuré :
<?php
echo "<ul>";
echo "<li>Accueil</li>";
echo "<li>Blog</li>";
echo "<li>Contact</li>";
echo "</ul>";
?>
Ce code fonctionne, mais il n’est ni lisible ni pratique.
Une version plus propre consisterait à mélanger intelligemment PHP et HTML :
<ul>
<?php
$pages = ["Accueil", "Blog", "Contact"];
foreach ($pages as $page) {
echo "<li>$page</li>";
}
?>
</ul>
Ou mieux encore, en utilisant la syntaxe courte <?= ?>
:
<ul>
<?php foreach ($pages as $page): ?>
<li><?= $page ?></li>
<?php endforeach; ?>
</ul>
Cette dernière forme est plus fluide, plus propre et plus lisible, surtout dans les templates ou les vues MVC.
Les erreurs courantes avec les balises PHP
Lorsque l’on débute, il est très fréquent de rencontrer des erreurs liées à la mauvaise utilisation des balises PHP. Certaines provoquent des messages d’erreur visibles, d’autres génèrent des comportements étranges plus difficiles à comprendre. Prenons le temps de les analyser une par une pour que vous puissiez les éviter dès le départ.

Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?a) Oublier de fermer une balise
C’est l’erreur la plus classique. Par exemple :
<?php
echo "Bonjour le monde !";
Dans ce cas, si votre fichier contient du HTML après le code PHP, tout ce qui suit pourrait être interprété comme du code PHP et provoquer une erreur de syntaxe.
Pour éviter cela, il faut toujours s’assurer de fermer correctement la balise ?>
lorsqu’on mélange du PHP et du HTML. En revanche, comme expliqué précédemment, si votre fichier ne contient que du PHP, vous pouvez (et devriez) vous en passer.
b) Ajouter des espaces après la fermeture
Cela peut paraître anodin, mais un simple espace ou une ligne vide après la balise ?>
peut causer des erreurs très gênantes, notamment le fameux message :
Warning: Cannot modify header information – headers already sent
Cela arrive souvent dans les fichiers de configuration ou d’inclusion (config.php
, functions.php
, etc.), car ces fichiers sont exécutés avant l’envoi des en-têtes HTTP. Un simple espace après la balise peut forcer l’envoi du contenu prématurément.
C’est une autre raison pour laquelle les développeurs professionnels ne ferment jamais la balise ?>
dans les fichiers purement PHP.
c) Utiliser la mauvaise balise selon la configuration du serveur
Comme vu plus haut, certaines formes de balises (comme <?
sans php
) ne sont pas activées sur tous les serveurs. Si vous les utilisez, votre code ne sera tout simplement pas interprété et s’affichera tel quel dans le navigateur.
Exemple :
<?
echo "Bonjour !";
?>
Sur un serveur où short_open_tag
est désactivé, ce code affichera littéralement <? echo "Bonjour !"; ?>
au lieu d’exécuter le script. Pour garantir la compatibilité, il faut donc toujours utiliser la forme complète <?php ... ?>
.
8. Les bonnes pratiques professionnelles
Dans le développement moderne, certaines conventions se sont imposées pour garantir la clarté, la compatibilité et la sécurité du code PHP. Voici les principales à retenir.
a) Toujours préférer <?php ... ?>
C’est la seule syntaxe universelle, reconnue partout et conforme aux standards du PHP moderne. Elle garantit que votre code fonctionnera quel que soit l’environnement ou l’hébergeur.
Même si cela vous paraît un peu plus long à écrire, c’est la garantie d’un code pérenne et portable.
b) Utiliser <?= ... ?>
pour afficher des variables dans du HTML
C’est une syntaxe sûre, propre et lisible. Elle rend le code des templates beaucoup plus clair et rapide à lire.
Par exemple :
<h2>Bienvenue <?= $userName ?></h2>
est bien plus agréable à lire que :
<h2>Bienvenue <?php echo $userName; ?></h2>
c) Ne jamais fermer la balise dans les fichiers purement PHP
Comme évoqué, cela évite les erreurs liées à des espaces parasites et respecte les conventions de codage utilisées par la majorité des frameworks modernes (Laravel, Symfony, WordPress, etc.).
d) Utiliser des outils de vérification
Les IDE modernes comme VS Code, PHPStorm ou NetBeans peuvent vous signaler automatiquement les erreurs de syntaxe et les oublis de balises. Activer ces fonctionnalités est un bon réflexe, surtout au début.
Besoin d’aide et d’assistance ? Lisez notre tutoriel : VS Code assité par l’IA
Les balises PHP et la sécurité
Les balises PHP peuvent sembler anodines, mais elles ont un impact direct sur la sécurité de votre code, surtout si vous utilisez des syntaxes obsolètes ou mal configurées.
a) Désactiver short_open_tag
dans php.ini
Sur un serveur dont vous contrôlez la configuration, il est recommandé de désactiver cette option pour éviter que des fichiers externes utilisent des balises courtes non souhaitées. Cela empêche un attaquant de profiter d’un fichier PHP mal configuré pour injecter du code.
Dans votre fichier php.ini
, assurez-vous que cette ligne est bien présente :
short_open_tag = Off
b) Se méfier des inclusions de fichiers
Si vous incluez des fichiers PHP (include
, require
), assurez-vous qu’ils ne contiennent pas de balises mal fermées. Un fichier mal écrit peut interrompre l’exécution de votre code ou provoquer des erreurs visibles sur le site.
Par exemple :
<?php
include 'config.php';
echo "Le site fonctionne.";
?>
Si le fichier config.php
contient un espace après sa balise de fermeture, cela peut casser les entêtes ou perturber la sortie du script.
En savoir plus sur Include, require ou require_once en PHP.
c) Contrôler les sorties PHP
Lorsqu’un fichier PHP est exécuté, tout ce qui se trouve en dehors des balises est immédiatement renvoyé au navigateur. Cela peut être exploité si une portion de texte non désirée est envoyée (par exemple, une erreur de configuration ou un message caché). C’est pourquoi il faut veiller à ne jamais laisser de texte ou de HTML accidentel en dehors des balises PHP dans des fichiers sensibles.
Compatibilité entre versions de PHP
Les balises d’ouverture et de fermeture ont évolué au fil des versions de PHP. Comprendre ces différences permet d’écrire du code compatible avec la majorité des serveurs.
- Avant PHP 5.4, les balises courtes
<?= ?>
n’étaient pas toujours activées. - Depuis PHP 5.4, elles sont activées par défaut et donc sûres à utiliser.
- Les balises
<?
et<%
ont été supprimées ou désactivées définitivement dans les versions récentes de PHP (7.0 et supérieures).
Ainsi, si vous travaillez sur un projet ancien ou un hébergement obsolète, assurez-vous de tester la compatibilité avant de migrer.
Pour vérifier la configuration, vous pouvez créer un petit fichier info.php
avec le contenu suivant :
<?php phpinfo(); ?>
En l’ouvrant dans votre navigateur, vous obtiendrez la configuration complète du serveur PHP, notamment la valeur de short_open_tag
.
11. PHP dans les frameworks modernes
Dans les frameworks PHP récents, comme Laravel, Symfony ou CodeIgniter, la gestion des balises est très encadrée. La plupart utilisent des moteurs de template (Blade, Twig, etc.) qui remplacent les balises PHP par une syntaxe plus lisible.
Par exemple, dans Laravel (avec Blade), au lieu de :
<?php echo $user->name; ?>
on écrit simplement :
{{ $user->name }}
Ce système encapsule la sécurité (avec une protection automatique contre les injections XSS) tout en restant proche de la logique PHP. Cependant, sous le capot, ces moteurs continuent d’utiliser les balises PHP standard <?php ... ?>
. Cela montre bien que, même dans les environnements modernes, ces balises restent la base incontournable du langage.
Comprendre le principe de layout en PHP
Astuce de pro : structurer vos fichiers intelligemment
Une bonne pratique consiste à limiter au maximum les transitions entre PHP et HTML. Chaque ouverture et fermeture de balise implique un passage d’un langage à l’autre, ce qui peut alourdir la lecture et l’entretien du code.
Par exemple, au lieu de faire :
<?php echo "<p>Bonjour $nom</p>"; ?>
vous pouvez simplement écrire :
<p>Bonjour <?= $nom ?></p>
Et si votre logique devient plus complexe (conditions, boucles, affichage conditionnel), préférez une approche structurée :
<?php if ($connecte): ?>
<p>Bienvenue <?= $pseudo ?> !</p>
<?php else: ?>
<p>Veuillez vous connecter.</p>
<?php endif; ?>
Cette syntaxe est plus claire, plus facile à maintenir, et respecte parfaitement les bonnes pratiques modernes.
Les balises d’ouverture et de fermeture en PHP peuvent sembler simples, mais elles sont en réalité le socle même de tout script PHP. Ce sont elles qui permettent au serveur de distinguer le code interprété du contenu brut, et leur bonne utilisation conditionne la stabilité, la compatibilité et la sécurité de vos projets.
Apprendre à les maîtriser, c’est poser des fondations solides pour tout futur développement en PHP. En respectant quelques règles simples — utiliser la forme standard <?php ... ?>
, éviter la fermeture dans les fichiers purement PHP, préférer <?= ?>
pour l’affichage, et bannir les anciennes syntaxes — vous garantirez à votre code une longévité et une fiabilité à toute épreuve.
Dans les frameworks modernes comme dans le développement “from scratch”, ces balises restent omniprésentes, discrètes mais indispensables. Elles sont, en quelque sorte, les portes d’entrée du PHP dans le monde du web.