{"id":2337,"date":"2025-02-19T16:08:02","date_gmt":"2025-02-19T14:08:02","guid":{"rendered":"http:\/\/www.sfsoft.it\/blog\/?p=2337"},"modified":"2025-02-20T17:03:47","modified_gmt":"2025-02-20T15:03:47","slug":"creare-un-lamp-multi-php-su-debian-12","status":"publish","type":"post","link":"http:\/\/www.sfsoft.it\/blog\/2025\/02\/19\/creare-un-lamp-multi-php-su-debian-12\/","title":{"rendered":"Creare un LAMP Multi-PHP su Debian 12"},"content":{"rendered":"\n<p>Creiamo un ambiente LAMP di test che supporti il Multi-PHP, ovvero la possibilit\u00e0 di impostare una determinata versione di PHP.<\/p>\n\n\n\n<p>Partiamo da un LAMP base basato su Debian 12 presupponendo che l&#8217;infrastruttura Apache+MySQL+PHP sia gi\u00e0 installata.<\/p>\n\n\n\n<p>Installiamo i requisiti se mancano:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt -y install lsb-release apt-transport-https ca-certificates<\/code><\/pre>\n\n\n\n<p>Applichiamo la chiave GPG di SURY e aggiorniamo all&#8217;ultima versione di PHP (la 8.4 al momento che scrivo):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget -O \/etc\/apt\/trusted.gpg.d\/php.gpg https:\/\/packages.sury.org\/php\/apt.gpg\necho \"deb https:\/\/packages.sury.org\/php\/ $(lsb_release -sc) main\" | sudo tee \/etc\/apt\/sources.list.d\/php.list\nsudo apt update -y\nsudo apt dist-upgrade -y<\/code><\/pre>\n\n\n\n<p>Per vedere le versioni disponibili vedere sul repo: <a rel=\"noreferrer noopener\" href=\"https:\/\/packages.sury.org\/php\/pool\/main\/p\/\" target=\"_blank\">https:\/\/packages.sury.org\/php\/pool\/main\/p\/<\/a> oppure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-cache showpkg php<\/code><\/pre>\n\n\n\n<p>Controlliamo le versioni installate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo update-alternatives --list php<\/code><\/pre>\n\n\n\n<p>Installiamo tutte le versioni che vogliamo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y php8.4 php8.4-mysql php8.4-xdebug php8.4-curl php8.4-gd php8.4-bcmath php8.4-xml php8.4-mbstring\nsudo apt install -y php8.3 php8.3-mysql php8.3-xdebug php8.3-curl php8.3-gd php8.3-bcmath php8.3-xml php8.3-mbstring\nsudo apt install -y php8.2 php8.2-mysql php8.2-xdebug php8.2-curl php8.2-gd php8.2-bcmath php8.2-xml php8.2-mbstring\nsudo apt install -y php8.1 php8.1-mysql php8.1-xdebug php8.1-curl php8.1-gd php8.1-bcmath php8.1-xml php8.1-mbstring\nsudo apt install -y php8.0 php8.0-mysql php8.0-xdebug php8.0-curl php8.0-gd php8.0-bcmath php8.0-xml php8.0-mbstring\nsudo apt install -y php7.4 php7.4-mysql php7.4-xdebug php7.4-curl php7.4-gd php7.4-bcmath php7.4-json php7.4-xml php7.4-mbstring\nsudo apt install -y php7.3 php7.3-mysql php7.3-xdebug php7.3-curl php7.3-gd php7.3-bcmath php7.3-json php7.3-xml php7.3-mbstring\nsudo apt install -y php7.2 php7.2-mysql php7.2-xdebug php7.2-curl php7.2-gd php7.2-bcmath php7.2-json php7.2-xml php7.2-mbstring\nsudo apt install -y php7.1 php7.1-mysql php7.1-xdebug php7.1-curl php7.1-gd php7.1-bcmath php7.1-json php7.1-xml php7.1-mbstring\nsudo apt install -y php7.0 php7.0-mysql php7.0-xdebug php7.0-curl php7.0-gd php7.0-bcmath php7.0-json php7.0-xml php7.0-mbstring\nsudo apt install -y php5.6 php5.6-mysql php5.6-xdebug php5.6-curl php5.6-gd php5.6-bcmath php5.6-json php5.6-xml php5.6-mbstring<\/code><\/pre>\n\n\n\n<p>Per impostare come predefinita una versione specifica:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo update-alternatives --set php \/usr\/bin\/php7.4<\/code><\/pre>\n\n\n\n<p>Installiamo il gestore PHP-FPM (FastCGI Process Manager):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y php-fpm\nsudo apt install -y php8.4-fpm\nsudo apt install -y php8.3-fpm\nsudo apt install -y php8.2-fpm\nsudo apt install -y php8.1-fpm\nsudo apt install -y php8.0-fpm\nsudo apt install -y php7.4-fpm\nsudo apt install -y php7.3-fpm\nsudo apt install -y php7.2-fpm\nsudo apt install -y php7.1-fpm\nsudo apt install -y php7.0-fpm\nsudo apt install -y php5.6-fpm<\/code><\/pre>\n\n\n\n<p>Verificare che i servizi php*.*-fpm siano attivi e configurati per essere avviati al reboot.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status php8.4-fpm\n...\nsystemctl status php5.6-fpm<\/code><\/pre>\n\n\n\n<p>Abilitare le configurazioni per Apache:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo a2enconf php8.4-fpm\nsudo a2enconf php8.3-fpm\nsudo a2enconf php8.2-fpm\nsudo a2enconf php8.1-fpm\nsudo a2enconf php8.0-fpm\nsudo a2enconf php7.4-fpm\nsudo a2enconf php7.3-fpm\nsudo a2enconf php7.2-fpm\nsudo a2enconf php7.1-fpm\nsudo a2enconf php7.0-fpm\nsudo a2enconf php5.6-fpm\nsudo systemctl restart apache2<\/code><\/pre>\n\n\n\n<p>Abilitare i moduli per Apache:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo a2enmod proxy proxy_fcgi rewrite\nsudo systemctl restart apache2<\/code><\/pre>\n\n\n\n<p>Creare una struttura base per testare il multiphp:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir \/var\/www\/multiphp.loc\nmkdir \/var\/www\/multiphp.loc\/php84\n...\nmkdir \/var\/www\/multiphp.loc\/php56<\/code><\/pre>\n\n\n\n<p>Creare dentro ogni singola cartella il file di test index.php:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nphpinfo();<\/code><\/pre>\n\n\n\n<p>Creare un host virtuale per testare le versioni:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/apache2\/sites-available\/multiphp.loc.conf<\/code><\/pre>\n\n\n\n<p>Aggiungere:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:80&gt;\n    DocumentRoot \/var\/www\/multiphp.loc\n\n    &lt;Directory \/var\/www\/multiphp.loc&gt;\n        Options Indexes FollowSymLinks\n        AllowOverride None\n        Require all granted\n    &lt;\/Directory&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php84\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php8.4-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php83\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php8.3-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php82\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php8.2-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php81\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php8.1-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php80\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php8.0-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php74\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php7.4-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php73\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php7.3-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php72\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php7.2-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php71\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php7.1-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php70\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php7.0-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;\n\n    &lt;DirectoryMatch \"^\/var\/www\/multiphp.loc\/php56\/\"&gt;\n        &lt;FilesMatch \"\\.php$\"&gt;\n            SetHandler \"proxy:unix:\/run\/php\/php5.6-fpm.sock|fcgi:\/\/localhost\"\n        &lt;\/FilesMatch&gt;\n    &lt;\/DirectoryMatch&gt;    \n\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n\n\n\n<p>Ho usato in accoppiata le direttive DirectoryMatch e FilesMatch per limitare l&#8217;azione di PHP-FPM solo ai file php e nelle rispettive cartelle\/versioni distinguendole.<\/p>\n\n\n\n<p>Nelle prime versioni usando Location avevo il problema che PHP-FPM gestiva tutti i tipi di file e li corrompeva tipo i CSS che venivano identificati come text\/html invece che text\/css e venivano bloccati.<\/p>\n\n\n\n<p>Abilitare l&#8217;host virtuale:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo a2ensite multiphp.loc.conf<\/code><\/pre>\n\n\n\n<p>Ricaricare le modifiche:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl reload apache2<\/code><\/pre>\n\n\n\n<p>Aggiungere nel proprio file hosts il virtualhost e poi aprirlo dal browser e testare che le versioni siano diverse:<\/p>\n\n\n\n<p><a href=\"http:\/\/multiphp.loc\/php84\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/multiphp.loc\/php84\/<\/a><\/p>\n\n\n\n<p><a href=\"http:\/\/multiphp.loc\/php74\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/multiphp.loc\/php74\/<\/a><\/p>\n\n\n\n<p><a href=\"http:\/\/multiphp.loc\/php56\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/multiphp.loc\/php56\/<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creiamo un ambiente LAMP di test che supporti il Multi-PHP, ovvero la possibilit\u00e0 di impostare una determinata versione di PHP. Partiamo da un LAMP base basato su Debian 12 presupponendo che l&#8217;infrastruttura Apache+MySQL+PHP sia gi\u00e0 installata. Installiamo i requisiti se mancano: Applichiamo la chiave GPG di SURY e aggiorniamo all&#8217;ultima versione di PHP (la 8.4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[62,166,15,3,255],"tags":[64,167,8,256],"_links":{"self":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2337"}],"collection":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/comments?post=2337"}],"version-history":[{"count":32,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2337\/revisions"}],"predecessor-version":[{"id":2372,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2337\/revisions\/2372"}],"wp:attachment":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/media?parent=2337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/categories?post=2337"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/tags?post=2337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}