如何使用 PHP 讀取大 gz 文件的部分內容

盧卡

我需要讀取一個大的 txt 文件(超過 1GB)才能提取其中的多個字符串。使用 gzread,我可以從頭讀取到一定量的 kb(比如 1000000)。但是我怎樣才能讀取文件的下一個 1000000kb 呢?有沒有辦法從一個點開始並從那裡讀取 1000000kb 直到文件沒有完成?

$filename = "my_big_file.txt.gz";
$zd = gzopen($filename, "r");
$readfile = gzread($zd,1000000); 
$first_array = explode("IT\\",$readfile);
unset($first_array[0]);
foreach($first_array as $row){
  $full_id = explode(" ",$full_id);
  echo $full_id[0];
  echo "<br>";
}
gzclose($zd);
杜馬

更新; 在沒有while循環的情況下獲得特定部分

$filename = "my_big_file.txt.gz";
$zd = gzopen($filename, "r");
fseek($zd, 1000000); # jump to a new position here 
$readfile = gzread($zd,1000000);
//...process $readfile 
gzclose($zd);

例子

一個文本文件 (test.txt)

給定的是以下文本文件:

12345678

壓縮它

Gzip 文本文件:

gzip test.txt

創建一個新文件: test.txt.gz

演示

function getGzFileChunk(string $filename, int $start, int $end) 
{
    $zd = gzopen($filename, "r");
    fseek($zd, $start);
    $readfile = gzread($zd, $end);
    gzclose($zd);
    return $readfile;
}

var_dump(getGzFileChunk("test.txt.gz", 3, 2)); //output: 45
var_dump(getGzFileChunk("test.txt.gz", 1, 2)); //output: 23
var_dump(getGzFileChunk("test.txt.gz", 4, 2)); //output: 56
var_dump(getGzFileChunk("test.txt.gz", 6, 2)); //output: 78
var_dump(getGzFileChunk("test.txt.gz", 2, 2)); //output: 34

舊答案

將 放入gzreadwhile 循環中,如下所示:

<?php

$filename = "my_big_file.txt.gz";
$zd = gzopen($filename, "r");
while($readfile = gzread($zd,1000000)) {
    //...your process
}
gzclose($zd);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章