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 (https://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] .