Capitolo 1 di 5

Installare PHP e le sue estensioni per Laravel su Debian 13

verificato il 2 Settembre 2026 · 4 min

Risposta rapida

Debian 13 fornisce PHP 8.4 nei suoi repository ufficiali: sudo apt install php-cli php-fpm php-mbstring php-xml php-curl php-zip php-bcmath php-intl php-mysql basta per Laravel 13, senza repository di terze parti. Attenzione a due pacchetti spesso citati a torto: php-json non serve più da PHP 8.0, e serve php-mysql, non php-mysqli, perché Laravel passa da PDO.

Laravel 13 richiede almeno PHP 8.2 e una manciata di estensioni. La buona notizia: Debian 13 « trixie » fornisce PHP 8.4 nei suoi repository ufficiali, il che rende inutile il repository di terze parti Sury nel caso più comune.

Passaggi eseguiti su un container Debian 13 pulito, il 2 settembre 2026. Questo capitolo fa parte dell’installazione di Laravel su Debian, nel percorso Sviluppo web.

Verificare che cosa offre la tua Debian

Prima di aggiungere qualsiasi repository, guarda che cosa propone la distribuzione:

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 è disponibile. Per Laravel 13 è più che sufficiente, e ti evita un repository esterno da mantenere. La corrispondenza tra versione di Debian e versione di PHP fornita:

Debian PHP dei repository ufficiali Basta per Laravel 13?
13 « trixie » 8.4 Sì
12 « bookworm » 8.2 Sì, il minimo richiesto
11 « bullseye » 7.4 No, serve un repository di terze parti

Installare PHP e le estensioni

Un solo comando copre la base richiesta da Laravel, più i driver di database:

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

Due estensioni comuni non compaiono in questo elenco perché dipendono dalle tue scelte di architettura: php-redis, trattata nel capitolo su Redis, e php-gd o php-imagick per l’elaborazione delle immagini.

Controlla la versione ottenuta:

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

Poi verifica che tutte le estensioni attese da Laravel rispondano presente:

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

Sull’installazione di prova le sedici righe restituiscono OK. Diverse di queste estensioni sono compilate nel binario PHP di Debian e non hanno un pacchetto dedicato: compaiono comunque in php -m.

Due pacchetti spesso citati a torto

php-json non ha più ragione di esistere

Da PHP 8.0 l’estensione JSON è compilata nel binario e non può più essere disattivata. Il pacchetto php-json sopravvive in Debian come semplice pacchetto di transizione. Installarlo non rompe niente, ma non porta niente.

php-mysqli non è il pacchetto giusto

Laravel passa da PDO, non da mysqli. Serve php-mysql, che li fornisce entrambi. Verifica che cosa vede davvero PHP:

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

Se mysql non compare in questo elenco, Laravel non riuscirà a connettersi a MySQL o MariaDB, qualunque siano le impostazioni del file .env.

Regolare PHP per un’applicazione web

Coesistono due file, con valori diversi: quello della riga di comando e quello del server web. Modificare quello sbagliato è una confusione classica.

bash
/etc/php/8.4/cli/php.ini    # artisan, composer, attività pianificate
/etc/php/8.4/fpm/php.ini    # richieste servite da nginx o Apache

Le impostazioni che contano per un’applicazione Laravel stanno nel file 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 deve restare superiore a upload_max_filesize, altrimenti un invio alla dimensione massima viene rifiutato prima di arrivare all’applicazione. Ricarica poi il servizio, altrimenti i valori restano invariati:

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

PHP è a posto, il passaggio successivo è l’installazione di Composer.

Installare un’altra versione di PHP con il repository Sury

Questa deviazione si giustifica solo se punti a una versione che Debian non fornisce: PHP 8.5 su Debian 13, o PHP 8.2 su una Debian 11. Il metodo è cambiato: apt-key è stato rimosso da Debian 12, bisogna passare da un portachiavi dedicato.

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

Con più versioni installate, scegli quella che risponde al comando php:

bash
sudo update-alternatives --config php
Quanto costa un repository di terze parti

Andrà mantenuto: a ogni salto di versione di Debian bisogna verificare che il repository segua, e sorvegliare a parte i suoi aggiornamenti di sicurezza. Se i repository ufficiali bastano, resta su quelli.

Errori frequenti

Installare php-mysqli invece di php-mysql Laravel usa PDO. Senza pdo_mysql nessuna connessione MySQL funziona, qualunque siano le impostazioni del .env.
Aggiungere il repository Sury senza necessità Debian 13 fornisce già PHP 8.4. Un repository di terze parti aggiunge manutenzione e un monitoraggio della sicurezza separato.
apt-key è stato rimosso da Debian 12 I tutorial che lo usano falliscono. Serve un portachiavi in /etc/apt/keyrings e l'opzione signed-by.
Modificare il php.ini sbagliato Il file di cli/ e quello di fpm/ sono distinti. Per un'applicazione web contano le impostazioni di fpm/.
Dimenticare di ricaricare PHP-FPM I valori modificati nel php.ini hanno effetto solo dopo systemctl reload php8.4-fpm.
post_max_size inferiore a upload_max_filesize Un invio alla dimensione massima viene rifiutato prima di arrivare all'applicazione.
Newsletter

I nuovi test, tutorial e progetti, via e-mail.

Test riproducibili, codice versionato, risultati datati. Mai spam.