タグ ‘php’ の記事

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に接続できない