Ä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?