2499


phpでexecを用いてpsqlを動かそうとしました。

[code]

    $cmd = '/usr/pgsql-9.3/bin/psql -U testuser example -c "SELECT * FROM test LIMIT 1"';
    exec($cmd);
    
[/code]

すると、

[code]

    $ php -f test.php
    Password for user testuser:
    
[/code]

とパスワード入力を求めるプロンプトが表示されてしまいます。

パスワードを渡す方法が知りたいです。 なお、サーバの設定は変更できません。


CC BY-SA 3.0
2014-12-24T10:23:57.187
2492
2014-12-24T13:27:18.297
351
question
php postgresql
phpでexecを用いてpsqlを動かす際にパスワードを与える方法について


[interactive prompts with proc_open() on psql
query](https://stackoverflow.com/questions/10624298/interactive-prompts-with-
proc-open-on-psql-
query)にありますが、[PGPASSWORD環境変数](http://www.postgresql.org/docs/current/static/libpq-
envars.html)を使うのが一番簡単です。

環境変数を渡してコマンドを実行する方法は幾つかあります。

**putenvを使う方法**

[code]

    putenv('PGPASSWORD=password');
    
[/code]

execの前に設定すればOKです。

**コマンドに含める方法**

[code]

    $cmd = "PGPASSWORD=password /usr/pgsql-9.3/bin/psql -U testuser example -c "SELECT * FROM test LIMIT 1"
    
[/code]

**proc_openの引数で渡す方法**

[proc_openのドキュメント](http://php.net/manual/ja/function.proc-
open.php)を見ると第5引数に環境変数を渡せます。

[code]

    $process = proc_open($cmd, $descriptorspec, $pipes, 
                         null, array("PGPASSWORD" => "password"));
    
[/code]

* * *

  
**追記**

コメントでもいただきましたが、環境変数に認証情報を入れてコマンドを動かすと、/proc//environに環境変数が出力されます。

proc_openでもexecでも同じです。putenvの場合どうなるか検証できていません。

本回答に乗っている方法は環境変数を見られても構わないような環境でのみ利用するようにして下さい。


CC BY-SA 3.0
2014-12-24T10:23:57.187
2493
2014-12-24T13:27:18.297
2017-05-23T12:38:55.250
-1
351
2492
answer


パスワードを指定しなかった時に、特定のテキストファイル内容を参照する仕組みが Postgresql にはあります。

  * PostgreSQL 9.3.2 スワードファイル [<http://www.postgresql.jp/document/9.3/html/libpq-pgpass.html>](http://www.postgresql.jp/document/9.3/html/libpq-pgpass.html)

> ...  
>
> ユーザのホームディレクトリの.pgpassまたはPGPASSFILEで設定されるファイルは、接続にパスワードが必要な場合(かつ、他に指定されたパスワードが無かった場合)に使用するパスワードを格納するファイルです。  
>  ...  
>  Unixシステムにおいて、.pgpassの権限はグループ、他者へのアクセスをすべて拒否しなければなりません。 これはchmod 0600
> ~/.pgpassといったコマンドによって行います。 権限をこれよりも緩くすると、このファイルは無視されます。 Microsoft
> Windowsにおいては、このファイルが安全なディレクトリに格納されていることを前提としていますので、特別に行われる権限の検査はありません。  
>  ...
>


CC BY-SA 3.0
2014-12-24T13:13:54.840
2499
2014-12-24T13:13:54.840
2987
2492
answer