Edycja: o ile mogę powiedzieć, moje pytanie dotyczy wady PHP. Skopiowałem to pytanie do śledzenia błędów PHP tutaj: https://bugs.php.net/bug.php?id=74143 i planuję wypróbować i zaimplementować poprawkę.Jak używać putenv() do aktualizacji istniejącej zmiennej środowiskowej?
Funkcja putenv ustawia wartość zmiennej środowiskowej. Zgodnie z instrukcją, putenv zwraca wartość true w przypadku sukcesu, false w przypadku niepowodzenia.
Jednak stwierdzam, że funkcja putenv czasami zwraca wartość true bez aktualizacji zmiennej środowiskowej dla bieżącej sesji.
Aby odtworzyć ten problem, ustaw zmienną środowiskową na serwerze internetowym za pomocą PHP FPM, korzystając z dyrektywy fastcgi_param. Jest to niezwykle przydatne, ponieważ pozwala na ustawienie zmiennych środowiskowych w izolacji na inne hosty na tym samym serwerze.
Przykład nginx.conf:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param TESTVAR_ENV old-value;
include fastcgi_params;
}
Przykład test.php:
var_dump(getenv("TESTVAR_ENV"));
var_dump(putenv("TESTVAR_ENV=new-value"));
var_dump(getenv("TESTVAR_ENV"));
wyjściowe test.php:
string(12) "old-value"
bool(true)
string(12) "old-value"
Jak widać:
- Istniejąca wartość jest odczytywana przez getenv z powodzeniem,
- Funkcja putenv zwraca wartość true, oznaczającą powodzenie,
- nowa wartość nie jest ustawiona, co jest niewiarygodne.
Czy nie rozumiem, jaki jest cel funkcji putenv? Czy jest jakiś brakujący dokument na stronie podręcznika setenv? Jak używać putenv() do aktualizacji istniejącej zmiennej środowiskowej?
Nie widziałem tego zachowania się. Czy próbowałeś najpierw usunąć starą wartość? 'putenv (" TESTVAR_ENV ")' powinno wyczyścić wartość, a może spróbować użyć '$ _SERVER' zamiast tego? – miken32
Właściwie to po prostu przetestowałem to z Nginx i PHP-FPM, zamiast CLI i widzę to samo. – miken32
Czy uważasz, że jest to błąd w PHP lub PHP-FPM? – Greg