PHPでの質問です。

Basic認証でこのように認証するとします。

if($_SERVER['PHP_AUTH_USER'] == "user" &&
$_SERVER['PHP_AUTH_PW'] == "user")

別ファイルcsv形式でID,パスが保存されています。
ファイルの中身は
user1,pass1
user2,pass2
ファイル名はuser.datとします。
この場合上のコードをどのようにすれば
user.datと連動できるでしょうか?

回答の条件
  • 1人3回まで
  • 登録:2006/12/22 17:12:50
  • 終了:2006/12/24 11:06:05

回答(2件)

id:kazuokohchi No.1

kazuokohchi回答回数3ベストアンサー獲得回数02006/12/22 18:47:38

ポイント35pt

fgetcsv()という関数を使えばいいはずです。

<?php

$auth_ok = False;
$h = fopen("user.dat", "r");
while ($data = fgetcsv($h, 1000, ",")) {
    if ($_SERVER['PHP_AUTH_USER'] == $data[0] &amp;&amp;
            $_SERVER['PHP_AUTH_PW'] == $data[1]) {
        $auth_ok = True;
        break;
    }
}
fclose($h);

if ($auth_ok) {
    print "OK: " . $_SERVER['PHP_AUTH_USER'] . " = $data[0] : $data[1]\n";
} else {
    header("WWW-Authenticate: Basic realm=\"My Realm\"");
    header("HTTP/1.0 401 Unauthorized");
    print "NG: " . $_SERVER['PHP_AUTH_USER'] . " = $data[0] : $data[1]\n";
    exit;
}
?>
id:quocard

ありがとうございます。

同じ取得でもいろんな取得方法がありますね。

参考にさせていただきます。

2006/12/24 11:05:19
id:vector_xenon No.2

vector回答回数113ベストアンサー獲得回数42006/12/22 19:12:56

ポイント35pt

下記のような感じで大丈夫かと。


$aData = file('user.dat');
foreach ($aData as $val) {
    $val = trim($val);
    list($sUser, $sPass) = explode(',', $val);
    if ($_SERVER['PHP_AUTH_USER'] == $sUser &amp;&amp;  $_SERVER['PHP_AUTH_PW'] == $sPass) {
        // 認証成功
    } else {
        // 認証失敗
    }
}
id:quocard

ありがとうございます。

こういった使い方もあるのだと

とても参考になります。

2006/12/24 11:05:56

コメントはまだありません

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

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

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

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