質問: '/usr/pgsql-9.3/bin/psql -U testuser example -c "SELECT * FROM test LIMIT 1"'; exec($cmd); ``` すると、 ``` $ php -f test.php Password for user testuser: ``` とパスワード入力を求めるプロンプトが表示されてしまいます。 パスワードを渡す方法が知りたいです。 なお、サーバの設定は変更できません。
回答: interactive prompts with proc_open() on psql queryにありますが、PGPASSWORD環境変数を使うのが一番簡単です。 環境変数を渡してコマンドを実行する方法は幾つかあります。 **putenvを使う方法** ``` putenv('PGPASSWORD=password'); ``` execの前に設定すればOKです。 **コマンドに含める方法** ``` $cmd = "PGPASSWORD=password /usr/pgsql-9.3/bin/psql -U testuser example -c "SELECT * FROM test LIMIT 1" ``` **proc_openの引数で渡す方法** proc_openのドキュメントを見ると第5引数に環境変数を渡せます。 ``` $process = proc_open($cmd, $descriptorspec, $pipes, null, array("PGPASSWORD" => "password")); ``` **追記** コメントでもいただきましたが、環境変数に認証情報を入れてコマンドを動かすと、/proc//environに環境変数が出力されます。 proc_openでもexecでも同じです。putenvの場合どうなるか検証できていません。 本回答に乗っている方法は環境変数を見られても構わないような環境でのみ利用するようにして下さい。