Я прочитал, что «preg_match_all» не предназначен для синтаксического анализа больших файлов, но мне нужно это сделать. Я увеличил:
pcre.backtrack_limit=1000000000 pcre.recursion_limit=1000000000
мой PHP memory_limit установлен в 5000M, и скрипт заканчивается без каких-либо ошибок или исключений в течение 0,2 секунд …
Единственный solutinon разбил файл 100M на 100 небольших 1M файлов?
Спасибо за помощь
Основываясь на вашем коде, я предлагаю вам сделать это следующим образом:
Установить переменную $data
в пустую строку
Установить переменную $work
для пустых строк; прочитайте блок данных и добавьте эту строку в $data
Используйте regex #^(.*?)(<tr>\n(?!.*<tr>\n).*)$#
Чтобы разделить $data
на $work
и $data
Найти все совпадения в $work
Вернитесь к пункту № 2, пока доступны данные
Найти все совпадения в $data
Подумайте об использовании инструментов командной строки, которые намного лучше подходят для обработки больших объемов данных.
grep, sed, awk или их комбинацию.