PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi putenv() est-il nécessaire sur une variable d'environnement déjà définie ?

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] .