Anche se php ha PGPASSFILE nell'ambiente eredita da apache, come dimostrato da getenv("PGPASSFILE") , sembra che questo ambiente non sia quello disponibile per la libpq condivisa libreria che alla fine gestisce .pgpass . Questo è il motivo per cui questa impostazione viene ignorata.
Una soluzione alternativa consiste nel restituire nell'ambiente la variabile che è già presente, in php prima di connettersi al database:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
L'esplicito putenv spingerà la variabile in modo da renderla disponibile a libpq le chiamate di getenv() . Questo è strano poiché normalmente un processo ha un solo ambiente, ma sembra funzionare.
Ho chiesto informazioni sul problema dell'ambiente discordante tra le estensioni e il core di php in una domanda separata:Perché è necessario putenv() su una variabile di ambiente già definita?