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?