phpにはPGPASSFILE
がありますが getenv("PGPASSFILE")
で証明されているように、apacheから継承する環境では 、この環境は共有libpq
で利用できる環境ではないようです 最終的に.pgpass
を処理するライブラリ 。これが、この設定が無視される理由です。
回避策は、データベースに接続する前に、phpですでに存在する変数を環境に戻すことです。
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
明示的なputenv
libpq
で使用できるように変数をプッシュします のgetenv()
の呼び出し 。通常、プロセスには1つの環境しかないため、これは奇妙ですが、機能しているように見えます。
別の質問で、拡張機能とphpのコアの間の不一致な環境問題について質問しました: putenv()が必要な理由すでに定義されている環境変数に?