Installare PHP 7.2 su Debian Stretch

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

soltanto:
Debian 9 "stretch"

Introduzione

La versione di PHP che viene distribuita con Debian Stretch è la 7.0, che però è ufficialmente uscita di supporto nel Dicembre 2018.

Il team di sviluppo di PHP consiglia di passare alle versioni 7.2 oppure 7.3

In Debian questo può essere fatto abbastanza agevolmente, ma occorre abilitare un repository esterno.

Il Repository Sury

Il repository Sury è famoso nella comunità Debian e mantiene le versioni pacchettizzate .deb di tutte le releases di PHP. Per abilitarlo è sufficiente installare un paio di pacchetti e scaricare la chiave del repository:

# apt install apt-transport-https lsb-release ca-certificates
# wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Quindi aggiungiamo il repository nel nostro sources list:

# nano /etc/apt/sources.list
deb https://packages.sury.org/php/ stretch main

e aggiorniamo la lista dei pacchetti:

# apt update

Installazione di PHP 7.2

A questo punto siamo pronti per installare PHP 7.2.

Verifichiamo prima di tutto la versione che sta girando sulla nostra Debian:

# php -v

Quindi installiamo la nuova versione di PHP:

# apt install php7.2

Una volta installato il core di PHP possiamo verificare quali pacchetti sono presenti e installare i moduli che ci tornano comodi:

# apt search php7.2
# apt install php7.2 php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-mysql php7.2-zip php7.2-fpm php7.2-mbstring

Una lista completa dei moduli disponibili è la seguente:

php-amqp php-apcu php-apcu-bc php-gearman php-geoip php-gnupg php-igbinary php-imagick php-libsodium php-mailparse php-memcache php-memcached php-mongodb php-msgpack php-oauth php-http php-pinba php-propro php-radius php-raphf php-redis php-rrd php-smbclient php-solr php-ssh2 php-stomp php-uploadprogress php-uuid php-yaml php-zmq libapache2-mod-php7.2 libphp7.2-embed php7.2 php7.2-bcmath php7.2-bz2 php7.2-cgi php7.2-cli php7.2-common php7.2-curl php7.2-dba php7.2-dev php7.2-enchant php7.2-fpm php7.2-gd php7.2-gmp php7.2-imap php7.2-interbase php7.2-intl php7.2-json php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-odbc php7.2-opcache php7.2-pgsql php7.2-phpdbg php7.2-pspell php7.2-readline php7.2-recode php7.2-snmp php7.2-soap php7.2-sqlite3 php7.2-sybase php7.2-tidy php7.2-xml php7.2-xmlrpc php7.2-xsl php7.2-zip php-remctl php-tideways php-xdebug libapache2-mod-php7.2-dbgsym libphp7.2-embed-dbgsym php-ds php-lua php-phalcon php-sodium php7.2-bcmath-dbgsym php7.2-bz2-dbgsym php7.2-cgi-dbgsym php7.2-cli-dbgsym php7.2-common-dbgsym php7.2-curl-dbgsym php7.2-dba-dbgsym php7.2-enchant-dbgsym php7.2-fpm-dbgsym php7.2-gd-dbgsym php7.2-gmp-dbgsym php7.2-imap-dbgsym php7.2-interbase-dbgsym php7.2-intl-dbgsym php7.2-json-dbgsym php7.2-ldap-dbgsym php7.2-mbstring-dbgsym php7.2-mysql-dbgsym php7.2-odbc-dbgsym php7.2-opcache-dbgsym php7.2-pgsql-dbgsym php7.2-phpdbg-dbgsym php7.2-pspell-dbgsym php7.2-readline-dbgsym php7.2-recode-dbgsym php7.2-snmp-dbgsym php7.2-soap-dbgsym php7.2-sqlite3-dbgsym php7.2-sybase-dbgsym php7.2-tidy-dbgsym php7.2-xml-dbgsym php7.2-xmlrpc-dbgsym php7.2-zip-dbgsym php-libsodium

Abilitazione di PHP 7.2 in Apache

Come ultimo passaggio, disabilitiamo PHP 7.0 in Apache e abilitiamo il 7.2:

# a2dismod php7.0
# a2enmod php7.2
# systemctl restart apache2

Il Problema mcrypt

Il modulo mcrypt è stato incluso in PHP 5.4 fino alla versione PHP 7.1. E' stato successivamente rimosso da PHP 7.2 e spostato in un'estensione PECL non ufficiale perchè la libreria mcrypt non è più sviluppata. PHP 7.2 e successivi usano di default la libreria libsodium come libreria di crittografia.

E' però possibile che alcune applicazioni PHP abbiano ancora bisogno della libreria mcrypt; se questo è il nostro caso, occorre compilarla a mano.

Installiamo prima di tutto alcuni strumenti di compilazione:

# apt install gcc make autoconf libc-dev pkg-config
# apt install libmcrypt-dev
# pecl install --nodeps mcrypt-snapshot

Alla domanda:

libmcrypt prefix? [autodetect] :

premiamo Invio e lanciamo l'autodetect. Durante il processo di compilazione e installazione vedremo qualcosa di simile:

...
Build process completed successfully
Installing '/usr/lib/php/20170718/mcrypt.so'    ---->   this is our path to mcrypt extension lib
install ok: channel://pecl.php.net/mcrypt-1.0.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=mcrypt.so" to php.ini

Al termine, come suggerito dal processo di installazione, modifichiamo i file di configurazione di PHP 7.2 e di Apache:

# nano /etc/php/7.2/cli/php.ini
# nano /etc/php/7.2/apache2/php.ini

aggiungendo la riga:

extension=mcrypt.so

all'inizio del file, sotto la dicitura [PHP].

Infine verifichiamo il corretto funzionamento della libreria:

# php -i | grep "mcrypt"

che avrà come output:

/etc/php/7.2/cli/conf.d/mcrypt.ini
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value

phpMyAdmin

La versione di Stretch del pacchetto phpMyAdmin non è totalmente compatibile con PHP 7.2 e genera degli errori non bloccanti quando si visualizzano i record di un qualsiasi database. Per risolvere è sufficiente scaricare una versione più aggiornata di phpMyAdmin:

# wget http://ftp.ch.debian.org/debian/pool/main/p/phpmyadmin/phpmyadmin_4.6.6-5_all.deb
# dpkg -i phpmyadmin_4.6.6-5_all.deb

Il pacchetto non ha dipendenze.

Versioni diverse di PHP per diversi Virtual Host

Potrebbe capitare che ci siano alcuni siti o applicazioni che richiedono una certa versione specifica di PHP e che non possono essere passati sull'ultima versione installata.
In questo caso possiamo agire sui file di configurazione dei singoli virtual host e impostare una direttiva specifica.
Installiamo innanzitutto i moduli di collegamento tra le librerie PHP FPM e FastCGI;

# a2enmod actions fcgid alias proxy_fcgi

Quindi andiamo ad agire sui file di configurazione dei virtual host.

Virtual Host con PHP 5.6

Aggiungiamo la seguente direttiva prima della chiusura del file:

    # IMPOSTO PHP 5.6 COME PREDEFINITO
    ####################################
    <FilesMatch \.php$>
         SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
    </FilesMatch>
    # FINE IMPOSTAZIONE

</VirtualHost>

Virtual Host con PHP 7.2

Aggiungiamo la seguente direttiva prima della chiusura del file:

    # IMPOSTO PHP 7.2 COME PREDEFINITO
    ####################################
    <FilesMatch \.php$>
         SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>
    # FINE IMPOSTAZIONE

</VirtualHost>




Guida scritta da: Ferdybassi Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized