2013-04-10 5 views
0

거대한 로그 파일을 검색하고 키워드를 찾는 코드가 있습니다. 대부분의 경우 문서의 맨 아래에 있습니다. 이 경우 하단에서 검색을 시작하고 내 방식대로 작업하는 것이 더 효율적입니다.문자열의 끝부터 시작하여 문자열 시작

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

내가 strripos 쳐다 보면서 한 내가이 문서의 처음부터 검색 등 너무 아픈 나의 질의에 불필요한 작업을 많이 추가 할 소리가 나는 마지막 항목을 찾으 원하는 것을 있지만, 대부분의 키워드는 문자열/문서 하단에 있습니다.

아이디어가 있습니까?

+0

나는 그렇게하기 전에 해결책을 가지고 총을 쏘지 않는다. 검색하는 문자열의 예를 보여줄 수 있습니까? 그리고 당신이 당신의 스트라이 포스에 넣고있는 매개 변수들? –

답변

1

배열을 가져 오려면 로그 파일을 linebreaks로 분해하십시오. 배열을 반대로하면 끝에서 한 줄씩 검색 할 수 있습니다.

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

당신은 당신이 절대적으로, 당신은 또한 역에서 볼 수있는 메모리에 모든 것을 읽고 싶은 그는 일반적으로 필요하지 비록, 접근 방식을 추구하지 않도록, 대규모 로그 파일에 대해 얘기합니다. 여기를 참조하십시오 :

Read a file backwards line by line using fseek

+0

나는 이와 같은 해결책에 단점이 보이지 않는다. 이런 식의 논리적인 해결책 인 것 같다. –

-1

strripos이 끝에서 시작하여 세 번째 매개 변수로 오프셋 음을 설정하면 뒤로 검색합니다.

$pos = stripos($body,$keyword,$offset); 
+0

부정적인 오프셋은 어떻게 작동 하나, 나는 단지 -1을 설정하고 끝에서 시작할 수 있는가? – user1547410

+0

음수 오프셋을 사용하면 문자열 끝에있는 많은 문자부터 검색이 시작됩니다. 따라서 -1 오프셋은 문자열 끝에서 한 문자 검색을 시작합니다. 검색이 뒤로 가졌지 만 반환 값은 여전히 ​​문자열의 시작 부분에 상대적입니다. – user1613098