我们有一个大的日志文件,其中捕获了数据管理系统的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]);
答案 0 :(得分:1)
file_get_contents()
一口气将整个文件读入内存,这几乎是您所有用法的来源。为了提高效率,您可以循环使用fgets()
,一次读取一行,然后使用preg_match()
而不是preg_match_all()
进行扫描。这可能会比较慢,但相比之下几乎不使用内存。
但是,这两种方法都不能像仅使用命令行grep那样快速或有效。您可以运行cron来记录日志并将匹配项转储到文件中,然后使用PHP读取/解析该文件以供显示。