我有一个500mb的csv文件,超过500,000行,每行有80个字段。我正在使用fget逐行处理文件。
$col1 = array();
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
$col1[] = $row[0];
}
由于托管服务提供商对PHP文件的执行时间限制(120秒),我无法在一次运行中处理整个文件。
我尝试使用ftell()和fseek()来记住重启的最后位置。麻烦的是,有时ftell()位置在一行的中间,而恢复意味着错过了行的前半部分。
是否有一种优雅的方式可以知道最后一行是否已成功处理,并从之后的一行恢复?我意识到我可以做一个简单的计数器,然后再循环到那一点,但是这会在我可以处理到文件末尾的行上产生递减的回报。
有没有类似于ftell()和fseek()的东西可以在我的情况下使用?还是一种限制ftell()返回上一行结尾的指针的方法?
答案 0 :(得分:2)
当我需要使用大文件时,我总是使用“分而治之”的前提。对于你的情况,我会: