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?