0

我目前正在编写一个验证用户名和密码的 php 脚本。我正在一点一点地测试东西,现在我有一个密码文件,里面只有一行:

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 循环的第二次迭代;试着扔一个简单的柜台来检查。如果文件中有换行符,可以这样做。

尝试在顶部执行此操作:

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