PHP的strcmp函数给出了奇怪的输出?

时间:2015-05-05 04:07:47

标签: php strcmp

我有一个名为users.txt的文件,其中有很多用户名和密码组合。以下是此文件的示例:

kyle:pass1
steve:pass2
john:pass3
ralph:pass4

因此,用户名为steve,密码为pass1。这些通过POST传递给我的文件login.php。所以这就是我到目前为止所写的内容:

$username = $_POST["name"];
$password = $_POST["password"];

$lines = file("users.txt");
foreach($lines as $line) {
    $inputUserInfo = explode(":", $line);
    $inputUsername = $inputUserInfo[0];
    $inputPassword = $inputUserInfo[1];
    if (strcmp($username, $inputUsername) == 0) {
        echo 'username matched!';
    }
    if (strcmp($password, $inputPassword) == 0) {
        echo 'password matched!';
    }
}

我不确定发生了什么,但用户名匹配正常,方法strcmp返回0.然后,当我尝试匹配stevepass2的密码时,或者任何其他理论上有效的组合,方法strcmp返回-2,-1或除零之外的其他任何东西。

我真的不知道为什么会这样,我已经尝试了我能想到的一切。谁能告诉我们这里发生了什么?

1 个答案:

答案 0 :(得分:2)

请勿忘记在file()内添加标记:

$lines = file("users.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

这基本上会在您的密码字段中添加newline。如果仔细检查一下,您的密码会添加一些新行:

var_dump($inputPassword);

string(7) "pass2 
        " 

因此不匹配。