0

私は現在、ユーザー名とパスワードを検証するphpスクリプトを書いています。私は少しずつテストを行っていますが、今は1行しかないパスワードファイルがあります。

user:0011

このファイルの行を解析するために使用preg_splitしており、phpスクリプトに次のコードが含まれています。

<html>
<body>

<?php 

    ini_set('display_errors',1);
    error_reporting(E_ALL);

    $usr = $_POST['username'];
    $pass = $_POST["pword"];


    $f = fopen('passwords.txt','r');
    $auth = false;

    while(!feof($f))
    {
        $login = preg_split("/:/",fgets($f));
        echo $login[0]."<br/>";
        echo $login[1]."<br/>";
        print_r($login);
        if($usr == $login[0] && $pass == $login[1])
        {
            echo "in if<br/>";
            $auth = true;
            break;
        }
    }

    if($auth)
        echo "success";
    else
        echo "fail!";

    /*$test = preg_split("/:/","me:you");
    echo $test[0];*/


    fclose($f);
?>

</body>
</html>

問題は、これが私に与える出力であるということです:

user
0011
Array ( [0] => user [1] => 0011 )
Notice: Undefined offset: 1 in /srv/www/htdocs/PHP/val.php on line 20
Array ( [0] => ) fail!

このエラーは、配列がインデックス1の値を持つのに十分な長さではないことを意味しているため、私には意味がありませんが、その値を出力しただけで、その結果でもprint_rそのインデックスに値があることが示されています。誰かがこのエラーの原因を知っていますか?

4

1 に答える 1

3

私の推測では、whileループの2回目の反復を行っています。簡単なカウンターを投げて確認してください。ファイルに改行がある場合は、それを実行します。

上部でこれを試してください:

$lrec = trim(fgets($f));
if (empty($lrec)) {
    continue;
}
$login = preg_split("/:/",$lrec);
于 2011-06-10T16:20:53.793 に答える