Även om php har PGPASSFILE
i miljön ärver den från apache, vilket bevisas av getenv("PGPASSFILE")
, verkar det som att den här miljön inte är den som är tillgänglig för den delade libpq
bibliotek som i slutändan hanterar .pgpass
. Det är därför den här inställningen ignoreras.
En lösning är att ange variabeln som redan finns där i miljön i php innan du ansluter till databasen:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
Den explicita putenv
kommer att pusha variabeln på ett sätt som gör den tillgänglig för libpq
s anrop av getenv()
. Detta är konstigt eftersom en process normalt bara har en miljö, men den verkar fungera.
Jag har frågat om det disharmoniska miljöproblemet mellan tillägg och phps kärna i en separat fråga:Varför behövs putenv() på en redan definierad miljövariabel?