Проанализируйте большой текстовый файл, используя php и preg_match_all - PullRequest
0 голосов
/ 16 января 2019

У нас есть большой файл журнала, который фиксирует запросы и ответы API для системы управления данными. Мы пытаемся определить и подсчитать, какие api.methods используются, используя следующее:

$filename = (external file name on log server >1Gb)

$filecontents = file_get_contents($filename);

preg_match_all("/=> api.(.*)/", $filecontents, $apimethods);

$countmethods=array_count_values($apimethods[1]);

$ countmethods предоставляет нам массив, который мы затем можем отобразить на нашей странице.

Мы знаем, что этот метод не идеален, но изо всех сил пытаемся найти лучшие способы сделать это.

Это на внутреннем сервере, поэтому мы увеличили лимит памяти - но мы знаем, что это не очень эффективно.

ini_set ('memory_limit', filesize ($a) + 10000000000);

1 Ответ

0 голосов
/ 16 января 2019

file_get_contents() считывает весь файл в память за один раз, отсюда почти все ваше использование.Чтобы сделать его более эффективным, вы можете использовать fgets() в цикле, читать по одной строке за раз и сканировать с preg_match() вместо preg_match_all().Это, скорее всего, будет медленнее, но при этом почти не будет использовать память.

Однако ни один из этих методов не будет таким быстрым или эффективным, как простое использование командной строки grep .Вы можете запустить cron, чтобы очистить журнал и вывести совпадения в файл, а затем использовать PHP, чтобы прочитать / проанализировать этот файл для вашего дисплея.

...