Wie kann ich mit php ein Verzeichnis nach einer bestimmten Textzeile durchsuchen und alle übereinstimmenden Dateien auflisten?
Danke.
Wie kann ich mit php ein Verzeichnis nach einer bestimmten Textzeile durchsuchen und alle übereinstimmenden Dateien auflisten?
Danke.
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.
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.
Hier ist ein triviales Beispiel dafür, wie dies streng in PHP erreicht werden könnte...
Liste aller Dateien/Verzeichnisse innerhalb eines Verzeichnisses abrufen.
Überprüfen, ob jeder Datei-/Verzeichnisname eine Datei ist
Inhalte einer Datei abrufen
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();
?>
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]);
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 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.