Guten Tag,
Ich wollte mir eine Suche mit Dateien basteln. Jedoch funktioniert das ganze nicht so wie es soll.
Ich hab mir als Konzept mal gedacht, das ich einen Ordner öffne, jede Datei einzeln durchsuche und jede Datei die das enthaltene Suchwort enthält (wird mit preg_match() geprüft) ausgegeben wird.
Anfangs habe ich versuch mit fopen/fread zu arbeiten, da ist jedoch das Problem, das jede Datei die durchsucht wird CHMOD rechte haben muss. Dann kam file dran, da war das Problem das er jeweils nur Zeilen in ein Array gibt. Danach hab ich noch readfile versuch da ist das Problem wiederrum das er mir am Ende des Strings die gelesene Zahl an Bytes zurückgibt, was die Suche beeinträchtigt.
Hier mal mein Code. Es liegt nur eine Datei in dem Testordner.
PHP-Code:
<?php
$begriff = $_POST['begriff']; // Kommt von einem Formular(Der Suchbegriff)
$dir = "test/"; // Ordnername
$pattern = "!^($begriff)?$!"; // Das Suchmuster
$i = 0; // Eine Variable, die später dazu dient, um anzuzeigen ob Einträge gefunden wurden
echo "Auf folgenden Seiten wurde der Suchbegriff \"$name\" gefunden:
";
$opendir = opendir($dir); // Ordner wird geöffnet
while($file = readdir($opendir)) {
if($file != "." AND $file != "..") {
$datei = readfile($dir.$file); // Hier war der Versuch mit readfile
echo $datei; // Zum Test gebe ich den Inhalt der Datei aus
echo "
";
if(preg_match($pattern, $datei)) { // Hier kommt dann das Suchmuster und der String zum einsatz.
echo "<a href=\"$file\">$file</a>
"; // Ausgabe und verlinkung
++$i; // Wenn eine Datei gefunden wurde, dann $i hochzählen
}
}
}
closedir($opendir);
if($i == 0) { // Falls $i gleich 0 ist weiss man das keine Einträge gefunden wurden.
echo "Es wurden keine übereinstimmungen gefunden";
}
?>
Das Suchmuster ist nur zum Test, später wird es noch "ausführlicher" gemacht. Falls es an dem Suchmuster liegt, entschuldige ich mich dafür und hoffe auf Verbesserungsvorschläge.
Danke für die Hilfe
TheSkaterFriend