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

Utilisation de .pgpass d'Apache libphp5.so

Même si php a PGPASSFILE dans l'environnement dont il hérite d'apache, comme le prouve getenv("PGPASSFILE") , il semble que cet environnement n'est pas celui qui est disponible pour la libpq partagée bibliothèque qui gère finalement .pgpass . C'est pourquoi ce paramètre est ignoré.

Une solution consiste à remettre dans l'environnement la variable qui s'y trouve déjà, en php avant de se connecter à la base :

if (getenv("PGPASSFILE")!="")
  putenv("PGPASSFILE=".getenv("PGPASSFILE"));

Le putenv explicite poussera la variable d'une manière qui la rendra disponible pour libpq les appels de getenv() . C'est bizarre car normalement un processus n'a qu'un seul environnement, mais cela semble fonctionner.

J'ai posé des questions sur le problème d'environnement discordant entre les extensions et le noyau de php dans une question distincte :Pourquoi est-ce que putenv() est nécessaire sur une variable d'environnement déjà définie ?