Důvod je tento:
Hodnoty prostředí, které získáte z getenv()[PHP]
(funkce php) se liší od prostředí, na které se dotazujete pomocí getenv()[C]
(funkce Clib). Co getenv()[PHP]
ano, kontroluje u registrovaného sapi shodu (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
Apache2 sapi to dělá prostřednictvím svého vlastního kontextu prostředí (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), nikoli standardní prostředí operačního systému ze samotného procesu Apache.
POUZE když není nalezena žádná shoda, zkontroluje se v prostředí skutečného procesu. To je důvod, proč getenv()[PHP]
vrátí hodnotu, ale getenv()[C]
ne.
Nyní je "hack" také jednoduchý:putenv()[PHP]
, ukládá daný klíč/hodnotu v prostředí běžícího procesu, proto jej lze později nalézt pomocí getenv()[c]
.