Разделить большой файл txt с php

У меня есть большой файл txt (84mb) с более чем 1 миллионом строк.

Я хочу разбить его в отдельных файлах размером 50 тыс. Строк. Как мне это сделать? Я искал он-лайн, но ничего не нашел.

Это модифицированная версия моего скрипта: Прочитайте огромные текстовые файлы и сохраните каждую строку в базе данных

Применение

set_time_limit(0); // Split by Byte splitData("b.php", __DIR__ . "/test", 1024 * 50); //Split 50Kb // Split By line splitLine("b.php", __DIR__ . "/test", 50000); 

функции

 function splitData($filename, $destination, $chunkSize) { $pathInfo = pathinfo($filename); $handle = fopen($filename, 'rb'); $counter = 0; if ($handle === false) { return false; } while ( ! feof($handle) ) { $counter ++; $filePart = $destination . DIRECTORY_SEPARATOR . $pathInfo['filename'] . "_" . $counter . "." . $pathInfo['extension']; touch($filePart); file_put_contents($filePart, fread($handle, $chunkSize)); } $status = fclose($handle); return $status; } function splitLine($filename, $destination, $lineSize) { $pathInfo = pathinfo($filename); $handle = fopen($filename, 'rb'); $counter = 0; $splitCount = 0; if ($handle === false) { return false; } $content = ""; while ( ($buffer = fgets($handle, 4096)) !== false ) { $content .= $buffer; $counter ++; if ($counter >= $lineSize) { $splitCount ++; $filePart = $destination . DIRECTORY_SEPARATOR . $pathInfo['filename'] . "_" . $splitCount . "." . $pathInfo['extension']; touch($filePart); file_put_contents($filePart, $content); $content = ""; $counter = 0; } } $status = fclose($handle); return $status; } 
 <?php $handle = @fopen("/tmp/inputfile.txt", "r"); $maxLines = 50; if ($handle) { $counter = 1; $fileCount = 1; $data = array(); while (($buffer = fgets($handle, 4096)) !== false) { $data[] = $buffer; if(count($data) % $maxLines == 0) { file_put_contents("filename{$fileCount}.txt", implode("\n\r", $data)); $data = array(); $fileCount++; } $counter++; } if (!feof($handle)) { echo "Error: unexpected fgets() fail\n"; } fclose($handle); } ?> 

Что-то вроде этого должно работать, хотя я бы никогда не рекомендовал его, это не очень хороший способ решить проблему.