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