6 Stimmen

Suche nach einem Ausdruck/Wort in Textdateien mit php

Wie kann ich mit php ein Verzeichnis nach einer bestimmten Textzeile durchsuchen und alle übereinstimmenden Dateien auflisten?

Danke.

7voto

animuson Punkte 52328

Ich habe tatsächlich vor ein paar Tagen eine Funktion dafür geschrieben...

Hier ist die Grundfunktion, die jede Datei durchsucht...

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

Nicht die fortschrittlichste Methode, meine Funktion ist viel länger, aber sie verwendet auch alle Funktionen aus meinen verschiedenen anderen Klassen, das ist im Grunde genommen aber was sie tut.

1voto

Roberto Aloi Punkte 29588

Eine Alternative ist, die PHP-Dateien zu lesen, den Inhalt in Arrays zu speichern und etwas wie preg_grep zu benutzen.

Wenn die Anzahl der Dateien potenziell sehr groß ist, könnten Sie das UNIX grep-Befehl zusammen mit einem PHP exec verwenden.

Ich persönlich würde mich für die zweite Lösung entscheiden.

1voto

John Himmelman Punkte 20636

Hier ist ein triviales Beispiel dafür, wie dies streng in PHP erreicht werden könnte...

  1. Liste aller Dateien/Verzeichnisse innerhalb eines Verzeichnisses abrufen.

  2. Überprüfen, ob jeder Datei-/Verzeichnisname eine Datei ist

  3. Inhalte einer Datei abrufen

  4. Ein String-Suchfunktion verwenden, um nach Übereinstimmungen des gesuchten Strings zu suchen. Wenn eine Übereinstimmung existiert, den Dateinamen ausgeben

Meep

read()))
{   
    if ($file != '.' && $file != '..')
    {
        // Handelt es sich hierbei um eine Datei oder ein Verzeichnis?
        if (is_file($path . '/' . $file))
        {
            // Es handelt sich um eine Datei, juchu! Lassen Sie uns den Inhalt der Datei erhalten
            $data = file_get_contents($path . '/' . $file);

            // Befindet sich der Str in den Daten (Groß-/Kleinschreibung bei der Suche ignorieren)
            if (stripos($data, $findThisString) !== false)
            {
                // Sw00t! Wir haben eine Übereinstimmung
                echo 'Übereinstimmung gefunden in ' . $file . "\n";
            }
        }
    }
}

$dir->close();

?>

1voto

Juampy NR Punkte 2448

Wenn Dateien groß sind, ist es übertrieben, jede Datei in den Speicher zu laden und dann ihren Inhalt zu durchsuchen.

Wenn Sie Leserechte über das Verzeichnis haben, könnten Sie die Datei, in der sich die gesuchte Zeichenfolge befindet, durch die Kombination von exec mit egrep herausfinden:

php > exec("egrep -rl 'Zeichenfolge, die ich finden möchte' voller-oder-relativer-Verzeichnis", $output);
php > print_r($output);
Array
(
  [0] => voller-oder-relativer-Verzeichnis/foo/bar.xml
)
php > $inhalt = file_get_contents($output[0]);

0voto

voodoo555 Punkte 320

Nun, zuerst möchten Sie vielleicht eine Liste der interessanten Dateien mit glob bekommen (wenn Sie mehrere Erweiterungen möchten, einfach die resultierenden Arrays zusammenführen oder dies hier verwenden). Dann durchlaufen Sie das Ergebnis, öffnen die Dateien mit file_get_contents und überprüfen Ihren String mit strpos.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X