Meskipun php memiliki PGPASSFILE di lingkungan yang diwarisi dari Apache, sebagaimana dibuktikan oleh getenv("PGPASSFILE") , tampaknya lingkungan ini bukan lingkungan yang tersedia untuk libpq . yang dibagikan perpustakaan yang pada akhirnya menangani .pgpass . Inilah sebabnya mengapa setelan ini diabaikan.
Solusinya adalah memasukkan kembali ke lingkungan variabel yang sudah ada, di php sebelum menghubungkan ke database:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
putenv yang eksplisit akan mendorong variabel dengan cara yang membuatnya tersedia untuk libpq panggilan getenv() . Ini aneh karena biasanya sebuah proses hanya memiliki satu lingkungan, tetapi tampaknya berhasil.
Saya telah bertanya tentang masalah lingkungan sumbang antara ekstensi dan inti php dalam pertanyaan terpisah:Mengapa putenv() diperlukan pada variabel lingkungan yang sudah ditentukan?