PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwendung von .pgpass von Apache libphp5.so

Obwohl php PGPASSFILE hat in der Umgebung erbt es von Apache, wie durch getenv("PGPASSFILE") bewiesen , scheint es, dass diese Umgebung nicht diejenige ist, die für die freigegebene libpq verfügbar ist Bibliothek, die letztendlich .pgpass verarbeitet . Aus diesem Grund wird diese Einstellung ignoriert.

Eine Problemumgehung besteht darin, die bereits vorhandene Variable in PHP in die Umgebung einzufügen, bevor Sie sich mit der Datenbank verbinden:

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

Die explizite putenv wird die Variable so pushen, dass sie für libpq verfügbar ist Aufrufe von getenv() . Das ist seltsam, da ein Prozess normalerweise nur eine Umgebung hat, aber es scheint zu funktionieren.

Ich habe in einer separaten Frage nach dem unstimmigen Umgebungsproblem zwischen Erweiterungen und dem Kern von PHP gefragt:Warum wird putenv() benötigt? auf eine bereits definierte Umgebungsvariable?