2013-02-23 14 views
6

Ich bin auf der Suche nach dem schnellsten Ansatz für die Suche nach einem String in einer Ordnerstruktur. Ich weiß, dass ich den gesamten Inhalt aus der Datei mit file_get_contents bekommen kann, aber ich bin mir nicht sicher, ob es schnell ist. Vielleicht gibt es bereits eine Lösung, die schnell funktioniert. Ich habe darüber nachgedacht, scandir zu verwenden, um alle Dateien und file_get_contents dazu zu bringen, den Inhalt zu lesen und zu überprüfen, ob die Zeichenfolge existiert.Durchsuchen aller Dateien im Ordner nach Strings

Glaubst du, es gibt einen besseren Weg, dies zu tun?

Oder vielleicht versuchen, PHP-Exec mit Grep zu verwenden?

Vielen Dank im Voraus!

+0

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

Antwort

12

Ihre beiden Optionen sind DirectoryIterator oder 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 
    } 
} 

In Bezug auf Leistung, können Sie immer compute the real-time speed of your code oder memory usage ganz leicht herausfinden. Bei größeren Dateien möchten Sie möglicherweise an alternative bis file_get_contents verwenden.

+0

Ihre Lösungen überprüfen Dateinamen und ich muss Dateiinhalt überprüfen. Gibt es einen großen Unterschied zum Code? – bla0009

+0

Siehe aktualisierte Antwort – hohner

Verwandte Themen