Il motivo è questo:
I valori dell'ambiente che ottieni da getenv()[PHP]
(la funzione php) sono diversi dall'ambiente che interroghi con getenv()[C]
(la funzione C lib). Cosa getenv()[PHP]
fa, sta verificando con il sapi registrato una corrispondenza (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
apache2 sapi lo fa attraverso il proprio contesto ambientale (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), non l'ambiente OS standard dal processo Apache stesso.
SOLO quando non viene trovata alcuna corrispondenza, verificherà nell'ambiente del processo effettivo. Ecco perché getenv()[PHP]
restituisce un valore, ma getenv()[C]
no.
Ora, anche l'"hack" è semplice:putenv()[PHP]
, memorizza la chiave/valore specificata nell'ambiente del processo in esecuzione, motivo per cui può essere trovata in seguito da getenv()[c]
.