[PHP-users 6141] Re: 4.0.6 と4.1.2のsessionの扱いの違いについて

Hideyuki Shimooka php-users@php.gr.jp
Thu, 14 Mar 2002 00:54:35 +0900


こんばんは。下岡です。

#ちょっと長いです。。。

---- S.Okazakiさん曰く...

>4.1.2と4.0.6が動いているマシンがあります。
>その二つで全く同じプログラムを動かしたときに、
>4.1.2だと動かないプログラムがあります。
(snip)
>登録されていませんでした。

気になったので、サンプル(最下参照)を作って試してみましたが、
両バージョンとも動きました。。。(^-^;

また、/tmpに作成されたセッションファイル(と言うのかな?)を
確認して見ましたが、両バージョンとも以下のような内容で同一で
した。

----ここから

l|O:5:"mylog":4:{s:11:"member_var3";s:18:"mylog_var_override";
s:11:"member_var4";s:13:"about_log_var";s:11:"member_var1";
i:100;s:11:"member_var2";s:12:"hogehogehoge";}

※折り返していますが、実際は1行です

----ここまで

ちなみに環境は、

・VineLinux2.1.5
・Apache1.3.23
・PHP4.0.6/4.1.2
・php.iniはphp.ini-optimized(4.0.6)/php.ini-recommended(4.1.2)
 をベースにmbstring、output_buffering、output_handlerを有効に
 したもの

です。


>$l->hoge();
>
>の用に実行すると、4.0.6の場合は、問題なく動作しますが、
>4.1.2の場合は
>Fatal error: Call to undefined function: hoge() in ・・・
>と、未定義関数と見なされてしまいます。

get_class($l)したときに、mylogが返ってきますか?


>この辺り、何か扱い方が違うのでしょうか?

セッション関連では、register_globalsがOffの時のセッション変数
名が違いますね。

ちなみに、register_globalsをOnにしても、両バージョンで正しく
動作しました。

----ここから

●test1.php
<?php
class about_log
{
    var $member_var1;
    var $member_var2;
    var $member_var3 = "about_log_var_overridden";
    var $member_var4 = "about_log_var";
    function hoge()
    {
        echo "about_logのhoge<br>";
        $this->member_var1 = 1;
        $this->member_var2 = "hogehoge";
    }
    function fuga()
    {
        echo "about_logのhoge<br>";
        $this->member_var1 = 11;
        $this->member_var2 = "fugafuga";
    }
}
?>

●test2.php
<?php
require_once("test1.php");
class mylog extends about_log
{
    var $member_var1;
    var $member_var2;
    var $member_var3 = "mylog_var_override";
    function hoge()
    {
        echo "mylogのhoge<br>";
        $this->member_var1 = 100;
        $this->member_var2 = "hogehogehoge";
    }
    function fuga()
    {
        echo "mylogのhoge<br>";
        $this->member_var1 = 110;
        $this->member_var2 = "fugafugafuga";
    }
}
?>

●test.php
<?php
    require_once("test2.php");
    $l = new mylog;
    session_register("l");
    $l->hoge();
    echo "\$member_var1=" . $l->member_var1 . "<br>";
    echo "\$member_var2=" . $l->member_var2 . "<br>";
    echo "\$member_var3=" . $l->member_var3 . "<br>";
    echo "\$member_var4=" . $l->member_var4 . "<br>";
    echo phpversion() . "!!<br>";
?>

●結果
mylogのhoge
$member_var1=100
$member_var2=hogehogehoge
$member_var3=mylog_var_override
$member_var4=about_log_var
4.1.2!!

----ここまで

-- 
H.Shimooka/shimooka@axissoft.co.jp