Configurations de deux versions de PHP différentes, pourquoi?

Tags: #<Tag:0x00007f63f51e35d8>

Bonjour,

Notre serveur fonctionne sur Debian Buster, et nous faisons actuellement cohabiter deux versions différentes de PHP :

  • 5.4 pour maintenir notre forum actuel sur vBulletin
  • 7.4 pour notre WordPress et deux forums de test en vue d’une future migration depuis vBulletin, donc.

Ces deux versions ont été compilées (pas par moi-même) et malheureusement, la 7.4 n’a pas été compilée avec le support de zlib, ce qui pose des soucis pour le fonctionnement de WordPress et l’installation de modules sur notre forum de test de SMF 2.1…

Sur Buster, la version dans les dépôts est a priori la 7.3 si j’en crois apt-cache policy. Elle n’est actuellement PAS installée sur notre serveur.

En attendant que l’admin technique (indisponible pour l’instant) revienne, je souhaiterais régler les soucis inhérents à l’absence du support de zlib en installant la version 7.3 via les dépôts.

J’aimerais cependant m’assurer que je ne risque pas d’imposer cette 7.3 par défaut à nos applications (forum et WordPress), car notre forum de production a impérativement besoin de PHP 5.4…

Normalement, l’utilisation des diverses versions de PHP est renseignée dans /etc/apache2/sites-enabled/site.conf mais est-ce que ce fichier ne sera pas réécrit avec l’installation de PHP 7.3 des dépôts ?

Au pire, je conserve une copie de sauvegarde sur le serveur et je la réinjecte pour rétablir la configuration actuelle si ça déconne ?

Merci pour vos confirmations et éclaircissements :slight_smile:

edit : bon, ça ne fonctionnera pas simplement comme ça : en demandant l’installation de PHP 7.3, il me dit qu’il supprimera PHP 5.4 et PHP 7.4, ce qui signifie que notre forum en production ne sera plus fonctionnel…

Je vais essayer de voir comment recompiler PHP 7.4 avec le support de zlib.

edit bis : pour éviter les conflits, j’ai préféré compiler PHP 7.3. Sauf que je coince sur une erreur que je n’arrive pas à corriger :

checking for icu-config... no
checking for location of ICU headers and libraries... not found
configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.

J’ai évidemment vérifié que libicu-dev était bien installé, ce qui était le cas, donc… je coince :frowning:

Si vous avez une piste, je suis preneur ! Merci d’avance

1 J'aime

Salut,

J’ai bossé pendant un moment dans une boîte qui hébergeait des sites web avec différentes versions de PHP, on utilisait les dépôts de https://deb.sury.org.
C’est le gars qui build les paquets PHP pour Debian et Ubuntu, il maintient en plus un dépôt qui permet d’installer différentes versions de PHP. Je n’ai jamais eu à compiler quoi que ce soit.

Les instructions se trouvent là : https://github.com/oerdnj/deb.sury.org/wiki/Frequently-Asked-Questions#how-to-enable-the-debsuryorg-repository

Je te dis ça juste pour info. Je ne connais pas ton serveur et je n’ai aucune idée de ce qui a été fait dessus. Ce n’est pas exclus que ton admin ait compilé des trucs customs qui vont casser si on ajoute d’autres paquets PHP.

2 J'aime

Merci pour ta réponse :slight_smile:

C’est aussi la réflexion que je me suis faite, et je pense que je vais chercher une autre piste…

Il y a quelque chose que je ne comprends pas : sur PHP 5.4, le support de GZIP est pris en charge, selon phpinfo.

Or, sur PHP 7.4, ce n’est pas le cas. Alors que le module deflate est bien installé et actif.

Je vous file un lien vers les deux phpinfo :

5.4

7.4

On voit que les options lors des compilations sont identiques à peu de choses près, et en tout cas en ce qui concerne zlib.

Or, si on regarde à la ligne gzip compression, celle de 5.4 est activée et pas celle de 7.4 !!!

Les php.ini des deux PHP installées ont la même ligne : zlib.output_compression = Off

Je suis paumé… où peut-il y avoir cette dichotomie de configuration ???

1 J'aime

Tu as testé avec le même site en 5.4 et en 7.4 ?

Si c’est pas le cas, compares plutôt les fichier .htaccess …

1 J'aime

Salut Clochette, merci pour ta réponse !

Non, effectivement, l’un est le site principal (5.4) et l’autre un sous-domaine pour faire des essais (7.4).

Si j’ai bien suivi ce que je dois faire, c’est placer le .htaccess à la racine du sous-domaine (test.baldursgateworld.fr en l’occurrence).

Sauf que j’ai tenté plein de conseils pour activer la décompression par GZIP avec .htaccess et aucun n’a fonctionné… je n’arrive pas à lui faire utiliser des archives .zip, par exemple.

Pour donner un exemple concret, je cherche à installer des modules sur le moteur de forum SMF 2.1. Ces modules sont uniquement disponibles en .zip depuis le site officiel de SMF (une installation manuelle n’est apparemment pas possible pour certains modules… dont celui que j’aimerais installer, bien sûr, sinon, ce serait trop simple).

Dès lors, que dois-je indiquer dans le .htaccess du sous-domaine pour qu’il prenne en charge la décompression par GZIP ?

Par ailleurs, la doc d’Apache spécifie qu’il vaut mieux entrer la configuration dans le fichier principal idoine ; j’y ai accès, c’est un serveur dédié.

Reste à comprendre quelles instructions je dois lui donner pour qu’il prenne GZIP en charge…

Merci pour vos réponses !

1 J'aime

En premier lieu s’assurer que le mod_deflate est bien activé sur apache, si ce n’est pas le cas un a2enmod deflate avec un rechargement/redémarrage devrait suffire.

PS : si tu n’as pas déjà activé les headers ça peux être utile dans pas mal de cas, avec un a2enmod hearders

Pour la configuration côté vhost il faudrait ajouter un truc dans ce genre :

<IfModule mod_deflate.c>
 SetOutputFilter DEFLATE
 DeflateCompressionLevel 9
</IfModule>

<Location />
 AddOutputFilterByType DEFLATE text/plain
 AddOutputFilterByType DEFLATE text/xml
 AddOutputFilterByType DEFLATE text/html
 AddOutputFilterByType DEFLATE text/css
 AddOutputFilterByType DEFLATE image/svg+xml
 AddOutputFilterByType DEFLATE application/xhtml+xml
 AddOutputFilterByType DEFLATE application/xml
 AddOutputFilterByType DEFLATE application/rss+xml
 AddOutputFilterByType DEFLATE application/atom_xml
 AddOutputFilterByType DEFLATE application/x-javascript
</Location>

Attention cela reste qu’un exemple, il te faudra sans doute adapter à tes besoins.

Après je ne connais pas SMF, mais si il ajoute et édite ces .htaccess tous seul comme un grand tu devrais là où il y en a besoin avoir ce type d’instructions ou approchant qui feront le travail là où il y en a besoin :

# GZIP compression for text files: HTML, CSS, JS, Text, XML, fonts
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
</IfModule>
1 J'aime

Merci pour ta réponse :slight_smile:

J’ai donc vérifié, le module deflate était bien activé. J’ai activé le module headers également, puis redémarré apache2 avec systemctl restart apache2.

Quand tu parles des virtualhosts, je suppose que c’est bien dans le fichier /etc/apache2/sites-enabled/site.conf qu’il faut que j’ajoute ces lignes, dans le virtualhost test.baldursgateworld.fr ?

J’ai ajouté le .htaccess directement à la racine de test, pas à la racine de SMF (un sous-dossier plus bas) ; c’est peut-être une erreur ?

Pour l’instant, ça n’a rien changé, en tout cas. J’ai toujours la ligne gzip compression disabled (install ext/zlib) dans phpinfo, et le panneau d’administration des modules dans SMF me dit toujours : Sorry, your PHP configuration doesn’t have support for « package_no_zlib » . Without this, package_no_package_manager cannot function. Please contact your host about this for more information.

Merci, en tout cas :slight_smile:

1 J'aime

Bonjour,
Attention normalement les modifications sont apportées dans /etc/apache2/sites-available, pas dans sites-enabled. Même si ce n’est qu’un lien, parfois il y a des effets de bords.

Pour la gestion des versions de php, on peut mettre des blocs du type (ce n’est qu’un exemple):

            <IfModule mod_php5.c>
                php_value max_execution_time 300
                php_value memory_limit 128M
                php_value post_max_size 16M
                php_value upload_max_filesize 2M
                php_value max_input_time 300
                php_value always_populate_raw_post_data -1
                php_value date.timezone Europe/Paris
            </IfModule>

            <IfModule mod_php7.c>
                php_value max_execution_time 300
                php_value memory_limit 128M
                php_value post_max_size 16M
                php_value upload_max_filesize 2M
                php_value max_input_time 300
                php_value date.timezone Europe/Paris
                php_value extension=module.so
            </IfModule>
        </Directory>

Et sinon, coté configuration des modules, chercher l’equivalents de :

/etc/php/7.4/mods-available/module.ini
/etc/php/5.4/mods-available/module.ini

Que tu active ensuite avec a2enmod module

2 J'aime

Merci pour ta réponse :slight_smile:
Il y a quand même toujours quelque chose que je ne comprends pas : Apache est bien commun pour faire tourner les deux versions différentes de PHP, qui ont été compilées avec les mêmes modules.

Le module dont j’ai besoin (deflate) est actif pour PHP 5.4 et pas pour PHP 7.4…

Et je ne trouve toujours pas à quel endroit je pourrais bien indiquer à PHP 7.4 que oui, deflate est bien activé et utilisable par Apache…

Rien dans le site.conf ne parle de ça, par exemple. Idem dans le .htaccess de notre forum de production ; il y a des bans de moteurs de recherche, c’est tout.

Je reste perplexe sur cette histoire… à quel autre endroit pourrais-je trouver comment le module deflate a été activé pour PHP 5.4 ?

1 J'aime

Bonjour,

De base Apache ne sait servir que des fichiers statiques. Pour que le PHP soit interprété, il faut un interpréteur : le module PHP d’Apache (le moins performant), un module fcgi ou PHP-FPM (le plus performant et le plus apte à gérer différentes versions de PHP).

Malheureusement sur des versions compilés sur place on ne va pas pouvoir t’aider car on ne sait pas où son gérer les configurations : php.ini, gestion des modules, etc.

1 J'aime

D’après phpinfo, j’ai bien PHP-FPM activé :slight_smile:

La configuration, à part dans php.ini et dans nomdumodule.conf dans Apache2, je ne peux pas la trouver ailleurs ?

Dans deflate.conf je n’ai que ceci, qui devrait logiquement s’appliquer à mes deux versions de PHP :

<IfModule mod_deflate.c>
        <IfModule mod_filter.c>
                AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
                AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
                AddOutputFilterByType DEFLATE application/rss+xml
                AddOutputFilterByType DEFLATE application/xml
        </IfModule>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
1 J'aime

Je ne sais pas ce que tu cherches…
Le module deflate est un module d’Apache, cela n’a rien à voir avec PHP.
Pour l’activer, en root :

a2enmod deflate
1 J'aime

Je cherche à comprendre pourquoi j’ai deux configurations différentes concernant le module GZIP et ZLIB, selon phpinfo

phpinfo() : ici c’est activé

PHP 7.4.18 - phpinfo() : ici non

Or le module deflate est bien activé avec Apache.

Je ne comprends pas où je peux modifier cela… j’ai besoin que deflate, gzip ou zlib (à force, je m’y perds un peu ^^) soit activé pour PHP 7.4, sans quoi, je ne peux installer aucun module sur mon forum de test SMF… et WordPress déconne également au niveau du panneau d’administration, pour la même raison.

1 J'aime

D’après ton phpinfo() :

gzip compression 	disabled (install ext/zlib) 

Il faut peut-être installer le paquet zlib1g et redémarre le service php-fpm. Sinon il faudra recompiler en indiquant l’emplacement sur le système de le bibliothèque zlib.

N.B. : tu es dans plus mauvaise configuration qui soit pour gérer des versions de PHP concurrentes. Avoir des version compilés sur place, t’expose à toute les failles de sécurité connues depuis la dernière compilation. Il aurait été bien plus simple et plus sécurisé d’utiliser la version PHP 7.3 des paquets officiels (qui fonctionne parfaitement avec Wordpress) et de se servir de Docker pour l’application nécessitant un PHP 5.x.

1 J'aime

