0

我有一些代码可以搜索一个巨大的日志文件并找到一个关键字,在大多数情况下,它位于文档的底部附近。在这种情况下,从底部开始搜索并向上工作会更有效。

$pos = stripos($body,$keyword);  
$snippet_pre = substr($body, $pos, SNIPPET_LENGTH);

我看过 strripos ,虽然它做了我想要的,就像找到最后一次出现一样,但它听起来像是从文档的开头搜索,所以我的查询中添加了很多不必要的工作,因为大多数关键字都在附近字符串/文档的底部

有任何想法吗?

4

2 回答 2

1

通过换行符分解您的日志文件以获得一个数组。反转您的数组,现在您可以从末尾逐行搜索。

$lines = explode("\n",$body);
$reversed = array_reverse($lines);
foreach($reversed AS $line) {
   // Search for your keyword
}

如果您谈论的是一个庞大的日志文件,因此您绝对不想将其全部读入内存,您也可以查看反向查找方法,尽管通常不需要。看这里:

使用 fseek 逐行向后读取文件

于 2013-04-10T00:27:11.520 回答
-1

如果您将负偏移量设置为第三个参数, strripos将从末尾开始并向后搜索。

$pos = stripos($body,$keyword,$offset);
于 2013-04-10T01:05:20.703 回答