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

标签 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 或除零以外的任何值。

我真的不知道为什么会发生这种情况,我已经尝试了我能想到的一切。有人能告诉我这是怎么回事吗?

最佳答案

不要忘记在 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/

相关文章:

php - 与 PHP 和 mySQL 的异步事务

c - 使用 strcmp 搜索文件(运行时错误)

c - strcmp 在 c 中的相等字符串上不返回 0

php - undefined variable :$ Laravel 5

php - 从 1 个表中获取值,该表也在另一个表中且不在另一个表中

c - 我不明白 strcmp 结果

c - strcmp 拒绝工作

c++ - 比较 const char * 和 strcmp

php - 禁用基类 TYPO3 中的换行

PhpOffice\PhpSpreadsheet 无法为列或整个电子表格设置默认格式