Mimo że php ma PGPASSFILE
w środowisku dziedziczy z Apache, co udowodnił getenv("PGPASSFILE")
, wygląda na to, że to środowisko nie jest tym, które jest dostępne dla współdzielonej libpq
biblioteka, która ostatecznie obsługuje .pgpass
. Dlatego to ustawienie jest ignorowane.
Rozwiązaniem jest ponowne wprowadzenie do środowiska zmiennej, która już tam jest, w php przed połączeniem z bazą danych:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
Wyraźne putenv
wypchnie zmienną w taki sposób, aby była dostępna dla libpq
wywołania funkcji getenv()
. To dziwne, ponieważ zwykle proces ma tylko jedno środowisko, ale wydaje się, że działa.
Zapytałem o problem niezgodności środowiska między rozszerzeniami a rdzeniem php w osobnym pytaniu:Dlaczego potrzebne jest putenv() na już zdefiniowanej zmiennej środowiskowej?