Windows + PHP5.2 + PostgreSQLでハマった人へ

Fatal error: Call to undefined function: pg_connect…のエラー

WindowsでWebサーバーを公開しておられるあるお客さんが、CMSを導入するとのことでPHPとPostgreSQLの設定を行うことになって、ものすごくハマってしまったので、同じことで困るかもしれない人のために情報を残しておきます。
問題が起こった環境は以下のような感じ
・Windows Server 2003
・PostgreSQL 8.4.0
・PHP5.2.10
インストールは普通にうまくいって、PHPも単体では動いていることを確認。
でも、どうやってもPHPからPostgreSQLに接続ができない。
pg_connectメソッドで、以下のようなエラーが
Fatal error: Call to undefined function pg_connect() in…
しかも、phpinfoの情報にもPostgreSQLのpgsqlブロックが表示されてないみたい?
ちゃんと、php.iniファイルの、「extension=php_pgsql.dll」も確認したし、もちろんhttpdの再起動もしたし…
それでもやっぱりエラーは消えないし…

お客さん、そのDLL壊れてますよ!

いろいろと調べてみると、どうやらPostgreSQLライブラリ「php_pgsql.dll」が怪しい感じ。
どうやら、Windows版のPHP5.2.6以降のバイナリに含まれる php_pgsql.dll は壊れている?
念のためチェックしてみると、php_pgsql.dll のファイルサイズは97kb。
どうやらビンゴのようで(-_-;)

php_pgsql.dllを入れ替える

とりあえずは、古いバージョンのWindows版PHPに含まれるphp_pgsql.dll と交換する必要があるらいしいので、http://www.php.net/releases/から、PHP5.2.5のWindows binaryをダウンロード。
解凍して、extディレクトリの中のphp_pgsql.dll を見てみると、ファイルサイズは165KB。
5.2.10の97KBと全然違いますやん。
で、PHP5.2.10のextディレクトリにあるphp_pgsql.dll を5.2.5のものに置き換えてみると…
すんなりつながりました。
え~、PHPのWindows binaryのバグ!?
PHP5.2.5~5.2.10まで、ずーっとバグったまま?
とりあえず、Windows + PHP + PostgreSQLの環境では、有名な話らしいんで、すぐに情報が見つかって助かりました。
【追記】
コメントにて、もっとスマートな解決方法を教えて頂きましたので、以下リンクしておきます。
PHP、Windows+PHP5.2.6以降でPostgreSQLに接続できない

その他、関連記事

RSS購読RSS配信中…ご利用のRSSリーダーにご登録お願いします。

»»トラックバックURL⇒ http://blog.itoy.jp/develop/windows-php5-2-postgresql.html/trackback
»»RSSでこの記事のレスポンスをチェックRSS購読

コメント&トラックバック ありがとうございます(6 件)

  1. やー より:

    俺もハマりましたorz…そして助かりました。
    自分の設定を最初に疑った自分にバグがあったようですw

  2. php5+winのバグ

    Windowsにphp5+postgresqlの環境でテストしていたんですが…..

  3. ドンQ より:

    >やー様
    私も思いっきりハマりました(-_-;)
    これがまたすでに静的なサイトを運営しておられる環境に、CMSを導入されるためにPHP + PostgreSQLが動く環境を作って欲しいという依頼だったんで、php.iniを書き換えるたびに再起動のお願いをする事の辛いこと…
    ほんと参りました…

  4. Tsuyoshi より:

    可笑しいなぁ、Postgreは8.3ですが
    Win+PHP5.2.10で私Postgreに接続できます。
    dllは97kbですが壊れてるなら接続出来るのは納得できないかも?
    ちゃんとlibpq.dllをC:\Windows\system32にコピーするかphpのディレクトリを環境変数に入れてますか?

  5. ドンQ より:

    >Tsuyoshi さま
    情報ありがとうございます。
    残念なのは…
    もう今となってはそのサーバーも手元に無いので、せっかくもらった情報を実践できないことでしょか。
    とにかく感謝ですー

  6. Tsuyoshi より:

    私も調べてブログにまとめさせて頂いたのですが、現在配布中止になったPHP5.2.7は取り敢えず置いといてPHP5.2.8からはlibpq.dllというdllが新たに置かれるようになったようなので、おそらくPHP側の対応かと思います。
    考えてみればphp_pgsql.dllをPHP5.2.5のもので置き換える方法で解決できるのであればいつまでもPHPが放って置くのも理解し難いですしね^^;

気軽にご意見お待ちしてます

※は必ず入力してください
(公開されません)