Da ich nicht so tief in php drin stecke, daß ich es universell für beliebig tiefe Verzeichnisbäume schreiben könnte, habe ich die letzten zwei Stunden darauf verwendet, die Suche für eine weiter Verzeichnisebene zu erweitern (für mich reicht das im Moment).
Lokal hat sie auch funktioniert, auf meiner Seite liefert sie Fehlermeldungen arbeitet den Auftrag danach aber ab.
Es hat sich herausgestellt, daß man noch Verzeichnisse, die von der Suche ausgenommen werden sollen (z.B. Statistiken, geschützte Verzeichnisse ...) ausschließen können muß. Das werde ich noch einbauen.
Der script dürfte auch noch für weitere Ebenen kaskadierbar sein. Wenn Bedarf besteht, schreibe ich eine Anleitung, wie man das machen kann.
search.php Suche lokal + eine Ebene tiefer:
Code: Alles auswählen
<?php
$dateityp = ".htm"; //= alle HTML-Dateien (.htm, .html, .shtml)
if(empty($search)) {$search=$_POST[search];}
if(strlen($search) < "3")
{echo "Der Suchbegriff muss mindestens drei Buchstaben Länge haben.";exit;}
$found = "0";
$verz = opendir('.');
while($uverz = readdir($verz))
{
if($uverz != ".." && is_dir($uverz))
{
$averz = opendir($uverz);
while($file = readdir($averz))
{
if($file != "." && $file != ".." && !is_dir($file))
{
$filetype = stristr($file, $dateityp);
if(!empty($filetype))
{
$string = file_get_contents($uverz."/".$file);
$string = html_entity_decode($string);
$string = strtolower($string);
$search = strtolower($search);
$test = substr_count($string, $search);
if(!empty($test))
{
$string = ereg_replace("\n", "", $string);
$string = strip_tags($string);
$pieces = explode($search, $string);
$piece1 = substr($pieces[0], -50);
$piece1 = explode(" ", $piece1);
array_shift($piece1);
$piece1 = implode(" ", $piece1);
$piece2 = substr($pieces[1], 0, 100);
$piece2 = explode(" ", $piece2);
array_pop($piece2);
$piece2 = implode(" ", $piece2);
$rest = "$piece1<b>$search</b>$piece2";
$array .= "<b>$test Treffer im Dokument <a href=\"$uverz/$file\">$uverz/$file</a></b> <br>Textvorschau:<br> $rest <br><br>\n";
$found ++;
}}}}
closedir($averz);
}}
closedir($verz);
if($found != "0")
{
echo "<h4>Insgesamt $found Seite(n) mit dem gesuchten Begriff gefunden.</h4>Die Ausgabe erfolgt sortiert nach der Häufigkeit des Suchbegriffs auf der Seite.<br /><br />";
$array = explode("\n", $array);
natsort($array);
reset($array);
$array = array_reverse($array);
while(list($line_num, $line) = each($array))
{
$ausgabe .= "$line\n";
}
print $ausgabe;
}
if($found == "0")
{ echo "<h4>Es konnte keine Übereinstimmungen mit dem eingegebenen Suchbegriff gefunden werden.</h4>Bitte versuchen Sie einen anderen Suchbegriff oder prüfen Sie die Rechtschreibung.";}
?>
Wer Fehler oder mögliche Fehlerquellen findet bitte posten.