Installare PHP su Linux Ubuntu/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 5.6) oppure configurare il sistema con il vetusto mod_php al posto del più moderno ed efficiente PHP-FPM. Vediamo allora come installare PHP 7.3 su Linux Ubuntu o CentOS e interfacciare il server web tramite PHP-FPM

Trattazione aggiornata a PHP 7.3

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

nota: In questo articolo ci concentreremo, nello specifico, sull'installazione di PHP 7.3 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 18.10 (64 bit) e CentOS 7.3 (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 7.3 (PHP-FPM) Linux (Ubuntu/CentOS) - 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 il vostro 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 7.3 (PHP-FPM) Linux (Ubuntu/CentOS)

In caso contrario, è fondamentale disinstallare il pacchetto corrente:

  • Disinstallare PHP con Ubuntu: apt-get purge --auto-remove php* -y
  • Disinstallare PHP con CentOS: yum remove php* -y

Passo 2: 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 incompatibilità che verrebbero sicuramente a crearsi fra le applicazioni web pre-esistenti ed eventuali 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 PHP 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, eseguire questi comandi per "agganciare" queste fonti aggiuntive al sistema:

  • Ubuntu: LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php -y
  • CentOS: yum clean all && yum install epel-release yum-utils -y && curl -O http://rpms.remirepo.net/enterprise/remi-release-7.rpm && rpm -Uvh remi-release-7.rpm

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

Passo 3: Installare PHP 7 e PHP-FPM su Linux

