任何人都可以告诉我为什么这段代码适用于第二行而不是第一行,尽管它们是相同的?
这是pass.txt文件:
01234567 5f4dcc3b5aa765d61d8327deb882cf99
01234567 5f4dcc3b5aa765d61d8327deb882cf99
以下是代码:
<?php
$f = fopen("pass.txt", "r");
if ($f) {
$buffer = fgets($f);
$buffer = fgets($f); //Comment out this line to read the first line
$token = explode(' ', $buffer);
if ($token[1] == hash('md5', 'password'))
echo "Password correct";
else
echo "Password incorrect";
}
?>
答案 0 :(得分:2)
您的第一行是换行符,第二行不是。由于您的哈希不包含换行符,因此它与第一行不匹配。
读取长度 - 读取1个字节,换行(包含在返回值中)或EOF(以先到者为准)时结束。如果没有指定长度,它将继续从流中读取,直到它到达行尾。 - fgets documentation
答案 1 :(得分:1)
正如@David Schwartz指出的那样,最可能的原因是换行符。
您可以使用file
函数忽略换行符。
foreach (file('pass.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
$token = explode(' ', $line);
if ($token[1] == hash('md5', 'password'))
echo "Password correct";
else
echo "Password incorrect";
}
如果文件非常大,请使用fgets
逐一阅读并修剪换行符。