2013-02-23 13 views
6

Poszukuję najszybszego sposobu wyszukiwania ciągu znaków w strukturze folderów. Wiem, że mogę pobrać całą treść z pliku file_get_contents, ale nie jestem pewien, czy jest szybki. Może istnieje już jakieś rozwiązanie, które działa szybko. Myślałem o używaniu skandiru, aby uzyskać wszystkie pliki i file_get_contents, aby odczytać zawartość i strpos, aby sprawdzić, czy łańcuch istnieje.Wyszukiwanie wszystkich plików w folderze na ciągi znaków

Czy uważasz, że jest lepszy sposób na zrobienie tego?

A może próbujesz użyć php exec z grepem?

Z góry dziękuję!

+0

https://github.com/skfaisal93/AnyWhereInFiles –

Odpowiedz

12

Twoje dwie opcje są DirectoryIterator lub glob:

$string = 'something'; 

$dir = new DirectoryIterator('some_dir'); 
foreach ($dir as $file) { 
    $content = file_get_contents($file->getPathname()); 
    if (strpos($content, $string) !== false) { 
     // Bingo 
    } 
} 

$dir = 'some_dir'; 
foreach (glob("$dir/*") as $file) { 
    $content = file_get_contents("$dir/$file"); 
    if (strpos($content, $string) !== false) { 
     // Bingo 
    } 
} 

Pod względem wydajności, zawsze można compute the real-time speed of your code lub dowiedzieć się memory usage dość łatwo. W przypadku większych plików możesz użyć an alternative do file_get_contents.

+0

Twoje rozwiązania sprawdzają nazwy plików i muszę sprawdzić zawartość plików. czy jest duża różnica w stosunku do kodu? – bla0009

+0

Zobacz zaktualizowaną odpowiedź – hohner

Powiązane problemy