Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从preg_split返回的php数组不工作_Php_Arrays_String Parsing - Fatal编程技术网

从preg_split返回的php数组不工作

从preg_split返回的php数组不工作,php,arrays,string-parsing,Php,Arrays,String Parsing,我目前正在编写一个验证用户名和密码的php脚本。我正在一点一点地进行测试,现在我有一个密码文件,其中只有一行: user:0011 我正在使用preg_split解析此文件中的行,并在我的php脚本中包含以下代码: <html> <body> <?php ini_set('display_errors',1); error_reporting(E_ALL); $usr = $_POST['username']; $pass

我目前正在编写一个验证用户名和密码的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>

这个错误对我来说没有意义,因为它意味着数组的长度不足以在索引1处有一个值,但我只是打印了该值,甚至在
print\r
的结果中,它显示该索引处有一个值。有人知道是什么导致了这个错误吗?

我猜您正在进行while循环的第二次迭代;试着用一个简单的计数器来检查。如果文件中有一个换行符,则可以执行此操作

尝试在顶部执行此操作:

$lrec = trim(fgets($f));
if (empty($lrec)) {
    continue;
}
$login = preg_split("/:/",$lrec);

我猜你是在while循环的第二次迭代中;试着用一个简单的计数器来检查。如果文件中有一个换行符,则可以执行此操作

尝试在顶部执行此操作:

$lrec = trim(fgets($f));
if (empty($lrec)) {
    continue;
}
$login = preg_split("/:/",$lrec);

谢谢,成功了。您知道为什么中断不起作用吗?可能是因为数组的密码部分仍然附加了新行(
$login[1]
),所以它不匹配。希望只有
trim()
可以纠正这一点,但考虑到每次登录不匹配时都会出现这种情况,考虑到这些奇怪的情况也总是好的。谢谢,这很有效。您知道为什么中断不起作用吗?可能是因为数组的密码部分仍然附加了新行(
$login[1]
),所以它不匹配。希望只有
trim()
可以纠正这一点,但考虑到每次登录不匹配时都会遇到这种奇怪的情况,考虑到这一点也总是好的。