Aller au contenu

Serveurs locaux

Objectif : faire tourner la même mini-page ("Bonjour, il est ...") avec trois technologies différentes — PHP, Python (Flask) et JavaScript (Node.js) — et observer ce qui les distingue.

1) Avec PHP

  • un exemple de fichier :
index.php
<?php
// index.php
echo "<h1>Bonjour depuis PHP</h1><p>Il est " . date("H:i:s") . "</p>";
?>
  • lancement du serveur php :
php -S localhost:8001
  • Ouvrir :
http://localhost:8001

2) Avec Python (Flask)

  • un exemple de fichier :
app.py
# app.py
from flask import Flask
from datetime import datetime

app = Flask(__name__)

@app.route("/")
def accueil():
    return f"<h1>Bonjour depuis Python</h1><p>Il est {datetime.now():%H:%M:%S}</p>"
  • Lancement du serveur python avec flask :
flask --app app run --port 8002 --debug
  • Ouvrir :
http://localhost:8002

3) Avec JavaScript (NodeJS)

  • Un exemple de fichier :
server.js
// server.js
const http = require('http');

http.createServer((req, res) => {
  const heure = new Date().toLocaleTimeString('fr-FR');
  res.end(`<h1>Bonjour depuis Node.js</h1><p>Il est ${heure}</p>`);
}).listen(8003);
  • Lancement du serveur :
node server.js
  • Ouvrir :
http://localhost:8003

4) Ce qu'on observe

Une fois les trois serveurs lancés en même temps (trois onglets, trois ports), comparez avant de regarder la correction :

Question PHP Flask Node.js
Fallait-il installer autre chose que le langage lui-même ?
Combien de lignes de code "utile" (hors imports) ?
Je modifie le fichier et rafraîchis sans relancer : ça change tout seul ?
Le serveur affiche-t-il une erreur claire si je casse le code ?
Voir la correction
Question PHP Flask Node.js
Fallait-il installer autre chose que le langage lui-même ? Non Oui (Flask via pip) Non pour ce petit exemple (module http intégré)
Combien de lignes de code "utile" (hors imports) ? 1 2 3
Je modifie le fichier et rafraîchis sans relancer : ça change tout seul ? Oui, toujours Oui, si --debug est activé Non, il faut relancer manuellement (sauf avec nodemon)
Le serveur affiche-t-il une erreur claire si je casse le code ? Oui, message PHP dans la page Oui, débogueur interactif très détaillé Message d'erreur dans le terminal, pas dans le navigateur
En une phrase, à compléter puis comparer
  • PHP : un serveur qui répond à une question et oublie tout de suite.
  • Python / Flask : comme PHP, mais avec un langage qui permet aussi des calculs et une logique plus riches.
  • Node.js : un serveur qui peut rester en ligne et parler en direct avec le client (temps réel).

5) Lexique du terminal (Flask)

Ce que Flask affiche dans le terminal quand on le lance en mode --debug, ligne par ligne. Essayez d'abord de deviner le sens de chaque ligne avant de dérouler la réponse.

WARNING: This is a development server...

Rappel que ce serveur n'est pas fait pour la production — juste pour tester en local, comme php -S.

Debug mode: on

Le rechargement automatique et les pages d'erreur détaillées sont activés.

Restarting with watchdog (inotify)

Flask a détecté une modification du fichier et relance le serveur tout seul.

Debugger is active! / Debugger PIN: ...

Un débogueur interactif est accessible dans le navigateur en cas d'erreur. Le PIN protège cet accès — à ne jamais activer en production.

Running on http://127.0.0.1:8002

L'adresse locale où la page est servie (127.0.0.1 = "cette machine", équivalent de localhost).

GET / HTTP/1.1\" 200 -

Requête reçue pour la page d'accueil, réponse 200 = tout s'est bien passé.

GET /favicon.ico HTTP/1.1\" 404 -

Le navigateur a demandé l'icône de l'onglet, absente ici. 404 = ressource introuvable, sans gravité.

À retenir :

  • Le mode --debug ne doit jamais être utilisé en production : le débogueur interactif donnerait à un visiteur un accès direct au code du serveur.
  • Un code 404 sur /favicon.ico n'est pas une erreur de votre programme : c'est juste le navigateur qui réclame une icône que vous n'avez pas fournie.
  • Ces logs sont exactement le même genre d'information que ceux du serveur PHP intégré — seule la présentation change.

6) Pourquoi choisir l'un plutôt que l'autre ?

Quand choisir PHP ?

Pour une petite page interne, un outil autonome pour un cercle restreint (formulaires, CRUD simple). Déploiement ultra simple sur un hébergement classique.

Quand choisir Python (Flask) ?

Intéressant si la page doit s'appuyer sur de la logique métier plus riche, ou réutiliser du code Python existant.

Quand choisir Node.js ?

Sa vraie force est le temps réel : chats en direct, notifications, tableaux de bord qui se mettent à jour tout seuls, grâce à son modèle asynchrone non-bloquant qui gère de nombreuses connexions simultanées sans les faire attendre. En contrepartie, il est moins à l'aise pour les calculs lourds (un seul thread principal) et ajoute une couche de configuration (npm, package.json) par rapport à PHP.

Pour aller plus loin : un mini-chat avec WebSockets, pour voir ce fameux temps réel en action (à venir).