Mặc dù php có PGPASSFILE
trong môi trường nó kế thừa từ apache, như được chứng minh bởi getenv("PGPASSFILE")
, có vẻ như môi trường này không phải là môi trường có sẵn cho libpq
được chia sẻ thư viện cuối cùng xử lý .pgpass
. Đây là lý do tại sao cài đặt này bị bỏ qua.
Một cách giải quyết là đưa vào môi trường biến đã có ở đó, trong php trước khi kết nối với cơ sở dữ liệu:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
putenv
rõ ràng sẽ đẩy biến theo cách làm cho biến có sẵn cho libpq
lệnh gọi của getenv()
. Điều này thật kỳ lạ vì thông thường một quy trình chỉ có một môi trường, nhưng nó dường như hoạt động.
Tôi đã hỏi về vấn đề môi trường bất hòa giữa các tiện ích mở rộng và cốt lõi của php trong một câu hỏi riêng: Tại sao cần putenv () trên một biến môi trường đã được xác định?