Въпреки че php има PGPASSFILE
в средата, която наследява от apache, както е доказано от getenv("PGPASSFILE")
, изглежда, че тази среда не е тази, която е достъпна за споделения libpq
библиотека, която в крайна сметка обработва .pgpass
. Ето защо тази настройка се игнорира.
Заобиколно решение е да въведете в средата променливата, която вече е там, в php, преди да се свържете с базата данни:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
Явният putenv
ще избута променливата по начин, който я прави достъпна за libpq
извикванията на getenv()
. Това е странно, тъй като обикновено процесът има само една среда, но изглежда, че работи.
Попитах за проблема с несъгласуваната среда между разширенията и ядрото на php в отделен въпрос:Защо е необходим putenv() на вече дефинирана променлива на средата?