Installare PHP su Linux Ubuntu o CentOS è piuttosto semplice, poiché i pacchetti sono sempre disponibili sui repository ufficiali della nostra distribuzione. Ma, attenzione! Senza qualche accortezza in più, rischiamo di ottenere una vecchia versione (come l'obsoleto PHP 7) oppure configurare il sistema con il vetusto mod_php al posto del più moderno ed efficiente PHP-FPM. Vediamo allora come installare PHP 8 su Linux Ubuntu o CentOS e interfacciare il server web tramite PHP-FPM
Trattazione aggiornata a PHP 8 e ri-verificata per funzionare al meglio sulle distribuzioni moderne di Ubuntu e CentOS.
nota: In questo articolo ci concentreremo, nello specifico, sull'installazione di PHP 8 su Linux (le distribuzioni Ubuntu e CentOS, in particolare). Per la guida equivalente incentrata su Windows:
» Leggi: La Grande Guida ad Apache, MySQL, PHP
La procedura è stata testata con Ubuntu 20.04 LTS (64 bit) e CentOS 8 (64 bit), ma è analoga per tutte le distribuzioni da esse derivate e, presumibilmente, per le iterazioni successive.
Passo 1: Aprire il terminale
Se state lavorando via SSH oppure con una edizione spiccatamente "server" (come Ubuntu Server), siete già davanti alla linea di comando, quindi andate oltre.
Se però state impiegando l'edizione "regolare" di Ubuntu per PC, cliccate sul pulsante con i 3x3 punti in basso a sinistra e cercate terminale
per lanciare rapidamente l'omonima applicazione
» Leggi anche: Come aprire il terminale di Ubuntu
Passo 2: Diventare root
Dovete ora acquisire i privilegi massimi diventando root. Il comando è:
sudo -s
In caso dovesse esservi richiesta la password, digitate quella dell'account corrente.
» Leggi anche: Linux (Ubuntu) e sudo: come disabilitare la richiesta di password quando si eseguono comandi come root
In alternativa, potete utilizzare l'utente corrente ed anteporre sudo
ad ogni comando mostrato di seguito.... ma divenire immediatamente root è molto più comodo.
Passo 3: Disinstallare... PHP?
Prima di iniziare, è opportuno verificare che PHP non sia già stato installato, magari per errore.
Il modo più rapido di farlo è impartendo php -v
: se viene visualizzato un errore simile ad uno di quelli riportati di seguito, possiamo tranquillamente andare oltre perché PHP non è installato:
Il programma "php" non è attualmente installato
Il programma "php" può essere trovato nei seguenti pacchetti
bash: php: command not found
In caso contrario, è fondamentale disinstallare il pacchetto corrente:
- Disinstallare PHP con Ubuntu 20.04:
apt-get autoremove --purge php*
- Disinstallare PHP con CentOS 8:
yum remove php* -y
Raccomando caldamente anche di eliminare eventuali file di configurazione relativi alla precedente installazione, di modo da partire con una situazione pulita:
rm -rf /etc/php
Passo 4: Aggiungere i repository di PHP
Prima di procedere con l'installazione, è bene chiarire una dinamica importante delle distribuzioni Linux come Ubuntu e CentOS. Le aziende che ne sovraintendono lo sviluppo rendono disponibile nei repository ufficiali una specifica versione di PHP: l'ultima indicata come "stabile" al momento del lancio di ogni versione del sistema operativo. Da lì, non si avanza mai: ecco dunque che le vecchie generazioni, nate ai tempi di PHP 5.6, ricevevano aggiornamenti solo per il ramo PHP 5.6.x, senza mai offrire PHP 7.0 o successivi. Lo stesso dicasi per quelle che hanno debuttato nel periodo di PHP 7.0: gli update minori (7.0.xx) sono immediatamente pubblicati e disponibili, ma PHP 7.1, PHP 7.2 e successivi rimangono off-limit.
Questo approccio è assolutamente condivisibile: consente infatti di prevenire le numerose incompatibilità che si presentano fra le applicazioni web pre-esistenti e le nuove versioni "principali" di PHP. Il rovescio della medaglia è che, in caso la nostra webapp sia perfettamente aggiornata e compatibile con le ultime versioni di PHP, ci ritroviamo a farla girare con un interprete vecchio di mesi o anni.
Come ovviare, dunque? Semplice: basta evitare i repository ufficiali e installare le nuove versioni di PHP da quelli di terze parti. In concreto: procediamo ad eseguire questi comandi per "agganciare" le fonti aggiuntive al sistema:
- Ubuntu 20.04:
LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php -y
- CentOS 8:
yum clean all && yum install epel-release yum-utils -y && dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y && dnf module reset php
Passo 5: Installare PHP 8 e PHP-FPM su Linux
Fino ad ora abbiamo "agganciato" i repository esterni che offrono le versioni aggiornate di PHP 8 per Linux. Procediamo ora ad installare PHP 8 e PHP-FPM (FastCGI Process Manager): una modalità nella quale PHP viene eseguito come servizio indipendente, ed il server web vi si interfaccia tramite il protocollo FastCGI. Questa modalità è leggermente più complessa da installare, ma garantisce stratosferici benefici in termini di memoria consumata, scalabilità (diviene possibile eseguire il server web su un server e PHP-FPM su di un altro) e molto altro ancora.
Per installare PHP 8 e PHP-FPM, eseguire questo comando:
- Ubuntu 20.04:
apt update && export PHP_VER="8.0" && apt install php${PHP_VER} php${PHP_VER}-fpm php${PHP_VER}-cli php${PHP_VER}-common php${PHP_VER}-mbstring php${PHP_VER}-gd php${PHP_VER}-intl php${PHP_VER}-xml php${PHP_VER}-zip php${PHP_VER}-mysqlnd php${PHP_VER}-curl -y
- con CentOS 8:
export PHP_VER="8.0" && dnf module install php:remi-${PHP_VER} -y && dnf install php-gd php-intl php-xml php-zip php-mysqlnd php-curl -y
Nota importante: la variabile PHP_VER="8.0"
, valorizzata nel comando di cui sopra, fa sì che venga installato PHP 8.0.xx, ovvero la versione più aggiornata del ramo "8.0" disponibile al momento della pubblicazione di questo articolo.
Chi desiderasse ottenere una versione precedente, può generalmente usare:
PHP_VER="5.6"
PHP_VER="7.0"
PHP_VER="7.1"
PHP_VER="7.2"
PHP_VER="7.3"
PHP_VER="7.4"
Si noti che il supporto a PHP 7.2 e versioni precedenti è definitivamente terminato: questo significa che non usciranno nuove versioni, nemmeno in caso si rendessero necessarie per correggere problemi di sicurezza. È sempre bene tenere d'occhio questa pagina per conoscere lo stato del supporto delle varie versioni.
Passo 6: Testare l'installazione dei pacchetti PHP
Una volta che l'operazione è conclusa, verificate che l'installazione sia andata a buon fine impartendo nuovamente php -v
: questa volta, verrà visualizza la versione di PHP appena installata
Passo 7: Modificare l'impostazione cgi.fix_pathinfo
PHP-FPM comprende una funzione, attiva di default, che lo rende maggiormente compatibile con il protocollo FastCGI. Per la massima sicurezza, è però raccomandabile (fonte1, fonte2, fonte3) disabilitare cgi.fix_pathinfo
. Per farlo nel modo ottimale, evitando conflitti contestualmente ai prossimi aggiornamenti, scarichiamo un file di configurazione dedicato nella cartella preposta:
- Ubuntu 20.04:
apt install curl -y && curl -L -o /etc/php/8.0/fpm/conf.d/99-no-cgi.fix_pathinfo.ini https://turbolab.it/scarica/356
- CentOS 8:
yum install curl -y && curl -L -o /etc/php.d/99-no-cgi.fix_pathinfo.ini https://turbolab.it/scarica/356
Da notare che, su Ubuntu (ma non CentOS), il percorso della directory comprende la versione di PHP in uso (nel comando sopra, è /etc/php/8.0/...
). Adattatelo opportunamente in caso abbiate scelto una versione differente da quella sulla quale si concentra questa guida.
Come alternativa sub-ottimale, potete svolgere la stessa modifica al file di configurazione principale, php.ini
, tramite un editor di testo. Aprire il file di configurazione di PHP-FPM con:
- Ubuntu 20.04:
nano /etc/php/8.0/fpm/php.ini
- CentOS 8:
nano /etc/php.ini
In caso riceveste un errore inerente la mancanza del pacchetto nano
:
Modificare dunque la riga che recita:
;cgi.fix_pathinfo=1
Bisogna rimuovere il ;
iniziale e portare il valore a 0
:
cgi.fix_pathinfo=0
Chiudere con la combinazione da tastiera Ctrl+X
, confermare l'intenzione di salvare e battere Invio
per usare il nome di file corrente.
Passo 8: Riavviare il servizio php-fpm
Una volta installato in "modalità FPM", PHP viene eseguito all'interno di un proprio servizio indipendente dal server web. Ad ogni modifica della sua configurazione (come quella che abbiamo appena apportato) è dunque necessario riavviarlo tramite:
- Ubuntu 20.04:
systemctl restart php8.0-fpm
- CentOS 8:
systemctl restart php-fpm
Per Ubuntu: adeguare la stringa che per rispecchiare la versione di PHP installata.
A questo punto, la configurazione essenziale di PHP 8 è terminata: il servizio è già attivo e pronto a rispondere alle richieste del server web!
Passo 9: Scoprire il socket di PHP-FPM
Dobbiamo ora scoprire quale sia il socket di PHP-FPM, ovvero "a cosa" debba connettersi il server web per interfacciarsi con PHP-FPM. Ci sono sostanzialmente due opzioni:
- File su disco: PHP-FPM accetta la connessione tramite un file, come ad esempio
/run/php/php8.0-fpm.sock
- Indirizzo IP e porta: PHP-FPM rimane in attesa di connessioni tramite una porta TCP, come ad esempio
127.0.0.1:9000
» Leggi anche: Porta 80 aperta! cosa significa? Guida riepilogativa ai principali numeri di porta TCP per la comunicazione in rete
La prima modalità è leggermente più veloce, ma funziona solo quando il server web e PHP-FPM risiedono sullo stesso sistema. La seconda è invece necessaria se, per suddividere il carico, il server web gira su di un server e PHP-FPM su di un altro.
Per scoprire quale sia il socket in uso, leggiamo questa informazione dall'altro file di configurazione di PHP-FPM. Il comando da impartire è:
- Ubuntu 20.04:
cat /etc/php/8.0/fpm/pool.d/www.conf | grep 'listen ='
- CentOS 8:
cat /etc/php-fpm.d/www.conf | grep 'listen ='
Solo per Ubuntu: da notare che il percorso del file di configurazione di PHP-FPM fa riferimento alla versione di PHP in uso: se avete scelto una versione diversa da quella consigliata, modificate il percorso di conseguenza.
Il comando appena impartito restituisce un messaggio simile a:
listen = /run/php/php8.0-fpm.sock
oppure
listen = /run/php-fpm/www.sock
oppure
listen = 127.0.0.1:9000
Naturalmente possiamo recuperare questa informazione anche aprendo manualmente il file di configurazione per poi cercare il valore dell'opzione listen
all'interno dello stesso.
Passo 10: Configurare Apache o Nginx
Armati di questa informazione-chiave riguardante il socket, procediamo a configurare il webserver affinché comunichi con il nostro PHP-FPM. La procedura varia a seconda che si stia usando Apache o Nginx, ma le abbiamo documentate entrambe:
- Configurare Apache e PHP: Guida Apache e PHP
- Configurare Nginx e PHP: Guida Nginx e PHP
Passo 11: index.php
Se già non l'avete fatto quando avete fatto, scaricate il pacchetto HTML e PHP di esempio:
» Download: File index per test web server
Scompattatelo nella cartella che contiene il vostro sito e otterrete il file index.php
di test.
Fare riferimento alle rispettive guida per maggiori informazioni e la procedura passo passo:
- Guida Apache: Guida server web: come installare Apache su Linux Ubuntu/CentOS
- Guida Nginx: Guida Nginx Ubuntu e CentOS: come installare e configurare Nginx su Linux
Passo 12: Test di PHP
Tutto è pronto: apriamo il browser web e digitiamo l'URL del nostro sito (http://localhost, ad esempio) per visitare il sito in esecuzione sul PC stesso. Se stiamo lavorando unicamente da linea di comando, possiamo simulare lo stesso comportamento impartendo
curl http://localhost
Se tutto funziona correttamente, vedrete la pagina di test. Notate la data mostrata a centro pagina: se viene visualizzata correttamente, significa che PHP sta funzionando ed avete concluso
Se lo spazio dopo la "freccia" rimane bianco, invece, c'è qualcosa che non va. La primissima cosa da fare è assicurasi di aver riavviato il servizio di Apache o Nginx, quindi ripercorrere i vari Passi di questo articolo fino ad individuare l'errore.
Cosa fare ora?
Arrivati a questo punto, PHP è installato e funzionante in ambiente Linux. Probabilmente, però, vorremo installare anche un database come MySQL, indispensabile per eseguire WordPress o pressoché qualsiasi altra cosa. Per il resto della guida: