Erreur Function putenv() was disabled by the domain protection module peut surprendre au moment le moins attendu – surtout après que le magasin fonctionnait sans reproche pendant longtemps. Dans cet article, j'explique d'où vient ce problème et comment le résoudre rapidement.
Qu'est-ce que putenv() au juste ?
putenv() est une fonction PHP intégrée utilisée pour définir les variables d'environnement lors de l'exécution du script. PrestaShop l'utilise notamment lors du traitement de la localisation et des traductions – elle l'appelle lors de la configuration des paramètres régionaux pour la langue de la boutique. Sans cette fonction, la boutique peut continuer à fonctionner, mais des avertissements commencent à apparaître dans les journaux, et dans certaines configurations, les erreurs peuvent être visibles directement sur la page – ce qui est bien sûr inacceptable en production.
D'où vient cette erreur ?
Le problème est caractéristique des hébergements partagés qui utilisent le mécanisme de protection des domaines (domain protection). Ce mécanisme isole les domaines individuels les uns des autres au niveau du système d'exploitation, ce qui est une bonne pratique de sécurité – mais cela bloque également certaines fonctions PHP, notamment putenv(). Le cas le plus populaire est l'hébergement Cyber Folks et Hostido, qui à partir d'un certain moment a commencé à activer automatiquement cette option pour chaque nouveau domaine ou sous-domaine ajouté. Le résultat ? La boutique fonctionnait sans problème, vous avez ajouté un sous-domaine ou changé de domaine – et soudain elle a commencé à émettre des avertissements.
Avertissement
Si l'erreur apparaît directement sur la page de la boutique (et non seulement dans les journaux), désactivez d'urgence l'affichage des erreurs PHP dans la configuration du serveur ou le fichier config/defines.inc.php – les erreurs visibles en front-end sont un grave problème d'image et de sécurité.
Le texte complet de l'avertissement ressemble à ceci :
User Warning: Function putenv() was disabled by the domain protection module. Disable domain protection for this domain in the Server Panel to use this function.
Comment résoudre le problème – panneau DirectAdmin (Cyber Folks ou Hostido)
La solution est très simple et ne nécessite aucune modification du code de votre boutique. Il suffit de désactiver la séparation des domaines dans le panneau d'hébergement.
Connectez-vous au panneau DirectAdmin – généralement accessible à l'adresse nomdedomaine.pl:2222 ou nomdedomaine.pl:2223
Allez à la section Paramètres des domaines
Trouvez le domaine de votre boutique dans la liste
Modifiez l'option Séparation des domaines z OUI à NON
Enregistrez les modifications
Succès
Après désactivation de la séparation des domaines, l'erreur devrait disparaître immédiatement, sans nécessiter un redémarrage du serveur ou une reconstruction du cache PrestaShop.
Et si j'ai un autre panneau d'hébergement ?
Tous les hébergements n'utilisent pas DirectAdmin. Ci-dessous, j'ai rassemblé où chercher cette option dans les autres panneaux populaires :
Panneau d'hébergement
Où chercher le paramètre
DirectAdmin (Cyber Folks)
Paramètres des domaines – Séparation des domaines – NON
cPanel
Sélecteur PHP ou ModSecurity – vérifiez les fonctions PHP désactivées
Plesk
Domaines – paramètres PHP – Fonctions désactivées
HestiaCP
Pas de séparation des domaines intégrée – vérifiez la configuration PHP-FPM dans /etc/php/X.X/fpm/pool.d/
Serveur dédié (VPS/serveur)
Fichier php.ini ou php-fpm.conf – directive disable_functions
Solution alternative – serveur dédié ou pas d'accès au panneau
Si vous avez accès au fichier php.ini ou à la configuration PHP-FPM, vérifiez que putenv ne figure pas sur la liste des fonctions bloquées :
disable_functions = putenv, ...
Supprimer putenv de cette liste et redémarrez PHP-FPM :
systemctl restart php8.1-fpm
Remarque
Ajustez le numéro de version dans la commande ci-dessus à la version PHP utilisée par votre boutique. Vous pouvez le vérifier dans le panneau d'hébergement ou via le fichier phpinfo().
Faut-il se préoccuper de cette erreur ?
Oui. Bien que la boutique fonctionne souvent apparemment normalement malgré cet avertissement :
l'erreur peut apparaître sur la page pour les clients (en fonction de la configuration d'affichage des erreurs PHP)
dans certaines versions de PrestaShop, une configuration incorrecte de la locale peut causer des problèmes lors de la génération de factures PDF ou de la traduction des e-mails
les avertissements accumulés dans les journaux rendent difficile le diagnostic des vrais problèmes
Conseil
Après chaque ajout d'un nouveau domaine ou sous-domaine sur l'hébergement Cyber Folks, accédez immédiatement aux paramètres du domaine et vérifiez l'option de séparation – elle s'active automatiquement par défaut et il est préférable de la désactiver avant que la boutique commence à générer des erreurs.
Avez-vous d'autres questions sur la configuration de PrestaShop ou des problèmes d'hébergement ? Laissez un commentaire ci-dessous.
Nous utilisons des cookies pour améliorer votre expérience du site. En l'utilisant, vous acceptez cette pratique.
Préférences en matière de cookies
Gérez vos préférences en matière de cookies ci-dessous :
Les cookies essentiels permettent l'utilisation de fonctions de base et sont nécessaires au bon fonctionnement du site web.
Nom
Description
Durée de l'accord
Préférences en matière de cookies
Ce cookie est utilisé pour stocker les préférences de l'utilisateur en matière de consentement aux cookies.
30 jours
Ces cookies sont nécessaires pour ajouter des commentaires sur ce site web.
Nom
Description
Durée de l'accord
auteur_du_commentaire
Utilisé pour suivre l'utilisateur sur plusieurs sessions.
Session
email de l'auteur du commentaire
Utilisé pour suivre l'utilisateur sur plusieurs sessions.
Session
commentaire_auteur_url
Utilisé pour suivre l'utilisateur sur plusieurs sessions.
Session
Ces cookies sont utilisés pour gérer la fonctionnalité de connexion sur ce site web.
Nom
Description
Durée de l'accord
wordpress_test_cookie
Utilisé pour déterminer si les cookies sont activés.
Session
wordpress_logged_in
Utilisé pour stocker les utilisateurs connectés.
Persistant
wordpress_sec
Utilisé pour suivre l'utilisateur sur plusieurs sessions.
15 jours
Les cookies statistiques collectent des informations sur une base anonyme. Ces informations nous aident à comprendre comment les utilisateurs se servent de notre site web.
Google Analytics est un outil puissant qui permet de suivre et d'analyser le trafic d'un site web afin de prendre des décisions éclairées en matière de marketing.
Il n'y a pas d'autre choix que d'aller à l'école ou à l'université.
Contient des informations relatives aux campagnes de marketing de l'utilisateur. Celles-ci sont partagées avec Google AdWords / Google Ads lorsque les comptes Google Ads et Google Analytics sont liés ensemble.
90 jours
__utma
ID utilisé pour identifier les utilisateurs et les sessions
2 ans après la dernière activité
__utmt
Utilisé pour contrôler le nombre de requêtes du serveur Google Analytics
10 minutes
__utmb
Utilisé pour distinguer les nouvelles sessions et visites. Ce cookie est défini lorsque la bibliothèque javascript GA.js est chargée et qu'il n'existe pas de cookie __utmb. Le cookie est mis à jour à chaque fois que des données sont envoyées au serveur Google Analytics.
30 minutes après la dernière activité
__utmc
Utilisé uniquement avec les anciennes versions Urchin de Google Analytics et non avec GA.js. Utilisé pour faire la distinction entre les nouvelles sessions et les visites à la fin d'une session.
Fin de session (navigateur)
__utmz
Contient des informations sur la source de trafic ou la campagne qui a dirigé l'utilisateur vers le site web. Le cookie est installé lorsque le javascript GA.js est chargé et mis à jour lorsque les données sont envoyées au serveur Google Anaytics.
6 mois après la dernière activité
__utmv
Contient des informations personnalisées définies par le développeur web via la méthode _setCustomVar dans Google Analytics. Ce cookie est mis à jour à chaque fois que de nouvelles données sont envoyées au serveur Google Analytics.
2 ans après la dernière activité
__utmx
Utilisé pour déterminer si un utilisateur est inclus dans un test A/B ou multivarié.
18 mois
_ga
ID utilisé pour identifier les utilisateurs
2 ans
_gali
Utilisé par Google Analytics pour déterminer quels liens sont cliqués sur une page.
30 secondes
Il n'y a pas d'autre choix que d'aller à l'école.
ID utilisé pour identifier les utilisateurs
2 ans
_gid
ID utilisé pour identifier les utilisateurs pendant 24 heures après la dernière activité
24 heures
_gat
Utilisé pour contrôler le nombre de requêtes du serveur Google Analytics lors de l'utilisation de Google Tag Manager.
1 minute
SourceBuster est utilisé par WooCommerce pour l'attribution des commandes en fonction de la source de l'utilisateur.
Nom
Description
Durée de l'accord
sbjs_first
Informations sur l'origine du trafic lors de la première visite du visiteur dans votre magasin (uniquement si le visiteur revient avant l'expiration de la session).
session
sbjs_current
Informations sur l'origine du trafic pour la visite actuelle du visiteur dans votre magasin
session
sbjs_first_add
Horodatage, URL de référence et page d'entrée pour la première visite de votre visiteur dans votre magasin (uniquement applicable si le visiteur revient avant l'expiration de la session).
session
sbjs_current_add
Horodatage, URL de référence et page d'entrée pour la visite actuelle de votre visiteur dans votre magasin
session
sbjs_migrations
Données techniques pour faciliter les migrations entre les différentes versions du dispositif de suivi
session
sbjs_session
Le nombre de pages vues dans cette session et le chemin d'accès à la page actuelle
30 minutes
sbjs_udata
Informations sur l'agent utilisateur du visiteur, telles que l'adresse IP, le navigateur et le type d'appareil