人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

?>

●質問者: gbs01
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Area BASIC echo EXIT HTTP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●27ポイント

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


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

スクリプト 表示内容
print_r($userpass[ $_SERVER['PHP_AUTH_USER'] ] ); jugem21
print_r( $_SERVER['PHP_AUTH_USER'] ); kasai
◎質問者からの返答

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

分からないのは

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

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

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


2 ● pahoo
●27ポイント ベストアンサー

まず、$_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' となります。

◎質問者からの返答

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


3 ● Mook
●27ポイント

今回の例では 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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