Aunque php tiene PGPASSFILE
en el entorno hereda de Apache, como lo demuestra getenv("PGPASSFILE")
, parece que este entorno no es el que está disponible para el libpq
compartido biblioteca que finalmente maneja .pgpass
. Es por eso que esta configuración se ignora.
Una solución es volver a colocar en el entorno la variable que ya está allí, en php antes de conectarse a la base de datos:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
El putenv
explícito empujará la variable de manera que esté disponible para libpq
llamadas de getenv()
. Esto es extraño ya que normalmente un proceso tiene un solo entorno, pero parece funcionar.
Pregunté sobre el problema del entorno discordante entre las extensiones y el núcleo de php en una pregunta separada:¿Por qué se necesita putenv()? en una variable de entorno ya definida?