[PHP-users 19329]クラス変数の有効化について

Chie gontakun_72 @ yahoo.co.jp
2003年 12月 12日 (金) 15:37:36 JST


お世話になっております。Chie.M と申します。

現在他人の作ったソースを検証しています。
しかし、不明な点が多く、詰まってしまいました。
ご教授いただければと思います。

クラス変数に代入した値を、<a href = …>を使って遷移したページから
参照するようなことはできるのでしょうか?
includeしたページでは参照できるのですが、遷移した場合に
うまく取得ができないのです。

状況は下記につけましたサンプルソースに書かせていただきました。
# 長文になってしまい、申し訳ありません。

test_com.php    にある関数を test00.php で呼び出し、test01.php を
インクルードしています。ここまでは、クラス変数の値を読み出せます。

test01.php から、test02.php に遷移すると読み出せなくなります。

今までは動いていたらしいのですが、どうも不可解な書き方をしている箇所が
多く、何をやっているのかつかみにくい状態で、これは不明な物の一つです。

今まで動いていたという事で、設定やインストール等のサーバ側の
問題な気もしています。
なにかお気づきの方いらっしゃいましたら是非よろしくお願いします。

環境は以下の通りです。
RedHat9 : Apache2.0.48(httpd-2.0.48)
PHP4.3.2 : PostgreSQL7.3.2

コンパイル時の引数は下記の通りです。
Apache2
OPTIM="-O2" ./configure --enable-module=so

PHP4
OPTIM="-O2" ./configure --without-mysql \
--with-pgsql=/usr/local/pgsql \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--enable-mbstr-enc-trans \
--enable-bcmath \
--with-apxs=/usr/local/apache/bin/apxs

php.iniの設定で特筆すべきは
    register_globals = On
となっている所です。
# これが私を混乱させている原因でもあります。

test_com.php    -----------------------------------
<?php
session_cache_limiter('public');
session_start();

if(!session_is_registered("_session")){
    session_register("_session");
}

class test_class {
//    ここにあるクラス変数に格納された値を取得したい。
 var $aaa;
 var $bbb;
 var $ccc;
 var $MySession;
 
 function test_func() {
     global $_session;
    
     $this->aaa = 1;
     $this->bbb = 2;
     $this->ccc = 3;
    
    $_SESSION['_session'] = "aaaaa";
    $_session = $HTTP_SESSION_VARS['_session']; // ???
 }
}
?>

test00.php    -----------------------------------

<?php
require("test_com.php");

    $MyClassTest = new test_class();
    $MyClassTest->test_func();
    $MyClassTest->MySession = $_session; // ? ? ?

if (isset($_REQUEST["logout"])) {
    session_destroy();
    print "<a href='test00.php'>再ログイン</a>";
    exit;

} else {

// 変数に格納された値の確認
// クラス変数の値を取得可能
echo <<<_EOF
<HTML><BODY>
<B>test00.php</B><BR>
<BR>
    aaa = {$MyClassTest->aaa} <BR>
    bbb = {$MyClassTest->bbb} <BR>
    ccc = {$MyClassTest->ccc} <BR>
    Mysession = {$MyClassTest->Mysession} <BR>
    _session = {$_SESSION['_session']} <BR>
    <BR>
_EOF;

include("test01.php");
}
?>

test01.php    -----------------------------------
<?php
// 変数に格納された値の確認
// includeしたページでもクラス変数の値を取得可能
echo <<<_EOF
<B>test01.php</B><BR>
<BR>
    aaa = {$MyClassTest->aaa} <BR>
    bbb = {$MyClassTest->bbb} <BR>
    ccc = {$MyClassTest->ccc} <BR>
    Mysession = {$MyClassTest->Mysession} <BR>
    _session = {$_SESSION['_session']} <BR>
    session.use_cookies<BR>
<BR>
    →<A href="test02.php">test02.php</A>
    <BR>
</BODY></HTML>
_EOF;
?>


test02.php    -----------------------------------
<?php
// 変数に格納された値の確認
// ページが遷移するとクラス変数の値は取得不可能
echo <<<_EOF
<HTML><BODY>
<B>test02.php</B><BR>
<BR>
    aaa = {$MyClassTest->aaa} <BR>
    bbb = {$MyClassTest->bbb} <BR>
    ccc = {$MyClassTest->ccc} <BR>
    Mysession = {$MyClassTest->Mysession} <BR>
    _session ={$_SESSION['_session']} <BR>
    <BR>
    →<A href="test00.php?logout=true">ログアウト</A>
</BODY></HTML>
_EOF;
?>
    ------------------------------------------    

それでは、よろしくおねがいします。
-- 
Chie <gontakun_72 @ yahoo.co.jp>



PHP-users メーリングリストの案内