加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Fgets进展 – 更简单的方法?

发布时间:2020-12-13 15:58:53 所属栏目:PHP教程 来源:网络整理
导读:我读了一个大文本文件~500MB,希望在我的阅读操作中取得进展. 为此,我现在计算文件所包含的行,然后将其与我已读过的行进行比较.这需要对文件进行两次完整的迭代.使用filesize和fgets缓冲区大小有更简单的方法吗? 我目前的代码如下: $lineTotal = 0;while ((
我读了一个大文本文件~500MB,希望在我的阅读操作中取得进展.

为此,我现在计算文件所包含的行,然后将其与我已读过的行进行比较.这需要对文件进行两次完整的迭代.使用filesize和fgets缓冲区大小有更简单的方法吗?

我目前的代码如下:

$lineTotal = 0;
while ((fgets($handle)) !== false) {
    $lineTotal++;
}

rewind($handle);

$linesDone = 0;
while (($line = fgets($handle)) !== false) {
    progressBar($linesDone += 1,$lineTotal);
}

解决方法

基于字节而不是行,但您可以使用 filesize快速获取文件的总大小:

$bytesTotal = filesize("input.txt")

然后,在打开文件后,您可以读取每一行,然后在文件中获取您的current position,例如:

progressBar(0,$bytesTotal);
while (($line = fgets($handle)) !== false) {
    doSomethingWith($line,'presumably');
    progressBar(ftell($handle),$bytesTotal);
}

有一些警告说PHP整数可能无法处理超过2G的文件,但是,由于你指定的文件大约是500M,这应该不是一个直接的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读