sql >> Databasteknik >  >> RDS >> PostgreSQL

Använder .pgpass från Apache libphp5.so

Även om php har PGPASSFILE i miljön ärver den från apache, vilket bevisas av getenv("PGPASSFILE") , verkar det som att den här miljön inte är den som är tillgänglig för den delade libpq bibliotek som i slutändan hanterar .pgpass . Det är därför den här inställningen ignoreras.

En lösning är att ange variabeln som redan finns där i miljön i php innan du ansluter till databasen:

if (getenv("PGPASSFILE")!="")
  putenv("PGPASSFILE=".getenv("PGPASSFILE"));

Den explicita putenv kommer att pusha variabeln på ett sätt som gör den tillgänglig för libpq s anrop av getenv() . Detta är konstigt eftersom en process normalt bara har en miljö, men den verkar fungera.

Jag har frågat om det disharmoniska miljöproblemet mellan tillägg och phps kärna i en separat fråga:Varför behövs putenv() på en redan definierad miljövariabel?




  1. Prestandafördelar för SQL Server 2016 Enterprise Edition

  2. TCL-kommandon i SQL

  3. Använda en markör i en lagrad procedur för att loopa rader MySQL

  4. MySQL-fråga för att räkna icke-nullvärden på en enda rad