Ta witryna używa Coookies! Przebywając na niej akceptujesz ten fakt. [ Zamknij to okno ]

Jak naprawić error „putenv() has been disabled” w PrestaShop

Wprowadzenie

W nowszych wersjach PrestaShop 1.7 i nowszych, może pojawić się błąd putenv() has been disabled for security reasons, który uniemożliwia dostęp do panelu administracyjnego w trybie debug. Powodem jest fakt, że Symfony 3.4, używane przez PrestaShop, korzysta z funkcji putenv() w wielu miejscach, a niektórzy dostawcy hostingu blokują jej działanie w konfiguracji PHP (np. poprzez disable_functions). To nie jest błąd PrestaShop, lecz ograniczenie wynikające z ustawień serwera.


Możliwe rozwiązania problemu

1. Usunięcie putenv z listy disable_functions w pliku php.ini

Najbardziej skuteczne i trwałe rozwiązanie. Wystarczy edytować plik php.ini, usunąć putenv z listy zablokowanych funkcji i zrestartować serwer (Apache, Nginx lub PHP-FPM). Dzięki temu błąd przestanie się pojawiać i nie będzie wymagał dodatkowych obejść.

2. Tymczasowe metody awaryjne, gdy nie ma dostępu do php.ini

  • Komentowanie wywołań putenv() w pliku Kernel.php, np.:

    // putenv('SHELL_VERBOSITY = 3');

    Pozwala to przywrócić dostęp do panelu administracyjnego, choć jest rozwiązaniem tymczasowym i może wymagać powtórzenia po aktualizacji.

  • Tłumienie błędu — dodanie symbolu @ przed putenv() ukryje ostrzeżenia, ale nie rozwiąże problemu u źródła.

3. Niestandardowe metody w specyficznych przypadkach

  • Edycja pliku .htaccess — w niektórych konfiguracjach pomaga usunięcie lub zakomentowanie dyrektywy Options Multiviews.
  • Fallback w PHP — można dodać zastępczą definicję funkcji:

    if (!function_exists('putenv')) {
      function putenv($str) { return false; }
    }

4. Zmiana hostingu

Jeśli dostawca hostingu nie pozwala na włączenie putenv(), a funkcja ta jest wymagana do działania sklepu, najrozsądniejszym długoterminowym rozwiązaniem jest wybór hostingu, który tego nie ogranicza.


Szybkie zestawienie rozwiązań

Rozwiązanie Efektywność Trwałość
Usunięcie putenv z disable_functions Najskuteczniejsze trwałe
Zakomentowanie putenv() w Kernel.php Szybkie obejście tymczasowe
Tłumienie błędu (@putenv()) Ukrywa ostrzeżenie tymczasowe
Usunięcie Options Multiviews w .htaccess Działa w niektórych tymczasowe
Fallback PHP (definicja putenv()) Alternatywa ochronna ograniczone
Zmiana hostingu Stabilne i pewne trwałe

Inne źródła