zlib1g est déjà installé ; j’ai redémarré php74-fpm au cas où, mais ça n’a rien changé.

Oui, je sais que la config est pourrie ; elle a été montée de façon particulière pour pouvoir réaliser des migrations successives depuis des anciennes versions de moteurs de forum, ce genre de choses. Sans compter que lorsqu’on a réinstallé un serveur neuf, on a repris des anciennes configs pour permettre que tout tourne en bricolant…

L’idéal serait de réinstaller un serveur propre et configurer tout cela sans devoir compiler.

NORMALEMENT, lorsqu’on aura mis vBulletin à jour, il devrait supporter PHP 7.3 et on pourra alors uniquement utiliser la version des dépôts de Buster, ce qui sera bien entendu le top…

J’ai encore une autre piste éventuelle, ce serait de ne plus utiliser PHP 7.4 compilée et d’installer la 7.3. Sauf que si je demande à mon serveur d’installer la 7.3, il veut me supprimer la 5.4 dont j’ai encore impérativement besoin… à moins qu’il n’existe une astuce ?

Tout ce qui tourne en 7.4 actuellement peut être mis hors ligne temporairement sans souci. La prod c’est sur 5.4…

apt install php7.3
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés : 
  libapache2-mod-php7.3 libmagic-mgc libmagic1 php7.3-cli php7.3-json php7.3-opcache php7.3-readline
Paquets suggérés :
  php-pear file
Les paquets suivants seront ENLEVÉS :
  php54 php74
Les NOUVEAUX paquets suivants seront installés :
  libapache2-mod-php7.3 libmagic-mgc libmagic1 php7.3 php7.3-cli php7.3-json php7.3-opcache php7.3-readline
0 mis à jour, 8 nouvellement installés, 2 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 3 398 ko dans les archives.
Après cette opération, 16,0 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] n
Annulation.

Merci pour tes réponses ! :slight_smile:

1 J'aime

Je ne pense pas que tu arrivera à t’en sortir sans refaire une installation propre…
Donne-nous tout de même le retour de :

apt list \*php\* --installed

C’est curieux ces paquets php54 et php74, à moins que ce ne soient des paquets créés localement.

1 J'aime

Oui, on tourne uniquement avec des versions compilées…

apt list \*php\* --installed
En train de lister... Fait
php-common/oldstable,now 2:69 all  [installé, automatique]
php53/now 5.3.29-anoF amd64  [installé, local]
php54/now 5.4.45-anoF amd64  [installé, local]
php55/now 5.5.38-anoC amd64  [installé, local]
php56/now 5.6.32-anoA amd64  [installé, local]
php7.3-common/oldstable,now 7.3.29-1~deb10u1 amd64  [installé, automatique]
php7.3-curl/oldstable,now 7.3.29-1~deb10u1 amd64  [installé]
php74/now 7.4.18-anoA amd64  [installé, local]
1 J'aime

Oui donc c’est pratiquement impossible d’installer les paquet officiels PHP 7.3 sans virer le reste.

Tu peux toujours essayer de mettre :

zlib.output_compression = On

dans le fichier php.ini correspondant à ton php-fpm 7.4 : /etc/php/7.4/fpm/php.ini sur une installation normale. Ou le mettre dans un .htaccess (avec php_flag) ou directement dans un script PHP (avec init_set). Mais si PHP n’a pas été compilé avec les bonnes otions pour la zlib cela ne fonctionnera pas bien entendu.

1 J'aime

Je mets juste

php_flag zlib.output_compression = On

en vrac dans .htaccess ? (sachant que je n’ai pas de .htaccess dans SMF)

edit : c’était déjà sur On dans le php.ini de 7.4

Marrant : dans le php.ini de PHP 5.4, l’option est sur Off… alors que c’est activé selon phpinfo

Comprends plus rien… :frowning:

1 J'aime

Tu es bon pour retrouver dans l’historique la compilation de ton php7.4 et ajouter le support pour la zlib.

Tant que l’on ai dans le crade regarde pour ajouter le dépôts de SURY et de simuler une installation de php7.4, tu pourra dégager l’ancienne si ça passe mais j’y crois moyen …

On peu aussi passer par un phpenv couplé à phpbuild il me semble mais j’ai jamais essayé cette solution.

1 J'aime