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?