php - 使用 php 和 preg_match_all 分析大文本文件
问题描述
我们有一个大型日志文件,用于捕获数据管理系统的 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);
解决方案
file_get_contents()
一次将整个文件读入内存,这是几乎所有使用量的来源。为了提高效率,您可以fgets()
在循环中使用,一次读取一行,然后使用preg_match()
而不是preg_match_all()
. 这可能会更慢,但相比之下几乎不使用内存。
但是,这些方法都不会像简单地使用命令行grep那样快速或高效。您可以运行 cron 来 grep 日志并将匹配项转储到文件中,然后使用 PHP 读取/解析该文件以供显示。
推荐阅读
- android-ndk - 从android java调用C外部库(.so)
- facebook-graph-api - Facebook 提交登录审核,但仍处于开发模式
- ios - 使用自定义过渡和自定义标识符时 SwiftUI 系统布局中断
- string - 在 SAP Lumira 中按字符串变量过滤数据源
- sql - 不支持 SQL 查询连接?
- image - 如何在opencv中用色谱绘制关键点?
- python - 您如何/可以使用 Python 在 Mac 上更改文件的创建和修改时间?
- python - Scrapy response.urljoin不完整的url
- graphdb - GraphDB Visual Graph 不显示空白节点
- hibernate - Singleton SessionFactory 不适用于 Hibernate 4.3.1