0

私は PHP が初めてで、グローバル変数の使用に問題があります。profile というグローバル配列があります。ただ、プロファイルの特定のインデックス「authorized」の内容へのアクセスを宣言すると、設定した関数以外では値が変化しません。配列が宣言されたときに、配列で宣言されていません。ただし、これが他のインデックスで発生するインスタンスがあるため、よくわかりません。どんな助けでも本当に役に立ちます!

プロフィールの宣言:

/**
 * User profile
 * @name $profile
 * @global array $GLOBALS['profile']
 */
$GLOBALS['profile'] = array(
    # Basic Config - Required
'username' => 'tom',
'x' => 'filler',
'y' => 'filler',
'salt' => 'filler',

    # Optional Config - Please see README before setting these
#   'microid'   =>  array('mailto:user@site', 'http://delegator'),
#   'pavatar'   =>  'http://your.site.com/path/pavatar.img',

    # Advanced Config - Please see README before setting these
    'allow_gmp' =>  true,
#   'allow_test'    =>  false,
#   'allow_suhosin' =>  false,
#   'auth_realm'    =>  'phpMyID',
#   'force_bigmath' =>  false,
#   'idp_url'   =>  'http://192.168.1.5/MyID.config.php',
#   'lifetime'  =>  1440,
#   'paranoid'  =>  false, # EXPERIMENTAL

    # Debug Config - Please see README before setting these
#   'debug'     =>  false,
#   'logfile'   =>  '/tmp/phpMyID.debug.log',
);

profile['authorized'] が設定されている関数:

/**
 *Handles the validation of the signature from the user
 */
function validate_mode()
{
global $profile;

user_session();


$qString = strtoupper('abc');
$pString = strtoupper('abc');
$gString = '10';
$aString = strtoupper($_POST['a']);
$zString = strtoupper($_POST['z']);
$yString = strtoupper($_POST['y']);
$cString = $_POST['c'];
$c = gmp_init($cString, 16);
//echo$cString;

$q1 = gmp_init($qString, 16);
$p1 = gmp_init($pString, 16);
$g1 = gmp_init($gString, 16);
$a = gmp_init($aString, 16);
$z = gmp_init($zString, 16);
//$hex_y = base64_decode(yString);
$y = gmp_init($yString, 16);
//echo $yString;

$hash = sha1($pString,false);

$hash = $hash . sha1($qString,false);
$hash = $hash . sha1($gString,false);
$hash = $hash . sha1($yString,false);
$hash = $hash . sha1($cString,false);
$hash = $hash . sha1($aString,false);
$full_hash =sha1($hash,false);

//echo $full_hash;
if (gmp_cmp($z, $q1) < 0)
    {
        $temp_ans = gmp_powm($a, $q1, $p1);
        if (gmp_cmp($temp_ans, 1) == 0)
        {

                $this_hash = gmp_init($full_hash, 16);
                $temp_pow = gmp_powm($g1,$z,$p1);
                $temp_inner =gmp_powm($y,$this_hash, $p1);
                $temp_mid = gmp_mul($a, $temp_inner);
                $temp_pow2 = gmp_mod($temp_mid, $p1);

                if (gmp_cmp($temp_pow, $temp_pow2) == 0)
                {   
                    $compare = strcmp($cString,$_SESSION['challenge']);
                    if ($compare == 0)
                    {
                        $_SESSION['auth_url'] = $profile['idp_url'];

                        $profile['authorized'] = true;
                        // return to the refresh url if they get in
                        wrap_redirect($profile['idp_url']."?openid.mode=id_res");
                    }//ends the $compare == 0;
                    else 
                        echo "The session stored challenge value does not match the one supplied"."\n";
                }//ends the gmp_cmp if statement.
                else
                    echo"g^z mod p doesn't equal a*y^c mod p"."\n";
        }//ends the if($temp_ans ==1)
        else
            echo"a^q  mod p does not equal 1 so we exited"."\n";
    }//ends the if comparing of z and q
    else
        echo"Z is greater than Q so it is exiting"."<br>";
}//ends the validate mode

profile['authorized'] がアクセスされ、値が変更されていない関数:

function id_res_mode () {
    global $profile;
echo "authorization".$profile['authorized'];
    user_session();

    if ($profile['authorized'])
        wrap_html('You are logged in as ' . $_SESSION['username']);

    wrap_html('You are not logged in');
}
4

1 に答える 1

1

配列で承認済みを宣言しませんでした。参考までに、次回デバッグするときに、警告のエラー報告をオンにしていると、「未定義のインデックス」警告が表示されます。

于 2012-05-13T22:31:50.653 に答える