Installare PHP 7.2 su Debian Stretch: differenze tra le versioni
Riga 114: | Riga 114: | ||
== Versioni diverse di PHP per diversi Virtual Host == | == 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. | |||
<br/> | |||
In questo caso possiamo agire sui file di configurazione dei singoli virtual host e impostare una direttiva specifica. | |||
<br/> | |||
Installiamo innanzitutto i moduli di collegamento tra le librerie PHP FPM e FastCGI; | |||
<pre> | |||
# a2enmod actions fcgid alias proxy_fcgi | |||
</pre> | |||
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: | |||
<pre> | |||
# IMPOSTO PHP 5.6 COME PREDEFINITO | |||
#################################### | |||
<FilesMatch \.php$> | |||
SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/" | |||
</FilesMatch> | |||
# FINE IMPOSTAZIONE | |||
</VirtualHost> | |||
</pre> | |||
=== Virtual Host con PHP 7.2 === | |||
Aggiungiamo la seguente direttiva prima della chiusura del file: | |||
<pre> | |||
# IMPOSTO PHP 7.2 COME PREDEFINITO | |||
#################################### | |||
<FilesMatch \.php$> | |||
SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" | |||
</FilesMatch> | |||
# FINE IMPOSTAZIONE | |||
</VirtualHost> | |||
</pre> | |||
{{Autori | {{Autori |
Versione delle 12:35, 7 gen 2019
Versioni Compatibili 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 | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |