Anledningen är detta:
Miljövärdena du får från getenv()[PHP]
(php-funktionen) skiljer sig från miljön du frågar med getenv()[C]
(C lib-funktionen). Vad getenv()[PHP]
gör, kontrollerar med den registrerade sapi efter en matchning (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
Apache2 sapi gör detta genom sin egen miljökontext (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), inte standard OS-miljön från själva apacheprocessen.
ENDAST när det inte finns någon matchning, kommer den att kontrollera miljön för den faktiska processen. Så det är därför getenv()[PHP]
returnerar ett värde, men getenv()[C]
inte.
Nu är "hacket" också enkelt:putenv()[PHP]
, lagrar den givna nyckeln/värdet i miljön för den pågående processen, varför den kan hittas senare av getenv()[c]
.