首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fgets()故障

fgets()故障
EN

Stack Overflow用户
提问于 2012-08-31 09:58:27
回答 2查看 329关注 0票数 0

谁能告诉我为什么这段代码可以处理第二行而不是第一行,尽管它们是一样的?

下面是pass.txt文件:

代码语言:javascript
复制
01234567 5f4dcc3b5aa765d61d8327deb882cf99
01234567 5f4dcc3b5aa765d61d8327deb882cf99

代码如下:

代码语言:javascript
复制
<?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";
    }
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-31 10:06:32

正如@David Schwartz所指出的,最可能的原因是换行符。

您可以使用file函数忽略换行符。

代码语言:javascript
复制
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逐个读取并修剪换行符。

票数 1
EN

Stack Overflow用户

发布于 2012-08-31 10:00:12

第一行以换行符结尾,第二行不是。因为您的散列不包括换行符,所以它不会与第一行匹配。

在新行(包含在返回值中的)或EOF (以先出现的为准)上读取长度为-1字节时,

读取结束。如果没有指定长度,它将一直从流中读取,直到它到达行尾。-- fgets documentation

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12207981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档