Selvom php har PGPASSFILE
i miljøet arver den fra apache, som bevist af getenv("PGPASSFILE")
, ser det ud til, at dette miljø ikke er det, der er tilgængeligt for den delte libpq
bibliotek, der i sidste ende håndterer .pgpass
. Det er derfor, denne indstilling bliver ignoreret.
En løsning er at omdanne den variabel, der allerede er der, i miljøet i php, før der oprettes forbindelse til databasen:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
Den eksplicitte putenv
vil skubbe variablen på en måde, der gør den tilgængelig for libpq
's kald af getenv()
. Dette er mærkeligt, da en proces normalt kun har ét miljø, men det ser ud til at virke.
Jeg har spurgt om det uoverensstemmende miljøproblem mellem udvidelser og phps kerne i et separat spørgsmål:Hvorfor er putenv() nødvendig på en allerede defineret miljøvariabel?