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 su Linux Ubuntu o CentOS e interfacciare il server web tramite PHP-FPM

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

nota: In questo articolo ci concentreremo, nello specifico, sull'installazione di PHP 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 17.04 (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" 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 (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 (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: i gestori di questi sistemi operativi rendono disponibili nei repository ufficiali una specifica versione di PHP: l'ultima indicata come "stabile" al momento del lancio della nuova 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 (al momento in cui scrivo, siamo alla 7.0.22) sono immediatamente 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 (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 all'interno di un proprio 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 e PHP-FPM, eseguire questo comando:

  • Ubuntu: apt-get update && export PHP_VER="7.1" && 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}-mcrypt php${PHP_VER}-zip php${PHP_VER}-mysqlnd php${PHP_VER}-curl -y
  • con CentOS: export PHP_VER="7.1" && 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-mcrypt php-zip php-mysqlnd php-curl -y

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

Nota importante: la variabile PHP_VER="7.1", valorizzata nel comando di cui sopra, fa sì che venga installato PHP 7.1.x, ovvero la versione più aggiornata disponibile al momento della pubblicazione di questo articolo. È comunque sempre bene controllare sul sito ufficiale quale sia l'ultima versione disponibile e, se supportata dalla web application che dobbiamo eseguire, scegliere quella. Scriveremo quindi PHP_VER="7.2" (per PHP 7.2.x), PHP_VER="7.3" (per PHP 7.3.x) e via dicendo.

Al momento, è ancora possibile usare anche PHP_VER="5.6" per ottenere l'obsoleto PHP 5.6.x oppure PHP_VER="7.0" per lo specifico PHP 7.0.x.

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

Passo 5: Modificare l'impostazione cgi.fix_pathinfo

PHP-FPM comprende una funzione, attivata di default tramite l'opzione cgi.fix_pathinfo, 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.1/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, il percorso per raggiungere detto file comprende la versione di PHP in uso: /etc/php/7.1/fpm/php.ini. Modificate opportunamente in caso abbiate installato PHP 7.2 o una versione successiva.

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.1/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 (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 nuovo 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.1-fpm
  • CentOS: systemctl restart php-fpm

Per Ubuntu: adeguare la stringa che rappresenta la versione (PHP 7.1, nell'esempio) a seconda della versione di PHP installata.

A questo punto. la configurazione essenziale di PHP-FPM è terminata: il servizio è attivo e pronto a rispondere alle richieste del server web!

Passo 7: Abilitare mod_proxy_fcgi

Procediamo dunque con la configurazione di Apache. Se ancora non l'avete installato, fate riferimento a questo articolo per la guida:

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

Per prima cosa, dobbiamo 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.1-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.1/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 installata (PHP 7.1, nel caso fornito ad esempio): modificate opportunamente in caso aveste installato PHP 7.2 o una versione successiva.

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

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

oppure

listen = 127.0.0.1:9000

Guida: come installare PHP 7 (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 trovi 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.1-fpm.sock|fcgi://127.0.0.1:9000/", dove /run/php/php7.1-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 (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 un cancelletto (simbolo di "commento") per disattivarla

Guida: come installare PHP 7 (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 locale (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 (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 un gestore di contenuti (CMS) come 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