我目前正在编写一个验证用户名和密码的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
显示的结果中显示该指数有一个值。有谁知道是什么导致了这个错误?
答案 0 :(得分:3)
你在while循环的第二次迭代是我的猜测;试着扔一个简单的柜台来检查。如果文件中有换行符,则可以执行此操作。
尝试在顶部执行此操作:
$lrec = trim(fgets($f));
if (empty($lrec)) {
continue;
}
$login = preg_split("/:/",$lrec);