sql >> Databáze >  >> RDS >> PostgreSQL

Použití .pgpass z Apache libphp5.so

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




  1. Laravel a InnoDB

  2. Provést okamžitý výběr nevrátí žádné hodnoty

  3. MySQL GROUP_CONCAT escapování

  4. pomocí výzvy prohlížeče ke stažení souboru