Tp 7 php framework mvc blogpoo
Thème :
Intermédiaire
1 vues ·3/12 leçons

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-article
  • parse_url(..., PHP_URL_PATH) extrait uniquement le chemin : /user-article-show.php
  • urldecode() 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 .htaccess pointant vers public/
  • 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.