PHP言語初心者です。よろしくお願いします。

下記コードで
print_r($userpass[ $_SERVER['PHP_AUTH_USER'] ] );
では、配列の値が表示されて、
print_r( $_SERVER['PHP_AUTH_USER'] );
では、配列のキーが表示されます。
以上の理由が分かりません。どなたかご教授お願いいたします。


<?php //dr14-3.php
$userpass=array('kasai'=>'jugem21', 'taro'=>'kadabura');
if ( !isset($_SERVER['PHP_AUTH_USER'] ) )
{
header('WWW-Authenticate: Basic realm="this area" ');
header('HTTP/1.0 401 UNAuthorized' );
echo 'キャンセルボタンが押されました<br />';
exit;
}
else
{//1
if ($userpass[$_SERVER['PHP_AUTH_USER'] ] == $_SERVER['PHP_AUTH_PW'] )
{
print_r($userpass[ $_SERVER['PHP_AUTH_USER'] ] );
echo "<br />";
print_r( $_SERVER['PHP_AUTH_USER'] );
echo "<br />";
print_r( $_SERVER['PHP_AUTH_PW']);
// header('Location:http://www.yahoo.co.jp');
}
else
{
header('WWW-Authenticate: Basic realm="this area" ');
header('HTTP/1.0 401 Unauthorized');
echo 'キャンセルボタンが押されました<br />';
}

}//1

?>

回答の条件
  • 1人5回まで
  • 登録:2009/07/05 09:16:37
  • 終了:2009/07/05 16:10:10

ベストアンサー

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/07/05 10:36:13

ポイント27pt

まず、$_SERVER['PHP_AUTH_USER'] = 'kasai' となっているのは理解できますか?

このとき、配列 $_SERVER の キーは 'PHP_AUTH_USER'、値は 'kasai' であると言います。


次に、$userpass[ $_SERVER['PHP_AUTH_USER'] ですが、$_SERVER['PHP_AUTH_USER'] = 'kasai' ですから、[ ] の中を実体に置き換えると、'kasai' となります。実体に置き換えることを覚えておいてください。

スクリプトの冒頭で、関数 array を使って $userpass['kasai'] = 'jugem21' と定義しています。

ですから、$userpass[ $_SERVER['PHP_AUTH_USER'] のキーは 'kasai'、値は 'jugem21' となります。

id:gbs01

なるほど。ありがとうございます。たぶん大丈夫だと思います。

2009/07/05 15:56:31

その他の回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/07/05 09:37:32

ポイント27pt

「値」と「キー」の確認をさせてください。


ご質問のスクリプトで、たとえば 'kasai' で認証している場合、下記のようになっていれば正常です。両方とも「値」を表示しています。

スクリプト 表示内容
print_r($userpass[ $_SERVER['PHP_AUTH_USER'] ] ); jugem21
print_r( $_SERVER['PHP_AUTH_USER'] ); kasai
id:gbs01

id:pahooさんのおっしゃるとおりになっています。

分からないのは

print_r($userpass[ $_SERVER['PHP_AUTH_USER'] ] ); jugem21

print_r( $_SERVER['PHP_AUTH_USER'] ); kasai

なぜこのような違いが出るかと言うことです。どなたかご教授よろしくお願いします。

2009/07/05 09:43:25
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/07/05 10:36:13ここでベストアンサー

ポイント27pt

まず、$_SERVER['PHP_AUTH_USER'] = 'kasai' となっているのは理解できますか?

このとき、配列 $_SERVER の キーは 'PHP_AUTH_USER'、値は 'kasai' であると言います。


次に、$userpass[ $_SERVER['PHP_AUTH_USER'] ですが、$_SERVER['PHP_AUTH_USER'] = 'kasai' ですから、[ ] の中を実体に置き換えると、'kasai' となります。実体に置き換えることを覚えておいてください。

スクリプトの冒頭で、関数 array を使って $userpass['kasai'] = 'jugem21' と定義しています。

ですから、$userpass[ $_SERVER['PHP_AUTH_USER'] のキーは 'kasai'、値は 'jugem21' となります。

id:gbs01

なるほど。ありがとうございます。たぶん大丈夫だと思います。

2009/07/05 15:56:31
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/07/05 10:51:03

ポイント27pt

今回の例では print_r を使用しているので紛らわしくなっているのではないでしょうか。


本来 print_r は配列名を指定して、配列の中身全体を表示する関数ですが、配列のインデックス

を指定すれば、その配列要素がさらに配列であった場合はそれを表示しますが、今回のケースは

単純な一次元配列ですから、インデックスを指定した場合「」になります。


ですから、

print_r($userpass[ $_SERVER['PHP_AUTH_USER'] ] );

print $userpass[ $_SERVER['PHP_AUTH_USER'] ];

は同じ結果になります。


これは $_SERVER['PHP_AUTH_USER'] は実際に 'kasai' であった場合、これは

print $userpass[ 'kasai' ];

と同じことですから、'jugem21' となります。


print_r( $userpass );
print_r( $_SERVER );

と比較してみれば、今回の結果はその中身のどれかが表示されているわけですから、

理解できないでしょうか。


http://www.scollabo.com/banban/php/ref/ref_print_r.html

id:gbs01

ありがとうございます。試してみます。

2009/07/05 15:58:27
  • id:Mook
    pahoo さんが2回目の回答していましたね。

    おそらくそれで十分だと思いますので、解決した場合は開封不要です。
  • id:gbs01
    コメントありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません