[PHP-users 7255] PHP のバグ?

Nobuyuki.Fukuoka php-users@php.gr.jp
Wed, 1 May 2002 10:33:44 +0900


はじめまして、
このたび入会させていただいた福岡です。

環境:
Solaris/Apache(1.3.20)+OpenSSL(0.9.6)+mod_ssl(2.8.4)+PHP(4.2.0)+PostgreSQL(7.1.3
)

PHPはまだまだ初心者です。
一部にオブジェクト指向を取り入れたCGIを製作中ですが、
どうにも行き詰まってしまったので質問させてください。

以下のようなクラスがあったとします。
class    A
{
    var    $sub1,$sub2;

    function    A
    {
        $sub1 = new B;
        $sub2 = new C;
    }
    function    writeDB( $db )
    {
        $sub1->writeDB( $db );
        $sub2->writeDB( $db );
    }
}

class    B
{
    function    writeDB($db)
    {
        updateDB( $db );    // PostgreSQLテーブルの更新
    }
}

class    C
{
    function    writeDB( $db )
    {
        updateDB( $db );    // PostgreSQLテーブルの更新
    }
}

$obj =& new A;
とした場合に
$obj->writeDB($db);
を実行します。
この時にB,CそれぞれのメソッドwriteDBが実行されますが、
無事updateDB()内のpg_exec()はエラーもなく実行されるのに
テーブルの更新が行なわれない「場合」があります。
問題のSQL文はpsql上では正常に実行されるのでPostgreSQL側の問題ではないと思いま
す。

A::writeDB内の記述順序を変えると正常に動作しますが、
この現象ってC言語などでバッファオーバーフローを起こしたときと似てますよね?
要は動けばいいんですが、現状では気味悪くて完成とは言えません。
もちろん、どちらの場合もPHP、Apache、どちらもエラーは出ません。

前述ソースはかなり割愛してますが、
このようなクラスの中に別のクラスのインスタンスを含める形で
もう少し大きなツリー上になります。
その他は、
・処理によっては再帰呼び出し的な個所もあります。
・オブジェクトのやり取りは殆ど参照で行なってます。

どこかのサイトで「PHPのオブジェクトは弱い」と見たことがありますが、
「弱い」というのが他言語に比べて機能的に劣っている「弱い」なのか、
動作が安定しないという意味の「弱い」なのか?

以上をふまえて
1.PHPに未知のセキュリティホールが存在する
2.現状ではコードを書き換えて対処するしかないが、その場所の特定方法
3.オブジェクトを実装する際のやってはいけない事
4.参照を使う際の注意事項
等について情報を求みます。お願いします。

2.に関してはデバッガをインストールできれば良いのですが、
Apacheモジュールを開発中でその影響か上手く動きません。
3.4.に関してはマニュアル記載の注意事項は遵守しているつもりです。

よろしくお願いいたします。
*--------------------------------------------*
  Nobuyuki.KAPPA.Fukuoka
  HomePage : http://kappa.kusukusu.com/
  E-mail(Private) : kappa@air.linkclub.or.jp
  E-mail(Business) : fukuoka@tyo.mind.co.jp
*--------------------------------------------*