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?