2010-02-28 5 views

답변

7

는 사실은 여기

foreach (glob("<directory>/*.txt") as $search) { 
    $contents = file_get_contents($search); 
    if (!strpos($contents, "text")) continue; 
    $matches[] = $search; 
} 

... 그 일을 아닌 가장 진보 된 방법으로, 각 파일을 검색의 기본 기능입니다 ...이 몇 일 전에하는 기능을 쓴 내 함수는 훨씬 길지만 다른 여러 클래스의 모든 함수도 사용합니다. 기본적으로이 함수가 수행하는 것입니다.

0

글쎄, 먼저 glob으로 관심있는 파일의 목록을 얻고 싶을 수도 있습니다 (여러 개의 확장자가 필요한 경우 결과 배열을 병합하거나 this 사용). 그런 다음 결과를 반복하여 file_get_contents과 함께 파일을 열고 strpos으로 문자열을 확인하십시오.

+1

여러 확장으로 쉽게 수행 할 수 있습니다 : 당신이 디렉토리를 통해 읽기 권한이 경우

, 당신은 바늘이 egrepexec을 결합하여있는 파일을 알아낼 수있다 '*. {ext1, ext2, ext3}', GLOB_BRACE)' –

1

대안은 php 파일을 읽고 내용을 배열에 넣고 preg_grep과 같은 것을 사용하는 것입니다. 파일의 수는 잠재적으로 매우 큰 경우

, 당신은 PHP를 exec와 함께 UNIX 그렙 명령을 사용할 수도 있습니다.

저는 개인적으로 두 번째 해결 방법을 선택했습니다.

1

여기

  1. 모든 파일/디렉토리 내에서 디렉토리의 목록을 가져옵니다 ...이 엄격하게 PHP에서 수행 할 수있는 방법의 사소한 예입니다. 각 파일/디렉터리 이름이 파일

  2. 것을

  3. 확인 우리가 찾고있는 문자열의 일치를 찾기 위해 문자열 검색 기능을 사용하여 파일

  4. 의 내용을 가져옵니다. 일치가 존재하는 경우 5 사람들이 이미이 문제를 해결하는 방법에 대한 좋은 답변을 게시했기 때문에 나는 여기 내 권장 대답을 넣어하지 않습니다 파일 이름

MEEP

<?php 
$path = 'c:\\some\\cool\\directory'; 
$findThisString = 'Cool Cheese'; 

$dir = dir($path); 

// Get next file/dir name in directory 
while (false !== ($file = $dir->read())) 
{ 
    if ($file != '.' && $file != '..') 
    { 
     // Is this entry a file or directory? 
     if (is_file($path . '/' . $file)) 
     { 
      // Its a file, yay! Lets get the file's contents 
      $data = file_get_contents($path . '/' . $file); 

      // Is the str in the data (case-insensitive search) 
      if (stripos($data, $findThisString) !== false) 
      { 
       // sw00t! we have a match 
      echo 'match found in ' . $file . "<br>\n"; 
      } 
     } 
    } 
} 

$dir->close(); 

?> 
0

를 인쇄하지만 것 대안을 추천합니다.

Lucene 검색 엔진의 PHP 구현을 사용 해본 적이 있습니까? 가장 주목할만한 것은 Zend Framework입니다. 가장 좋은 점은 Lucene 라이브러리를 사용하기 위해 프레임 워크를 사용할 필요가 없다는 것입니다 (라이브러리 기본 파일을 포함하십시오 - 젠드 라이브러리 디렉토리를 포함 경로에 추가하는 것을 기억하십시오).

본인은 직접 사용하지 않았으며 그에 대한 많은 리뷰를 들었습니다. 내가 생각할 수있는 유일한 것은 그것이 작은 스크립트 나 프로젝트에 너무 복잡 할 수 있다는 것입니다.

매우 상세한 overview of the Lucene Library은 Zend Framework 참조 안내서에 있습니다.

1

파일이 크면 각 파일을 메모리로 읽어 들이고 그 파일을 검색해야합니다. (`글로브 :

php > exec("egrep -rl 'string of what I want to find' full-or-relative-directory", $output); 
php > print_r($output); 
Array 
(
    [0] => full-or-relative-directory/foo/bar.xml 
) 
php > $contents = file_get_contents($output[0]); 
-1
$directory = "/var/www/application/store/"; //define the path 
$files1 = scandir($directory); //scandir will scan the directory 
$c = count($files1); //this will count all the files in the directory 
print $c;