02 — Le fichier server.php : Serveur de développement PHP
Définition
Le fichier server.php est un routeur de serveur spécialement conçu pour le serveur web intégré de PHP (php -S). Il permet de simuler en développement le comportement d’un serveur Apache ou Nginx configuré correctement.
🔗 Comparaison Laravel
Laravel possède exactement le même fichier à sa racine. C’est d’ailleurs de là qu’il est inspiré.
| Notre blog | Laravel |
|---|---|
server.php à la racine |
server.php à la racine |
Lance avec php -S localhost:8000 server.php |
Lance avec php artisan serve (qui utilise server.php en interne) |
La commande php artisan serve de Laravel est simplement un wrapper élégant autour de php -S localhost:8000 server.php.
📄 Notre fichier server.php
<?php
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
// Si le fichier existe dans public/, on le sert directement
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
return false;
}
// Si le fichier existe dans resources/ ou storage/, on le sert
if ($uri !== '/' && file_exists(__DIR__.$uri)) {
return false;
}
// Sinon, on passe la main au Front Controller
require_once __DIR__.'/public/index.php';
Analyse pas à pas
Étape 1 : Extraire l’URL demandée
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
$_SERVER['REQUEST_URI']contient l’URL complète, par exemple/user-article-show.php?id=5&slug=mon-articleparse_url(..., PHP_URL_PATH)extrait uniquement le chemin :/user-article-show.phpurldecode()décode les caractères spéciaux encodés (ex:%20→ espace)
Étape 2 : Servir les fichiers statiques de public/
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
return false;
}
Si la requête est /css/style.css et que le fichier public/css/style.css existe, on retourne false. Dans le contexte du serveur PHP intégré, return false signifie : “sers ce fichier toi-même, je ne m’en charge pas”.
Étape 3 : Servir les fichiers statiques de la racine
if ($uri !== '/' && file_exists(__DIR__.$uri)) {
return false;
}
Cela permet de servir /resources/css/blog.css ou /storage/articles/article_123.jpg directement depuis la racine du projet, sans passer par le routeur.
Étape 4 : Passer au Front Controller
require_once __DIR__.'/public/index.php';
Si aucun fichier statique ne correspond, on charge public/index.php qui lancera le routeur.
💡 Comment lancer le serveur
# Depuis la racine du projet
php -S localhost:8000 server.php
# Ou via le script Composer
composer dev
Le script composer dev est défini dans composer.json :
"scripts": {
"dev": "php -S localhost:8000 server.php"
}
⚠️ Important : Serveur de développement uniquement
Le serveur intégré PHP n’est pas fait pour la production. En production, il faut :
- Configurer Apache avec un
.htaccesspointant verspublic/ - Ou configurer Nginx avec
root /var/www/projet/public
Laravel gère cela avec Forge, Vapor ou de simples configs Nginx documentées dans sa documentation officielle.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur 02 — Le fichier `server.php` : Serveur de développement PHP. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.