0

任何人都可以告诉我为什么这段代码适用于第二行而不是第一行,尽管它们是相同的?

这是 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";
    }
?>
4

2 回答 2

2

您的第一行由换行符终止,而您的第二行不是。由于您的哈希不包含换行符,因此它与第一行不匹配。

读取结束时读取长度 - 1 个字节,在换行符(包含在返回值中)或 EOF(以先到者为准)。如果没有指定长度,它将继续从流中读取,直到到达行尾。- fgets 文档

于 2012-08-31T02:00:11.510 回答
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一个一个读取它并修剪换行符。

于 2012-08-31T02:06:32.387 回答