Chapitre 1 sur 5

Installer PHP et ses extensions pour Laravel sur Debian 13

vérifié le 2 septembre 2026 · 4 min

Réponse rapide

Debian 13 fournit PHP 8.4 dans ses dépôts officiels : sudo apt install php-cli php-fpm php-mbstring php-xml php-curl php-zip php-bcmath php-intl php-mysql suffit pour Laravel 13, sans dépôt tiers. Attention à deux paquets souvent cités à tort : php-json ne sert plus à rien depuis PHP 8.0, et c’est php-mysql qu’il faut, pas php-mysqli, parce que Laravel passe par PDO.

Laravel 13 réclame PHP 8.2 au minimum et une poignée d’extensions. Bonne nouvelle : Debian 13 « trixie » livre PHP 8.4 dans ses dépôts officiels, ce qui rend le dépôt tiers Sury inutile dans le cas courant.

Étapes exécutées sur un conteneur Debian 13 propre, le 2 septembre 2026. Ce chapitre s’inscrit dans l’installation de Laravel sur Debian, dans le parcours Développement web.

Vérifier ce que propose votre Debian

Avant d’ajouter le moindre dépôt, regardez ce que la distribution offre :

bash
sudo apt update
apt-cache policy php-cli
code
php-cli:
  Installed: (none)
  Candidate: 2:8.4+96
  Version table:
     2:8.4+96 500
        500 http://deb.debian.org/debian trixie/main arm64 Packages

PHP 8.4 est disponible. C’est largement suffisant pour Laravel 13, et cela vous évite un dépôt externe à maintenir. La correspondance entre version de Debian et version de PHP fournie :

Debian PHP des dépôts officiels Suffisant pour Laravel 13 ?
13 « trixie » 8.4 Oui
12 « bookworm » 8.2 Oui, au minimum requis
11 « bullseye » 7.4 Non, dépôt tiers nécessaire

Installer PHP et les extensions

Une seule commande couvre le socle requis par Laravel, plus les pilotes de base de données :

bash
sudo apt install -y php-cli php-fpm \
  php-mbstring php-xml php-curl php-zip \
  php-bcmath php-intl \
  php-mysql php-sqlite3 \
  unzip curl ca-certificates

Deux extensions courantes ne figurent pas dans cette liste parce qu’elles dépendent de vos choix d’architecture : php-redis, traitée dans le chapitre sur Redis, et php-gd ou php-imagick pour le traitement d’images.

Contrôlez la version obtenue :

bash
php -v
code
PHP 8.4.24 (cli) (built: Jul 31 2026 05:11:11) (NTS)

Puis vérifiez que toutes les extensions attendues par Laravel répondent présentes :

bash
for e in ctype curl dom fileinfo filter hash mbstring openssl \
         pcre pdo session tokenizer xml bcmath intl zip; do
  printf "%-10s %s\n" "$e" "$(php -m | grep -qix "$e" && echo OK || echo MANQUANT)"
done

Sur l’installation de test, les seize lignes renvoient OK. Plusieurs de ces extensions sont compilées dans le binaire PHP de Debian et n’ont pas de paquet dédié : elles apparaissent quand même dans php -m.

Deux paquets souvent cités à tort

php-json n’a plus lieu d’être

Depuis PHP 8.0, l’extension JSON est compilée dans le binaire et ne peut plus être désactivée. Le paquet php-json subsiste dans Debian en simple transition. L’installer ne casse rien, mais il n’apporte rien.

php-mysqli n’est pas le bon paquet

Laravel passe par PDO, pas par mysqli. C’est php-mysql qu’il faut, et il fournit les deux. Vérifiez ce que PHP voit réellement :

bash
php -r 'echo implode(", ", PDO::getAvailableDrivers()), PHP_EOL;'
code
mysql, sqlite

Si mysql n’apparaît pas dans cette liste, Laravel ne pourra pas se connecter à MySQL ou MariaDB, quels que soient les réglages du fichier .env.

Régler PHP pour une application web

Deux fichiers coexistent, avec des valeurs différentes : celui de la ligne de commande et celui du serveur web. Modifier le mauvais est une source classique de confusion.

bash
/etc/php/8.4/cli/php.ini    # artisan, composer, tâches planifiées
/etc/php/8.4/fpm/php.ini    # requêtes servies par nginx ou Apache

Les réglages qui comptent pour une application Laravel se trouvent dans le fichier FPM :

/etc/php/8.4/fpm/php.ini
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 21M
max_execution_time = 60

post_max_size doit rester supérieur à upload_max_filesize, sinon un envoi à la taille maximale est rejeté avant d’atteindre l’application. Rechargez ensuite le service, sans quoi les valeurs restent inchangées :

bash
sudo systemctl reload php8.4-fpm
php -i | grep memory_limit          # valeur CLI
sudo -u www-data php-fpm8.4 -i | grep memory_limit

PHP en place, l’étape suivante est l’installation de Composer.

Installer une autre version de PHP avec le dépôt Sury

Ce détour ne se justifie que si vous visez une version que Debian ne fournit pas : PHP 8.5 sur Debian 13, ou PHP 8.2 sur une Debian 11. La méthode a changé : apt-key est supprimé depuis Debian 12, il faut passer par un porte-clés dédié.

bash
sudo apt install -y curl ca-certificates
sudo curl -fsSLo /etc/apt/keyrings/php.gpg https://packages.sury.org/php/apt.gpg

echo "deb [signed-by=/etc/apt/keyrings/php.gpg] https://packages.sury.org/php/ $(. /etc/os-release && echo $VERSION_CODENAME) main" \
  | sudo tee /etc/apt/sources.list.d/php.list

sudo apt update
sudo apt install -y php8.5-cli php8.5-fpm php8.5-mbstring php8.5-xml php8.5-curl php8.5-zip php8.5-bcmath php8.5-intl php8.5-mysql

Avec plusieurs versions installées, choisissez celle qui répond à la commande php :

bash
sudo update-alternatives --config php
Ce que coûte un dépôt tiers

Il faudra le maintenir : à chaque montée de version de Debian, vérifier que le dépôt suit, et surveiller les mises à jour de sécurité séparément. Si les dépôts officiels suffisent, restez dessus.

Erreurs fréquentes

Installer php-mysqli au lieu de php-mysql Laravel utilise PDO. Sans pdo_mysql, aucune connexion MySQL ne fonctionne quels que soient les réglages du .env.
Ajouter le dépôt Sury sans nécessité Debian 13 fournit déjà PHP 8.4. Un dépôt tiers ajoute une maintenance et un suivi de sécurité séparés.
apt-key est supprimé depuis Debian 12 Les tutoriels qui l’utilisent échouent. Il faut un porte-clés dans /etc/apt/keyrings et l’option signed-by.
Modifier le mauvais php.ini Le fichier cli/ et le fichier fpm/ sont distincts. Les réglages qui comptent pour une application web sont dans fpm/.
Oublier de recharger PHP-FPM Les valeurs modifiées dans php.ini ne prennent effet qu’après systemctl reload php8.4-fpm.
post_max_size inférieur à upload_max_filesize Un envoi à la taille maximale est rejeté avant d’atteindre l’application.
Newsletter

Les nouveaux tests, tutoriels et projets, par e-mail.

Tests reproductibles, code versionné, résultats datés. Jamais de spam.