Если ваш большой файл в формате CSV, я думаю, вам нужно обрабатывать его построчно, а на самом деле не нужно разбивать его на более мелкие файлы. Не должно быть необходимости хранить 5000 или более строк в памяти одновременно! Чтобы сделать это, просто используйте PHP «низкоуровневые» файловые функции:
$fp = fopen("path/to/file", "r");
while (false !== ($line = fgets($fp))) {
// Process $line, e.g split it into values since it is CSV.
$values = explode(",", $line);
// Do stuff: Run MySQL updates, ...
}
fclose($fp);
Если вам нужен произвольный доступ, например, читать строку за строкой, вы можете создать «индекс строки» для вашего файла:
$fp = fopen("path/to/file", "r");
$index = array(0);
while (false !== ($line = fgets($fp))) {
$index[] = ftell($fp); // get the current byte offset
}
Теперь $index
отображает номера строк в байтовые смещения, и вы можете перейти к строке, используя fseek()
:
function get_line($number)
{
global $fp, $index;
$offset = $index[$number];
fseek($fp, $offset);
return fgets($fp);
}
$line10 = get_line(10);
// ... Once you are done:
fclose($fp);
Обратите внимание, что я начал считать строки с 0, в отличие от текстовых редакторов.