PHP 的 strcmp 函数给出奇怪的输出?
PHP's strcmp function giving weird outputs?
我有一个名为 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
returns 0 匹配得很好。然后,当我尝试匹配 steve
和 pass2
或任何其他理论上有效的组合,方法 strcmp
returns -2、-1 或任何非零的值。
我真的不知道为什么会这样,我已经尝试了所有我能想到的方法。谁能告诉我这是怎么回事?
不要忘记在 file()
:
中添加标志
$lines = file("users.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
这基本上是在您的密码字段中添加 newline
。如果仔细检查,您的密码中会添加一些换行符:
var_dump($inputPassword);
string(7) "pass2
"
因此不匹配。
我有一个名为 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
returns 0 匹配得很好。然后,当我尝试匹配 steve
和 pass2
或任何其他理论上有效的组合,方法 strcmp
returns -2、-1 或任何非零的值。
我真的不知道为什么会这样,我已经尝试了所有我能想到的方法。谁能告诉我这是怎么回事?
不要忘记在 file()
:
$lines = file("users.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
这基本上是在您的密码字段中添加 newline
。如果仔细检查,您的密码中会添加一些换行符:
var_dump($inputPassword);
string(7) "pass2
"
因此不匹配。