Как перебрать файл 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);
}
?>
Эта проблема была решена с помощью генератора, они в основном используются для больших объемов данных, предназначенных только для прямого взаимодействия, с небольшим объемом системной памяти.