Jak naprawić błąd Function putenv() was disabled w PrestaShop 1.7, 8.x, 9.x

Błąd Function putenv() was disabled by the domain protection module potrafi zaskoczyć w najmniej oczekiwanym momencie – szczególnie po tym, jak sklep działał bez zarzutu przez długi czas. W tym wpisie wyjaśniam skąd się bierze ten problem i jak go szybko rozwiązać.

Co to właściwie jest putenv()?
putenv() to wbudowana funkcja PHP służąca do ustawiania zmiennych środowiskowych w czasie działania skryptu. PrestaShop korzysta z niej m.in. podczas obsługi lokalizacji i tłumaczeń – wywołuje ją przy ustawianiu locale dla danego języka sklepu. Bez tej funkcji sklep nadal może działać, ale w logach zaczynają pojawiać się ostrzeżenia, a w niektórych konfiguracjach błędy mogą być widoczne bezpośrednio na stronie – co oczywiście jest niedopuszczalne na produkcji.

Skąd się bierze ten błąd?
Problem jest charakterystyczny dla hostingów współdzielonych, które używają mechanizmu separacji domen (ang. domain protection). Mechanizm ten izoluje poszczególne domeny od siebie na poziomie systemu operacyjnego, co jest dobrą praktyką bezpieczeństwa – ale przy okazji blokuje pewne funkcje PHP, w tym właśnie putenv(). Najbardziej popularnym przypadkiem jest hosting Cyber Folks oraz Hostido, który od pewnego momentu zaczął automatycznie włączać tę opcję przy każdej nowo dodanej domenie lub subdomenie. Efekt? Sklep działał bez problemu, dodałeś subdomenę albo przepinałeś domenę – i nagle zaczął sypać ostrzeżeniami.
Ostrzeżenie
Jeśli błąd pojawia się bezpośrednio na stronie sklepu (a nie tylko w logach), pilnie wyłącz wyświetlanie błędów PHP w konfiguracji serwera lub pliku config/defines.inc.php – widoczne błędy na froncie to poważny problem wizerunkowy i bezpieczeństwa.
Pełna treść ostrzeżenia wygląda tak:
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.

Jak rozwiązać problem – panel DirectAdmin (Cyber Folks lub Hostido)
Rozwiązanie jest bardzo proste i nie wymaga żadnych modyfikacji w kodzie sklepu. Wystarczy wyłączyć separację domen w panelu hostingowym.
  1. Zaloguj się do panelu DirectAdmin – zazwyczaj dostępny jest pod adresem nazwadomeny.pl:2222 lub nazwadomeny.pl:2223
  2. Przejdź do sekcji Ustawienia domen
  3. Znajdź domenę swojego sklepu na liście
  4. Zmień opcję Separacja domen z TAK na NIE
  5. Zapisz zmiany
Sukces
Po wyłączeniu separacji domen błąd powinien zniknąć natychmiast, bez konieczności restartu serwera czy przebudowy cache PrestaShop.
błąd Function putenv() - wyłączenie

błąd Function putenv() - wyłączenie
A co jeśli mam inny panel hostingowy?
Nie każdy hosting korzysta z DirectAdmin. Poniżej zebrałem, gdzie szukać tej opcji w innych popularnych panelach:
Panel hostingowyGdzie szukać ustawienia
DirectAdmin (Cyber Folks)Ustawienia domen – Separacja domen – NIE
cPanelPHP Selector lub ModSecurity – sprawdź wyłączone funkcje PHP
PleskDomeny – ustawienia PHP – Wyłączone funkcje
HestiaCPBrak wbudowanej separacji domen – sprawdź konfigurację PHP-FPM w /etc/php/X.X/fpm/pool.d/
Własny serwer (VPS/dedyk)Plik php.ini lub php-fpm.conf – dyrektywa disable_functions

Rozwiązanie alternatywne – własny serwer lub brak dostępu do panelu
Jeśli masz dostęp do pliku php.ini lub konfiguracji PHP-FPM, sprawdź czy putenv nie figuruje na liście zablokowanych funkcji:
disable_functions = putenv, ...
Usuń putenv z tej listy i zrestartuj PHP-FPM:
systemctl restart php8.1-fpm
Notatka
Numer wersji w poleceniu powyżej dostosuj do wersji PHP używanej przez Twój sklep. Możesz to sprawdzić w panelu hostingowym lub przez plik phpinfo().

Czy warto martwić się tym błędem?
Tak. Choć sklep często działa pozornie normalnie mimo tego ostrzeżenia, to:
  • błąd może pojawiać się na stronie dla klientów (zależnie od konfiguracji wyświetlania błędów PHP)
  • w niektórych wersjach PrestaShop niepoprawne ustawianie locale może powodować problemy z generowaniem faktur PDF lub tłumaczeniami maili
  • nagromadzone ostrzeżenia w logach utrudniają diagnozowanie rzeczywistych problemów
Wskazówka
Po każdym dodaniu nowej domeny lub subdomeny na hostingu Cyber Folks wejdź od razu w ustawienia domeny i sprawdź opcję separacji – domyślnie włącza się automatycznie i lepiej wyłączyć ją zanim sklep zacznie generować błędy.
Masz inne pytania dotyczące konfiguracji PrestaShop lub problemów z hostingiem? Zostaw komentarz poniżej.

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Koszyk

Zamknij

Twój koszyk jest pusty.

Rozpocznij zakupy

Pasek boczny