NavigateurServeur Web · HTML vs PHP

Visualisation interactive du cycle Requête / Réponse HTTP · Fichier statique vs Script dynamique

⚡ Vitesse ×1 Lent ←→ Rapide
🌐
NAVIGATEUR
Chrome / Firefox
Tape une URL ou clique un lien
EN ATTENTE
→ Requête
← Réponse
🖥️
SERVEUR WEB
Apache / Nginx
Lit le fichier .html sur le disque
EN ATTENTE
1 DNS + TCP
2 GET envoyé
3 Serveur lit fichier
4 200 OK + HTML
5 Navigateur affiche
Journal réseau — HTML statique
Requête HTTP (navigateur)
GET /index.html HTTP/1.1
Host:            monsite.be
Accept:          text/html
Accept-Language: fr-BE
Connection:      keep-alive
Cache-Control:   no-cache
Réponse HTTP (serveur)
HTTP/1.1 200 OK
Content-Type:   text/html; charset=UTF-8
Content-Length: 1842
Last-Modified:  Mon, 10 Mar 2025
Cache-Control:  max-age=3600

<!DOCTYPE html>
<html><head>...
<body><!-- Contenu statique -->
🌐
NAVIGATEUR
Envoie une requête
avec paramètres
EN ATTENTE
→ req
← res
🖥️
SERVEUR WEB
Apache + mod_php
Délègue le .php
EN ATTENTE
→ exec
← html
🐘
MOTEUR PHP
Interprète le script
Génère du HTML
EN ATTENTE
1 GET/POST reçu
2 Délégation PHP
3 Script exécuté
4 HTML généré
5 200 OK renvoyé
Journal réseau — PHP dynamique
Requête POST (navigateur)
POST /form.php HTTP/1.1
Host:         monsite.be
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
Cookie:       PHPSESSID=abc123

nom=Alice&message=Bonjour
form.php — Script PHP
<?php
// Récupère les données du formulaire
$nom     = htmlspecialchars($_POST['nom']);
$message = htmlspecialchars($_POST['message']);
?>
<!DOCTYPE html>
<html><body>
  <h1>Bonjour, <?= $nom ?> !</h1>
  <p><?= $message ?></p>
</body></html>
🌐
NAVIGATEUR
Demande une page
avec données
EN ATTENTE
HTTP
🖥️
APACHE
Reçoit la requête
Lance PHP
EN ATTENTE
PHP exec
🐘
PHP
Exécute le script
Requête SQL
EN ATTENTE
SQL
🗄️
MySQL
Base de données
Renvoie les lignes
EN ATTENTE
1 Requête HTTP
2 Apache → PHP
3 PHP → SQL
4 MySQL répond
5 PHP génère HTML
6 Réponse HTTP
Journal réseau — PHP + MySQL
articles.php — PHP + PDO
<?php
$pdo = new PDO(
  'mysql:host=localhost;dbname=blog',
  'user', 'pass'
);
$stmt = $pdo->query(
  'SELECT titre, date FROM articles
   ORDER BY date DESC LIMIT 10'
);
$articles = $stmt->fetchAll();
?>
<?php foreach($articles as $a): ?>
  <li><?= $a['titre'] ?></li>
<?php endforeach; ?>
SQL généré + résultat
-- Requête envoyée à MySQL :
SELECT titre, date
FROM   articles
ORDER BY date DESC
LIMIT  10;

-- Résultat retourné :
+-------------------------+------------+
| titre                   | date       |
+-------------------------+------------+
| Mon premier article     | 2025-03-15 |
| Introduction à PHP      | 2025-03-10 |
+-------------------------+------------+
Critère
🌐 HTML Statique
🐘 PHP Dynamique
Fichier servi
.html — lu tel quel sur le disque
.php — exécuté → génère du HTML
Traitement serveur
Aucun — lecture disque directe
Moyen — interprétation + éventuelle BDD
Contenu
Toujours identique pour tous les visiteurs
Personnalisé selon l'utilisateur, la date, la BDD…
Vitesse (1ère réponse)
Très rapide — pas de calcul
Légèrement plus lent — exécution script
Cache navigateur
Très efficace — fichier ne change pas
Partiel — dépend des en-têtes renvoyés
Base de données
Non
Oui — MySQL, PostgreSQL…
Sessions / Auth
Non
Oui$_SESSION, cookies…
Formulaires POST
Non (besoin d'un backend)
Oui$_POST
Sécurité XSS
Risque nul — pas de données user
À gérerhtmlspecialchars()
Exemples
Page d'accueil, CV, docs, landing page
Blog, boutique, tableau de bord, quiz…
💡 Ce qui se passe dans les coulisses — résumé visuel
🌐
HTML statique — Le navigateur demande index.html. Apache lit le fichier sur le disque et le renvoie tel quel. Aucun code n'est exécuté. Le contenu est identique pour tout le monde.
🐘
PHP dynamique — Apache détecte l'extension .php, confie le fichier au moteur PHP. Le script s'exécute, peut lire $_GET/$_POST, interroger MySQL, utiliser les sessions… et produit du HTML à la volée.
🔁
Dans les deux cas — le navigateur reçoit du HTML. Il ne sait pas si ce HTML était statique ou généré par PHP. C'est le serveur qui fait toute la différence.