我需要讀取一個大的 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);
uj5u.com熱心網友回復:
更新; 在沒有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);
uj5u.com熱心網友回復:
如果您的意思是:您可以在不讀取前一百萬位元組的情況下開始讀取 gzip 檔案的第二百萬位元組,那么答案是否定的。您不能隨機訪問 gzip 檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368483.html
上一篇:選中陣列中存在的所有值
