Как перебрать файл CSV 4 ГБ на виртуальном частном сервере, который имеет только 1 ГБ памяти, доступной для PHP?

Так что мой случай таков:

У меня есть файл значений CSV 4 ГБ, разделенный запятыми, и у моего виртуального частного сервера есть только 1 ГБ памяти, выделенной для PHP.

У меня вопрос такой:

Есть ли способ выделить память только для одной строки CSV за раз вместо чтения всего 4 ГБ файла в память?

Пример кода:

<?php
function getRows($file){
    $handle = fopen($file, 'rb');
    if($handle === false){
        throw new Exception();
    }
    while(feof($handle)===false){
        $line_of_txt=fgetcsv($handle);
    }
    fclose($handle);
    return $line_of_txt;
}
foreach(getRows('DWBankStatmentApril.csv') as $row){
    print_r($row);
}
?>

1 ответ

Решение

Получил это прямо сейчас.

 <?php
function getRows($file){
    $handle = fopen($file, 'rb');
    if($handle === false){
        throw new Exception();
    }
    while(feof($handle)===false){
        yield=fgetcsv($handle);
    }
    fclose($handle);

}
foreach(getRows('DWBankStatmentApril.csv') as $row){
    print_r($row);
}
?>

Эта проблема была решена с помощью генератора, они в основном используются для больших объемов данных, предназначенных только для прямого взаимодействия, с небольшим объемом системной памяти.

Другие вопросы по тегам