Ook al heeft php PGPASSFILE
in de omgeving erft het van apache, zoals bewezen door getenv("PGPASSFILE")
, lijkt het erop dat deze omgeving niet de omgeving is die beschikbaar is voor de gedeelde libpq
bibliotheek die uiteindelijk .pgpass
afhandelt . Daarom wordt deze instelling genegeerd.
Een tijdelijke oplossing is om de variabele die er al is in php in de omgeving te plaatsen voordat u verbinding maakt met de database:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
De expliciete putenv
zal de variabele pushen op een manier die het beschikbaar maakt voor libpq
's aanroepen van getenv()
. Dit is raar aangezien een proces normaal gesproken maar één omgeving heeft, maar het lijkt te werken.
Ik heb gevraagd naar het dissonante omgevingsprobleem tussen extensies en de kern van php in een aparte vraag:Waarom is putenv() nodig op een reeds gedefinieerde omgevingsvariabele?