У меня есть функция, которая удаляет строки из файлов.Я работаю с большими файлами (более 100 Мб).У меня есть PHP-память с 256 МБ, но функция, которая обрабатывает полосу из строк, взрывается с помощью файла CSV размером 100 МБ.
Что должна сделать функция, это:
Первоначально у меня естьCSV, как:
Copyright (c) 2007 MaxMind LLC.Все права защищены.locId, страна, регион, город, postalCode, широта, долгота, metroCode, areaCode 1, "O1", "", "", "", 0.0000,0.0000 ,, 2, "AP", "", "", "", 35.0000,105.0000 ,, 3," EU "," "," "," ", 47.0000,8.0000 ,, 4," AD "," "," "," ", 42.5000,1.5000 ,, 5,"AE "," "," "," ", 24.0000,54.0000 ,, 6," AF "," "," "," ", 33.0000,65.0000 ,, 7," AG "," "," ","", 17.0500, -61.8000 ,, 8," AI "," "," "," ", 18.2500, -63.1667 ,, 9," AL "," ",", "", 41.0000,20.0000 ,,
Когда я передаю файл CSV этой функции, я получаю:
locId, страна, регион, город, postalCode, широта, долгота, metroCode, areaCode 1, "O1"," "," "," ", 0,0000,0.0000 ,, 2," AP "," "," "," ", 35.0000,105.0000 ,, 3," EU "," "," "," ", 47.0000,8.0000 ,, 4, "AD", "", "", "", 42.5000,1.5000 ,, 5, "AE", "", "", "", 24.0000,54.0000 ,, 6, "AF"," "," "," ", 33.0000,65.0000 ,, 7," AG "," "," "," ", 17.0500, -61.8000 ,, 8," AI "," "," ","", 18.2500, -63.1667 ,, 9," AL "," "," "," ", 41.0000,20.0000 ,,
Он удаляет только первую строку, не более того.Проблема в том, что эта функция работает с большими файлами, она взрывает память.
Функция:
public function deleteLine($line_no, $csvFileName) {
// this function strips a specific line from a file
// if a line is stripped, functions returns True else false
//
// e.g.
// deleteLine(-1, xyz.csv); // strip last line
// deleteLine(1, xyz.csv); // strip first line
// Assigna o nome do ficheiro
$filename = $csvFileName;
$strip_return=FALSE;
$data=file($filename);
$pipe=fopen($filename,'w');
$size=count($data);
if($line_no==-1) $skip=$size-1;
else $skip=$line_no-1;
for($line=0;$line<$size;$line++)
if($line!=$skip)
fputs($pipe,$data[$line]);
else
$strip_return=TRUE;
return $strip_return;
}
Можно выполнить рефакторинг этой функции, чтобы она не была взорвана256 МБ PHP памяти?
Дайте мне несколько подсказок.
С наилучшими пожеланиями,