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 plikuKernel.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
@przedputenv()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 dyrektywyOptions 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
-
GitHub – zgłoszenia dotyczące problemu
putenv()w PrestaShop: https://github.com/PrestaShop/PrestaShop/issues/11616 -
StackOverflow – instrukcja usunięcia
putenvzdisable_functionswphp.ini: https://stackoverflow.com/questions/51812996/putenv-has-been-disabled-for-security-reasons-when-executing-composer-commands -
Forum PrestaShop – przykłady tymczasowych obejść błędu: https://www.prestashop.com/forums/topic/997053-putenv
-
OpenServis.cz – opis obejścia przez edycję
Kernel.php: https://www.openservis.cz/prestashop-blog/prestashop-1-7-reseni-putenv-has-been-disabled-for-security-reasons