PHP;使用带有SplFileObject::fseek的fgetcsv;行读取问题

5
当从csv文件中读取特定行时,我尝试使用SplFileObject::fseekfgetcsv
例如,要读取第二行,我先用fseek(1)然后再用fgetcsv获取第二行。
当我用fseek(0)并用fgetcsv读取时,我获取到的是第一行而不是第二行。
所以用这种方式读取第一行存在问题。(我知道可以连续读取两行,但觉得这样做不太好)。
我在2008年发现了此问题,并且在PHP 5.2.6版本中有相关报告:SplFileObject: fgetcsv after seek returns wrong line
我使用的是PHP版本5.4.19。
请问大家是否有相关信息?这是意料之中的吗?

最好链接到 PHP 的 bug 网站:https://bugs.php.net/bug.php?id=46569 - Barmar
他们还没有关闭这个错误报告,所以我认为这不是故意的。他们只是还没有抽出时间来修复它。 - Barmar
1个回答

1

我知道这是一个相当老的漏洞,但它仍然在bugs.php上保持开放状态 因此,这里是一个片段,我想分享一下,以实现相同的效果(至少在我的情况下有效)

function readBigCsv($path, $skip=1)
{
    $file = new \SplFileObject($path, 'r');
    $file->setFlags(\SplFileObject::READ_CSV);
    $file->seek($skip);

    while (!$file->eof()){
        yield $file->current();
        $file->next();
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接