Ultimo aggiornamento: 25 marzo 2024

Questa pagina descrive come attivare due versioni diverse di php-fpm nello stesso ambiente.
Ad esempio, php-fpm è già attivo con la versione php-5.5.x, andremo ad attivare
la versione 5.6.X con una sessione dedicata. Questa guida può essere seguita anche per
attivare la versione 7.4.X.

Compiliamo la versione php 5.6 (nell'esempio ho omesso parametri standard per comodità).
Ho scelto di installare i file utili a questa versione secondaria di php in questa
directory: /usr/local/lib-5.6/

$ cd php-5.6.15/
$ ./configure --enable-fpm --with-config-file-path=/usr/local/lib-5.6/
$ make

Installiamo il binario fpm in /usr/local/sbin con un nome diverso da quello già in produzione
$ cp -p php-5.6.x/sapi/fpm/php-fpm /usr/local/sbin/__php-fpm.5.6
$ cp -p php-5.6.x/cli/php /usr/local/bin/php-5.6.x


Lo script chiamato php-config con il nome della nuova versione ci permetterà di individuare la versione nuova delle API.

$ cp -p php-5.6.x/scripts/php-config /usr/local/bin/php-config-5.6
$ chmod +x /usr/local/bin/php-config-5.6

Copiamo anche la directory /usr/local/lib dove è presente il file php.ini con un nuovo nome,
in questo modo potremo sempre fare delle modifiche dedicate alla nostra installazione.

$ mkdir /usr/local/lib-5.6
$ cp -p /usr/local/lib/php.ini /usr/local/lib-5.6/

Copia dei file di supporto php
ATTENZIONE: solo per passaggio che mantiene la stessa sotto versione (esempio: 7.1 a 7.4), lanciare questo comando
di copia:
$ cp -pr /usr/local/lib/php /usr/local/lib-5.6/

In caso di passaggio di versione maggiore (esempio 5.x a 7.x), copiare la directory /usr/local/lib/php (dove si trova il file PEAR.php)
della nuova versione già compilata, in un'ambiente php (con identica versione), nella directory di destinazione nuova versione,
esempio /usr/local/lib-7.X/php.
Fine copia dei file di supporto php


Preparazione del file /etc/init.d/php5.6-fpm
Con la distribuzione di php viene inserito nell'archivio un file ad installare nella directory
/etc/init.d/, chiamato php-fpm.

Considerando che questo file è già in uso, copiamo esso con un nuovo nome,

$ cp -p /etc/init.d/php-fpm /etc/init.d/php-5.6-fpm

Editeremo poi queste variabili che si trovano nelle prime righe dello script

php_fpm_BIN=${exec_prefix}/sbin/__php-fpm.5.6
php_fpm_CONF=${prefix}/etc/php-fpm-5.6.conf
php_fpm_PID=${prefix}/var/run/php-fpm-5.6.pid

Per il file di configurazione fpm ( generalmente posizionato in /usr/local/etc/ ),
creiamo una nuova copia e procediamo con la configurazione di esso.

$ cp -p php-fpm.conf php-fpm-5.6.conf

Creiamo per prima cosa e per sicurezza un pool generale dedicato ( nome www.5.6 )
; Start a new pool named ’www’.
; the variable $pool can we used in any directive and will be replaced by the
; pool name (’www’ here)
[www5.6]

Anche le porta di ascolto del servizio di default dovrà essere cambiata, rispetto
a quella già in uso.

listen = 127.0.0.1:9500

Se usiamo una directory dove ci sono altre configurazioni di tipo ”pool”, è necessario dichiararla
( il nome dovrà essere ovviamente diverso da quella usata per php 5.5 ).

include=/usr/local/etc/pool.d-5.6/*.conf

Copiamo i file header della versione 5.6, in una cartella temporanea.

$ mkdir /usr/local/include/php-5.6/
$ cd php-5.6.15/
$ cp -pr main/ /usr/local/include/php-5.6/
$ cp -pr Zend/ /usr/local/include/php-5.6/
$ cp -pr sapi/ /usr/local/include/php-5.6/
$ cp -pr ext/ /usr/local/include/php-5.6/
$ cp -pr include/ /usr/local/include/php-5.6/
$ cp -pr TSRM /usr/local/include/php-5.6/

I moduli compilati con le versione API di php 5.5 non potranno essere usati con le versioni 5.6.
Dobbiamo quindi compilarli ”inviando” alle configurazioni dello script ’configure’ del modulo,
le versioni API della versione 5.6.
Per farlo, temporaneamente sostituiremo la cartella php con gli header, in /usr/local/include con
quella contenente la versione 5.6.

$ mv /usr/local/include/php /usr/local/include/__php_5.5
$ mv /usr/local/include/php-5.6/ /usr/local/include/php


Copiamo il file phpize dal sorgente compilato poco fa,
$ cp -p scripts/phpize /usr/local/bin/phpize-5.6

Prima di usare phpize-5.6 editiamo lo stesso file ed editiamo questa variabile.
Dovremo specificare la posizione dei file php contenuti nella directory /usr/local/lib-5.6/php

phpdir="`eval echo ${exec_prefix}/lib-5.6/php`/build"

Esempio di compilazione modulo (memcache) con le nuove API di php 5.6

$ cd memcache-2.2.4
$ /usr/local/bin/phpize-5.6 $ ./configure --with-php-config=/usr/local/bin/php-config-5.6
$ make

Copiamo ora il modulo
$ cp -p modules/memcache.so /usr/local/lib-5.6/php/extensions/

Editiamo il file di configurazioni php ’/usr/local/lib-5.6/php.ini’
( perchè è il file che verrà letto dal binario fpm __php-fpm.5.6
( posizionato in /usr/local/sbin/ ).
Specifichiamo la posizione del modulo memcache

extension=/usr/local/lib-5.6/php/extensions/memcache.so

Lo script di php 5.6 può essere avviato,

$ /etc/init.d/php5.6-fpm start

Se le nostre configurazioni saranno corrette, la porta 9500 (o quella che avete specificato)
sarà attiva e pronta alle richieste proxy. Inoltre non dovranno comparire all’avvio, altri errori
sulle versioni delle API.
Il file contenente il pid del nostro processo fpm di php 5.6 sarà registrato con questo nome,
/usr/local/var/run/php-fpm-5.6.pid

Nota per PHP versione 7.X
modulo MEMCACHED (compilare versione più aggiornata) disponibile in questo spazio GitHub

Compilazione:
$ phpize
$ ./configure
$ make

Copia del modulo:
$ cp -p memcached.so /usr/local/lib-7.4/php/extensions/no-debug-non-zts-20190902/

Specificare poi nel file php.ini queste due direttive:
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"




back