Installare PHP 7.2 su Debian Stretch: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
(Creata pagina con '== 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...')
 
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Stretch}}
== Introduzione ==
== Introduzione ==
La versione di PHP che viene distribuita con Debian Stretch è la 7.0, che però è ufficialmente uscita di supporto nel Dicembre 2018.
La versione di PHP che viene distribuita con Debian Stretch è la 7.0, che però è ufficialmente uscita di supporto nel Dicembre 2018.
Riga 29: Riga 30:
# php -v
# php -v
</pre>
</pre>
Quindi installiamo la nuova versione di PHP:
<pre>
# apt install php7.2
</pre>
Una volta installato il core di PHP possiamo verificare quali pacchetti sono presenti e installare i moduli che ci tornano comodi:
<pre>
# 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
</pre>
Una lista completa dei moduli disponibili è la seguente:
<pre>
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
</pre>
== Abilitazione di PHP 7.2 in Apache ==
Come ultimo passaggio, disabilitiamo PHP 7.0 in Apache e abilitiamo il 7.2:
<pre>
# a2dismod php7.0
# a2enmod php7.2
# systemctl restart apache2
</pre>
== 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:
<pre>
# apt install gcc make autoconf libc-dev pkg-config
# apt install libmcrypt-dev
# pecl install --nodeps mcrypt-snapshot
</pre>
Alla domanda:
<pre>
libmcrypt prefix? [autodetect] :
</pre>
premiamo Invio e lanciamo l'autodetect. Durante il processo di compilazione e installazione vedremo qualcosa di simile:
<pre>
...
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
</pre>
Al termine, come suggerito dal processo di installazione, modifichiamo i file di configurazione di PHP 7.2 e di Apache:
<pre>
# nano /etc/php/7.2/cli/php.ini
</pre>
<pre>
# nano /etc/php/7.2/apache2/php.ini
</pre>
aggiungendo la riga:
<pre>
extension=mcrypt.so
</pre>
all'inizio del file, sotto la dicitura [PHP].
Infine verifichiamo il corretto funzionamento della libreria:
<pre>
# php -i | grep "mcrypt"
</pre>
che avrà come output:
<pre>
/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
</pre>
== 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:
<pre>
# 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
</pre>
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.
<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
|Autore = [[Utente:Ferdybassi|Ferdybassi]]
}}
[[Categoria:Web server]]
[[Categoria:Database server]]
[[Categoria:PHP]]

Menu di navigazione