I když php má PGPASSFILE v prostředí dědí z Apache, jak dokazuje getenv("PGPASSFILE") , zdá se, že toto prostředí není to, které je dostupné pro sdílený libpq knihovna, která nakonec zpracovává .pgpass . To je důvod, proč je toto nastavení ignorováno.
Řešením je vrátit do prostředí proměnnou, která tam již je, v php před připojením k databázi:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
Explicitní putenv vloží proměnnou způsobem, který ji zpřístupní libpq 's volání getenv() . To je zvláštní, protože proces má normálně pouze jedno prostředí, ale zdá se, že funguje.
Zeptal jsem se na problém s nesouhlasným prostředím mezi rozšířeními a jádrem php v samostatné otázce:Proč je potřeba putenv() na již definované proměnné prostředí?