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 ?