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.

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM)

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

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM) - linux apri terminale

» 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

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM)

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: apt update && apt install software-properties-common -y && 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

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM)

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

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM)

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

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM) - 04_php-v_installed

Passo 7: Modificare l'impostazione cgi.fix_pathinfo

Questa impostazione è incompatibile con Prestashop (grazie Alice per la segnalazione).

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:

» Leggi: Guida: modificare i file di configurazione di Linux Ubuntu/CentOS da terminale è facile con "nano" (alternativa a "vi")

Modificare dunque la riga che recita:

;cgi.fix_pathinfo=1

Bisogna rimuovere il ; iniziale e portare il valore a 0:

cgi.fix_pathinfo=0

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM) - fix_pathinfo-secured

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

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM)

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:

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: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM)

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

Guida: come installare PHP 8 Linux Ubuntu CentOS (PHP-FPM)

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:

» Leggi: Installare e configurare un server web: La Grande Guida ad Apache, MySQL, PHP su Windows e Linux in modo facile