juillet 2022

Archives

Entries list

mercredi 6 juillet 2022

Utiliser browser-sync avec le serveur de développement de PHP

Je développe mes micro-sites avec le serveur de développement intégré à PHP et rarement avec un vrai serveur qui tourne en local. C'est rapide à mettre en œuvre, j'ai les logs et les erreurs dans la console de mon éditeur (Terminus dans Sublime Text), c'est simple et pratique.

Quand j'ai fini ma tâche, un simple CTRL+C pour arrêter le serveur et c'est bon.

J'ai même un alias bash pour lancer ce serveur dans un terminal quand je teste juste une bricole temporaire (alias phps="php -S localhost:8082")

À la racine de mes dépôts, j'ai en général un fichier bash exécutable (appelé run, je fais dans l'originalité…) qui lance le serveur intégré PHP en lui indiquant quel dossier est le dossier public ainsi que mon fichier de démarrage pour router les requêtes vers le front controller (ce qui est fait par un fichier .htaccess pour mes sites sous Apache en production).

Il existe un paquet npm, browser-sync, qui permet de créer un serveur local, d'ouvrir le navigateur et de surveiller les changements locaux sur les fichiers du site et de recharger automatiquement l'onglet dès qu'un fichier a été modifié. Comme j'ai déjà node.js d'installé, je me suis mis à utiliser browser-sync uniquement pour ne pas passer mon temps à rafraîchir l'onglet dès que je fais un changement, que ce soit un changement code côté serveur ou côté client. Ça s'installe avec npm install -g browser-sync.

Voilà en gros ce que je mets à la racine de mes sites dans ce script bash (les paramètres de la ligne lançant le serveur PHP sont bien sûr à adapter à votre code):

#! /usr/bin/env bash

function ctrl_c() {
    pkill browser-sync
}

if command -v browser-sync &> /dev/null; then
    browser-sync start --proxy "localhost:8082" --files "**/*" &
fi

php -S localhost:8082 -t public/ app/inc/router.php

trap ctrl_c INT

Et comme une vidéo est peut être plus claire qu'une longue explication, voilà ce que ça donne à l'usage :


Le seul inconvénient est que si vous générez une erreur fatale sur un fichier PHP, vous devrez recharger la page manuellement.

Voilà, pour l'astuce du jour, en espérant que ça serve à d'autres.