Mesmo que o php tenha
PGPASSFILE no ambiente que herda do apache, conforme comprovado por getenv("PGPASSFILE") , parece que este ambiente não é aquele que está disponível para o libpq compartilhado biblioteca que lida com .pgpass . É por isso que essa configuração é ignorada. Uma solução é repor no ambiente a variável que já está lá, em php, antes de conectar ao banco de dados:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
O
putenv explícito irá enviar a variável de forma a torná-la disponível para libpq chamadas de getenv() . Isso é estranho, pois normalmente um processo tem apenas um ambiente, mas parece funcionar. Eu perguntei sobre o problema do ambiente discordante entre as extensões e o núcleo do php em uma pergunta separada:Por que putenv() é necessário em uma variável de ambiente já definida?