通过相对较小的数据块在 php 中读取文件的最佳方法是什么?
例如,读取 5MB,然后释放该内存并再读取 5MB
我正在用 php 编写一个解析工具,它需要读取一个巨大的文件并将其转换为 CSV。
我的问题是我不断超出允许的内存限制,并且在我的环境中提高它不是一个选项。
这是完成工作的代码的一部分:
$i = 0;
$fileName = "test.txt";
$file = fopen($fileName,'r');
while($i <= 2000) {
$line = fgets($file);
$streetsheet[$i] = preg_split('@\ @',$line,NULL, PREG_SPLIT_NO_EMPTY);
++$i;
}
fclose($file);
$fp = fopen('result.csv','w');
foreach($streetsheet as $key=>$value) {
fputcsv($fp, $value);
}
例如,在上面显示的片段中,我正在读取文件的前 2000 行,它工作得很好。
当我将条件更改为
while(!feof($file)){\*....*\}
它立即告诉我我已经超出了允许的内存限制,然后它告诉我导致问题的行是我使用 preg_split 的行。
所以我想知道读取文件的最佳方式是什么... 一次 1000 行?
谢谢!
如果您要投反对票,至少要有礼貌地解释原因