Windows環境でPHP+PostgreSQLなものを作る必要に迫られたので環境構築をしました。WindowsでPostgreSQL使うのは久し振りということもあり、少しだけ躓いたので、メモを残しておきます。
PostgreSQL for Windows インストーラの入手
PostgreSQLはオープンソースなソフトウェアで、通常はソースコードでの配布です。Linuxなどの多くの環境ではソースコードからのビルドも、マニュアル(日本語版・原文)に従えば非常に簡単にできます。しかし、Windows機できちんとしたビルド環境を持つのは非常に面倒臭いので、バイナリでの配布のお世話になることになります。
注1:もちろんRPMなどのパッケージでの配布もあります。
注2:Windowsでのビルド環境の用意は、もしかしたら簡単なのかもしれませんが、筆者の食わず嫌いです。
注3:マニュアル(リンクは前述)では、Windowsユーザはバイナリを落とした方が良いよ、と言っています。
Windows向けのインストーラ、昔はJPUG(日本PostgreSQLユーザ会)をはじめとしていろんな団体が配布していたのですが、今ではJPUGは配布をやめてしまったようです。そのかわり、EnterpriseDB社のサイトからダウンロードすることが可能です。
インストール方法がわからない人は、少し古いですが、 WindowsでPostgreSQLを使ってみよう — Let's Postgres あたりを参考にすれば良いんじゃないかなと思います。
XAMPPのPHPから接続
さて、本題です。
PHPで接続テスト用のコードを書いても良いのですが、ここでは接続テストのために phpPgAdmin を使用します(必須という訳ではないですが、有ったら有ったで開発には便利ですし)。導入するには、
- zip版をダウンロードしてきてxamppのhtdocs配下に解凍
phppgadmin/conf/config.inc.php
設定ファイルをいじる(詳細は後述)
という手順を踏めばOK。
恐らく上手く行かないだろう…と思いながら phpPgAdmin のURLを叩くと、案の定エラーになりました。
※エラーメッセージの言語は、ブラウザの言語設定によるようです。
さて、エラーメッセージ曰く「PHP再ビルドしてね(はぁと)」だそうですが、そんな面倒臭いことやるくらいならXAMPP利用しません。他の対処法を探しましょう。
php.ini
php.ini(xampp\php\php.ini
)の1018行目あたりに、次のような設定があります。
;extension=php_pgsql.dll
この設定ファイルで読み込むDLLの設定をやっている訳ですが、見ての通り行頭にセミコロンがあり、コメントアウトされています。
このセミコロンを除去して有効にしましょう。PDO経由でも使いたいのなら、その近くにあるphp_pdo_pgsql.dll
も有効にしとくと良いでしょう。
設定してから、XAMPPのコントロールパネルからApacheを再起動させると、今度は次のようなエラーが出ました。
先ほどのphp.iniに書いたlibpq.dll
の実体が見つからない、ということのようです。XAMPPのディレクトリを見てみると、実体はxampp\php\libpq.dll
として置いてあるようです。どうやら、ここに探しにきてくれてないようです。
DLLを探してもらうために
Windowsでは通常(明示しない場合)、DLLは環境変数PATHが指している場所を探しにいくようです。なのでPATHにxampp\php\
(もちろん実際は絶対パス)を追加すればOKです。注意しなければならないのは、このPATHの設定をした後はApacheの再起動ではなくてXAMPPコンパネ本体の再起動が必要だということです。
※PATHを設定しなくてもphp_pgsql.dll
を読めているのは、php(Windows版バイナリ)の中で、ext
ディレクトリの中を探索するように組み込まれているのでしょう。きっと(ソースは勘)。
ここまで一通り設定すると、XAMPPからApacheの起動も成功し、phpPgAdminの画面もキレイに見えます。ログインもできました。
開発環境としては、これで十分ですね。
phppgadmin/conf/config.inc.php
設定ファイルでやるべきこと
- 接続したいサーバの情報を
$conf['servers'][0]['host']
などの連想配列に与えてあげる - もしも
postgres
ユーザなどの特権ユーザで接続したいのなら、$conf['extra_login_security']
をfalse
にしてあげる
という設定変更が必要です。特に後者のことは忘れがちなので合わせてメモしておきましょう(もちろん、外部に公開しているサーバでこんな危険な設定を入れたりしちゃダメですよ)。
バージョン情報
- Windows 7 Home (64bits)
- XAMPP 1.8.2
- PostgreSQL 9.3.2
- phpPgAdmin 5.1(※phpPgAdmin5.1はPostgreSQL9.3を公式にはサポートしていません)