Powód jest taki:
Wartości środowiskowe, które otrzymujesz z getenv()[PHP]
(funkcja php) są inne niż środowisko, do którego pytasz za pomocą getenv()[C]
(funkcja C lib). Co getenv()[PHP]
sprawdza, czy u zarejestrowanej sapi nie ma dopasowania (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
Apache2 sapi robi to poprzez własny kontekst środowiska (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), a nie standardowe środowisko systemu operacyjnego z samego procesu Apache.
TYLKO, gdy nie zostanie znalezione żadne dopasowanie, sprawdzi środowisko rzeczywistego procesu. Dlatego właśnie getenv()[PHP]
zwraca wartość, ale getenv()[C]
nie.
Teraz "hack" jest również prosty:putenv()[PHP]
, przechowuje dany klucz/wartość w środowisku uruchomionego procesu, dlatego można go później znaleźć za pomocą getenv()[c]
.