使用php和preg_match_all分析大型文本文件

时间:2019-01-16 15:10:19

标签: php preg-match file-get-contents

我们有一个大的日志文件,其中捕获了数据管理系统的api请求和响应。我们正在尝试使用以下方法来识别和计数正在使用的api.method:

mail.send

$ countmethods为我们提供了可以在页面上显示的数组。

我们知道这种方法并不理想,但正在努力寻找更好的方法来实现这一目标。

这是在内部服务器上的,因此我们增加了内存限制-但是我们知道这不是很有效。

$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]);

1 个答案:

答案 0 :(得分:1)

file_get_contents()一口气将整个文件读入内存,这几乎是您所有用法的来源。为了提高效率,您可以循环使用fgets(),一次读取一行,然后使用preg_match()而不是preg_match_all()进行扫描。这可能会比较慢,但相比之下几乎不使用内存。

但是,这两种方法都不能像仅使用命令行grep那样快速或有效。您可以运行cron来记录日志并将匹配项转储到文件中,然后使用PHP读取/解析该文件以供显示。