PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Utilizzando .pgpass da Apache libphp5.so

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?