La raison est la suivante :
Les valeurs d'environnement que vous obtenez de getenv()[PHP]
(la fonction php) sont différents de l'environnement que vous interrogez avec getenv()[C]
(la fonction C lib). Qu'est-ce que getenv()[PHP]
fait, vérifie avec le sapi enregistré pour une correspondance (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
Le sapi apache2 le fait via son propre contexte d'environnement (http ://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), et non l'environnement de système d'exploitation standard du processus apache lui-même.
UNIQUEMENT lorsqu'aucune correspondance n'est trouvée, il vérifiera l'environnement du processus réel. C'est pourquoi getenv()[PHP]
renvoie une valeur, mais getenv()[C]
pas.
Maintenant, le "hack" est aussi simple :putenv()[PHP]
, stocke la clé/valeur donnée dans l'environnement du processus en cours d'exécution, c'est pourquoi elle peut être trouvée plus tard par getenv()[c]
.