我有一个名为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。然后,当我尝试匹配 steve
和 pass2
或任何其他理论上有效的组合,方法 strcmp
返回 -2、-1 或除零以外的任何值。
我真的不知道为什么会发生这种情况,我已经尝试了我能想到的一切。有人能告诉我这是怎么回事吗?
最佳答案
不要忘记在 file()
中添加标志:
$lines = file("users.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
这基本上会在您的密码字段中添加换行符
。如果您仔细检查,您的密码中添加了一些换行符:
var_dump($inputPassword);
string(7) "pass2
"
因此不匹配。
关于PHP 的 strcmp 函数给出奇怪的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30044093/