[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への接続リソースを定数としてセットしておくことに
     そもそも無理があるんじゃないの?
     #だってでもこうすると便利なんだもん、、、

みなさんのご意見求むです・・・。