Fino ad ora abbiamo "agganciato" i repository esterni che offrono le versioni aggiornate di PHP 7 per Linux. Procediamo ora ad installare PHP 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 7.3 e PHP-FPM, eseguire questo comando:

  • Ubuntu: apt-get update && export PHP_VER="7.3" && apt-get 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}-mysql php${PHP_VER}-zip php${PHP_VER}-mysqlnd php${PHP_VER}-curl -y
  • con CentOS: export PHP_VER="7.3" && export PHP_VER=${PHP_VER//[-._]/} && yum-config-manager --enable remi-php${PHP_VER} && yum install php php-fpm php-cli php-common php-mbstring php-gd php-intl php-xml php-mysql php-zip php-mysqlnd php-curl -y

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

Nota importante: la variabile PHP_VER="7.3", valorizzata nel comando di cui sopra, fa sì che venga installato PHP 7.3.xx, ovvero la versione più aggiornata del ramo "7.3" 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"

Si noti che il supporto a PHP 5.6 e PHP 7.0 è definitivamente terminato a Dicembre 2018 (non usciranno nuove versioni, nemmeno per correggere problemi di sicurezza). È sempre bene tenere d'occhio questa pagina per conoscere lo stato del supporto delle varie versioni.

Passo 4: 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 7.3 (PHP-FPM) Linux (Ubuntu/CentOS) - 04_php-v_installed

Passo 5: 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 modificando il file di configurazione con questo semplice comando:

  • Ubuntu: sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.3/fpm/php.ini
  • CentOS: sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php.ini

Da notare che l'ultimo argomento è il percorso del file di configurazione di PHP-FPM. Su Ubuntu (ma non CentOS) detto percorso comprende il nome di una cartella che porta il nome della versione di PHP in uso (/etc/php/7.3/). Adattatelo opportunamente in caso abbiate installato il vecchio PHP 5.6 o una versione differente da quella sulla quale si concentra questa guida.

In alternativa, potete svolgere la stessa modifica tramite un editor di testo. Aprire il file di configurazione di PHP-FPM con:

  • Ubuntu: nano /etc/php/7.3/fpm/php.ini
  • CentOS: 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 7.3 (PHP-FPM) Linux (Ubuntu/CentOS) - 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 6: 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: systemctl restart php7.3-fpm
  • CentOS: 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-FPM è terminata: il servizio è già attivo e pronto a rispondere alle richieste del server web!

Passo 7: Abilitare mod_proxy_fcgi

Procediamo dunque con la configurazione di Apache HTTP Server (chiamiamolo impropriamente solo Apache, per brevità). Se ancora non l'avete installato, fate riferimento a questa guida dedicata:

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

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

Una volta che Apache è pronto, procediamo ad abilitare proxy_fcgi: è il modulo di Apache che utilizzeremo per interfacciare il server web con PHP-FPM. Il comando è:

  • Ubuntu: a2enmod proxy_fcgi
  • CentOS: nulla da fare (è già attivo di default)

Passo 8: Scoprire il socket di PHP-FPM

Dobbiamo ora scoprire quale sia il socket di PHP-FPM, ovvero "a cosa" Apache debba connettersi 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/php7.3-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, Apache 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: cat /etc/php/7.3/fpm/pool.d/www.conf | grep 'listen ='
  • CentOS: 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 is uso: modificate opportunamente.

Il comando appena impartito legge il parametro di configurazione e mostra qualcosa di simile a:

listen = /run/php/php7.3-fpm.sock

oppure

listen = 127.0.0.1:9000

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

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 9: Scaricare apache_php-proxy-fCgi.conf

Dobbiamo ora configurare il server web di modo che, concretamente, si connetta al socket di PHP-FPM per interpretare le pagine PHP.

Scarichiamo dunque il file di configurazione per Apache già parzialmente preparato. Il comando è:

  • Ubuntu: curl https://turbolab.it/scarica/169 -o /etc/apache2/mods-enabled/php-proxy-fcgi.conf
  • CentOS: rm -f /etc/httpd/conf.modules.d/*php*.conf && curl https://turbolab.it/scarica/169 -o /etc/httpd/conf.modules.d/php-proxy-fcgi.conf

Poiché abbiamo salvato il file di configurazione nella cartella specifica, Apache lo auto-caricherà insieme agli altri ad ogni avvio del servizio.

Passo 10: Specificare il percorso del socket

Dobbiamo ora immettere il percorso del socket, quello scoperto al Passo 8, all'interno del file scaricato al Passo 9. Apriamolo dunque con l'editor:

  • Ubuntu: nano /etc/apache2/mods-enabled/php-proxy-fcgi.conf
  • CentOS: nano /etc/httpd/conf.modules.d/php-proxy-fcgi.conf

Notiamo la riga che inizia con la direttiva SetHandler: è proprio qui che dobbiamo specificare dove si trova il socket di PHP-FPM. Come unica accortezza, notiamo che il formato cambia leggermente a seconda che si stia usando un file su disco oppure una porta TCP (vedi Passo 8).

  • File su disco: inserire il percorso del socket dopo il prefisso proxy:unix:. Mantenere inalterato tutto il resto. Esempio: SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://127.0.0.1:9000/", dove /run/php/php7.3-fpm.sock è il percorso del socket scoperto al Passo 8
  • Indirizzo IP e porta: inserire l'indirizzo IP ed il numero di porta dopo il prefisso proxy:fcgi://. Esempio: SetHandler "proxy:fcgi://127.0.0.1:9000/", dove 127.0.0.1:9000 sono l'indirizzo IP e la porta scoperti al Passo 8

Notate che, in entrambi i casi, è presente una barra (/) come ultimo carattere

Guida: come installare PHP 7.3 (PHP-FPM) Linux (Ubuntu/CentOS) - apache_proxy_socket

Salvate il documento e chiudere l'editor.

Passo 11: Rimuovere DirectoryIndex

Dobbiamo infine apportare una modifica alla direttiva DirectoryIndex di Apache, che stabilisce quale file restituire quando l'utente richiede via browser una directory oppure il dominio del nostro sito senza indicare un file specifico (http://miosito.com). Di default, Apache restituisce index.html, ma per generare dinamicamente la pagina "home" con PHP dobbiamo usare index.php.

Il file di configurazione modificato al Passo 10 include già la direttiva configurata in modo opportuno, ma per renderla effettiva dobbiamo disattivare il default di Apache tramite questo comando:

  • Ubuntu: sed -i -e 's/DirectoryIndex/#DirectoryIndex/g' /etc/apache2/mods-available/dir.conf
  • CentOS: sed -i -e 's/DirectoryIndex/#DirectoryIndex/g' /etc/httpd/conf/httpd.conf

In alternativa, potete svolgere la stessa modifica tramite un editor di testo. Aprire il file di configurazione, cercate la direttiva DirectoryIndex index.html e anteponetevi # (il "cancelletto", simbolo di "commento") per disattivarla

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

Salvare e chiudere l'editor.

Passo 12: Riavviare Apache

Procediamo ora a riavviare Apache per rendere effettive le modifiche. Il comando è:

  • Ubuntu: systemctl restart apache2
  • CentOS: systemctl restart httpd

Passo 13: index.php

Se già non l'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.

» Leggi anche: Guida a zip e unzip per Linux: come zippare (comprimere) e unzippare (estrarre) archivi .zip da linea di comando con Ubuntu e CentOS

Passo 14: 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 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 7.3 (PHP-FPM) Linux (Ubuntu/CentOS)

Se lo spazio dopo la "freccia" rimane bianco, invece, c'è qualcosa che non va. La primissima cosa da fare è assicurasi di aver riavviato Apache, 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