PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Usando .pgpass do Apache libphp5.so


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?