- - PR -
PHP+Postgresの連携
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-08 22:10
Linux初心者のkozと申します。
PHPとPostgresの連携がうまくいかず困っています。 どのように調査し対処すればよいか教えて戴けると助かります。よろしくお願いします。 apacheエラーログに以下のメッセージが在ります。 PHP Warning: pgsql: Unable to register functions, unable to load in Unknown on line 0 [client 192.168.1.4] PHP Warning: pg_connect(): Cannot create new link. Too many open links (0) in /var/www/html/wiz/class/DBConnectPgsql.php on line 32 環境は以下のとおりです。インストールは全てyumで行ないました。 FedoraCore3 httpd-suexec-2.0.52-3.1 httpd-2.0.52-3.1 httpd-manual-2.0.52-3.1 php-pgsql-4.3.11-2.5 php-mbstring-4.3.11-2.5 php-pear-4.3.11-2.5 php-ldap-4.3.11-2.5 php-mysql-4.3.11-2.5 php-4.3.11-2.5 postgresql-python-7.4.6-1.FC3.1 postgresql-7.4.6-1.FC3.1 postgresql-libs-7.4.6-1.FC3.1 postgresql-server-7.4.6-1.FC3.1 phpinfo()で表示されるconfigure情報は以下のとおりです。 './configure' '--build=i386-redhat-linux' '--host=i386-redhat-linux' '--target=i386-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--enable-force-cgi-redirect' '--disable-debug' '--enable-pic' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-db4=/usr' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-gd=shared' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-ncurses=shared' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-png' '--with-pspell' '--with-xml' '--with-expat-dir=/usr' '--with-dom=shared,/usr' '--with-dom-xslt=/usr' '--with-dom-exslt=/usr' '--with-xmlrpc=shared' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-bcmath' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-track-vars' '--enable-trans-sid' '--enable-yp' '--enable-wddx' '--with-pear=/usr/share/pear' '--with-imap=shared' '--with-imap-ssl' '--with-kerberos' '--with-ldap=shared' '--with-mysql=shared,/usr' '--with-pgsql=shared' '--with-snmp=shared,/usr' '--with-snmp=shared' '--enable-ucd-snmp-hack' '--with-unixODBC=shared,/usr' '--enable-memory-limit' '--enable-shmop' '--enable-calendar' '--enable-dbx' '--enable-dio' '--enable-mbstring=shared' '--enable-mbstr-enc-trans' '--enable-mbregex' '--with-mime-magic=/usr/share/file/magic.mime' '--with-pic' '--with-apxs2=/usr/sbin/apxs' | ||||
|
投稿日時: 2005-05-09 00:38
お初にお目にかかります。がると申します。
とりあえずエラー内容ですが、 PHP Warning: pg_connect(): Cannot create new link. Too many open links の言葉の指し示すとおりです。 PostgreSQLへの接続が制限数に達したので「これ以上はあきません」 といってます。 当面の対処方法については http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11345&forum=10&3 をご覧下さい。 あとは根本的な問題としては ・connectしたらdeconnectする ことを心がけましょう。 プログラムが「正常ルートをたどったとき」にはdeconnectしていても、 別ルートで「deconnectされていないルート」が存在していることは 多々ありますので。 | ||||
|
投稿日時: 2005-05-09 11:15
がる様、レスありがとうございます。
こちらに投稿する前にご指摘の対処方法を試していたのですが、現象は変わりませんでした。 実はまだ一度もpg_connect()は成功していません。それでも接続の制限数に達するのでしょうか。 コマンドラインで行った処理(select等)が何か影響を与えてしまっているんでしょうかね....。 | ||||
|
投稿日時: 2005-05-09 22:10
こんばんは。
Fedora Core 3 のようなので一言だけ… SELinuxでひっかかってないでしょうか? | ||||
|
投稿日時: 2005-05-09 22:27
ちょっと見た限りだと、
>PHP Warning: pgsql: Unable to register functions, unable to load in Unknown on line 0 ここがすごく気になるのですが、何かPostgresの関数を定義しているのでしょうか? (関数定義とか全然使ってないから詳しい話できなくて申し訳ありませんが(汗)) >Too many open links (0) in /var/www/html/wiz/class/DBConnectPgsql.php on line 32 このメッセージからすると、pg_connectを生で使ってるのではなくて、なんらかのクラスを使ってるみたいですが、単にpg_connectするだけのスクリプトではエラーは出ないのでしょうか? | ||||
|
投稿日時: 2005-05-10 01:12
angel様、レスありがとうございます。
/etc/sysconfig/selinuxを確認したところ SELinux=disabled となっておりました。 | ||||
|
投稿日時: 2005-05-10 01:27
冬寂さん、レスをありがとうございます。
>ここがすごく気になるのですが、何かPostgresの関数を定義しているのでしょうか? >(関数定義とか全然使ってないから詳しい話できなくて申し訳ありませんが(汗)) PHPで書かれているグループウエアを使用しています。ちなみに実行時以下のエラーも出ます。 Notice: Constant CIRCULAR_FLOW already defined in /var/www/html/wiz/include/constant.conf on line 17 Notice: Constant HOLIDAY_FLOW already defined in /var/www/html/wiz/include/constant.conf on line 18 Notice: Constant TELECOMMUTING_FLOW already defined in /var/www/html/wiz/include/constant.conf on line 19 Notice: Constant FILE_FLOW already defined in /var/www/html/wiz/include/constant.conf on line 20 Notice: Constant SCHEDULE_LENGTH already defined in /var/www/html/wiz/include/constant.conf on line 22 Warning: pg_connect(): Cannot create new link. Too many open links (0) in /var/www/html/wiz/class/DBConnectPgsql.php on line 32 グループウエアの問題か?と思い、単純にpg_connectをするだけのプログラムを実行しましたが、結果は同じでした。 | ||||
|
投稿日時: 2005-05-12 10:40
これらのNoticeメッセージを単純に読み解くと、グループウェアでconstant.confを何度も読みこもうとしてしまっている、という所でしょうか? 例えば、constant.conf(及び、同様に何度も読みこまれてしまっているスクリプト)でpg_connectしてたとしたら、conectionが使い果たされている可能性があるかもしれません。 (すでに「出来あがっている」ソリューションでそういう事が起こり得るというと・・・設定ミスとかかな?) だとすると、postgresを再起動した直後、できればサーバの起動直後(つまり、グループウェアに一度も触れない状態で)pg_connectするだけのプログラムを動かしてみて、動くか調べてみて下さい。 (といっても、普通は、PHPスクリプトが終了した時点で、pg_connectのconnectionは破棄されているはずです。グループウェアの方で、pg_pconnectが使われてるのかなぁ。。。) |