[PHP-users 4968] バグ?仕様?複数のpostgre接続リソースを定数にできない?
Y.Watanabe
php-users@php.gr.jp
Fri, 25 Jan 2002 13:28:11 +0900
わたなべです。
phpのバグなんだか仕様なんだかわからないことに遭遇してまして、
みなさんのご意見をきかせてください。
ひとつのPostgreSQLエンジン内に、2つのデータベースが存在します。
データベース名はそれぞれ db01, db02 です。
(なんでひとつにまとめないの?という話はおいといて)
このとき、以下のphpスクリプトは正常に動作します。
<?php
$dbconn01 = pg_connect("dbname=db01 user=username");
$dbconn02 = pg_connect("dbname=db02 user=username");
pg_exec($dbconn01,"select * from hogehoge");
pg_exec($dbconn02,"select * from fugafuga");
?>
ところが、複数のpostgreへの接続リソースを「定数」として設定すると、
WEBサーバが反応しなくなります。(phpのエラーメッセージもでない)
ブラウザ(IE)は
「ページを表示できません(・・・)
サーバーが見つからないかDNS エラーです。」
の表示となります。(もちろんDNS設定はちゃんとしてます)
問題となるスクリプトは以下のとおり。
<?php
define ("DBCONN01",pg_connect("dbname=db01 user=username"));
define ("DBCONN02",pg_connect("dbname=db02 user=username"));
pg_exec(DBCONN01,"select * from hogehoge");
pg_exec(DBCONN02,"select * from fugafuga");
?>
ちなみに、
<?php
define ("DBCONN01",pg_connect("dbname=db01 user=username"));
pg_exec("DBCONN01","select * from hogehoge");
?>
のように定数としてのpostgreリソースがひとつしかない場合には
正常に作動します。
しかし、
<?php
define ("DBCONN01",pg_connect("dbname=db01 user=username"));
$dbconn02 = pg_connect("dbname=db02 user=username");
pg_exec(DBCONN01,"select * from hogehoge");
pg_exec($dbconn02,"select * from fugafuga");
?>
のように、ふたつの接続リソースの片方を定数として、もう片方を
通常の変数とした場合にも、やはりWEBサーバが反応しなくなります。
apache のエラーログには
child pid 3833 exit signal Segmentation fault (11)
というのがいくつか残っていました。
どうやら子プロセスが死んでしまうようです。
# Postgreエンジンの動作ログがどこだかわからない・・・
# ログ残す設定にしなかったかも(涙)
環境は RedhatLinux6.2(en) + php4.1.1 + PostgreSQL7.1.3 です
さて、
(a)これはphp4.1.1のバグだ!
(b)いや、仕様でしょ
(c)define (DBCONN01,pg_connect("dbname=db01 user=username"));
みたいにpostgreへの接続リソースを定数としてセットしておくことに
そもそも無理があるんじゃないの?
#だってでもこうすると便利なんだもん、、、
みなさんのご意見求むです・・・。