<?php
/*
Kleine Suchmaschine - Version vom: 20.11.2013 - Webbausteine.de
Diese Suchmaschine durchsucht die angegebenen Verzeichnisse
und die darin enthaltenen Dateien nach einem Suchbegriff!
*/
/* Die zu durchsuchenden Verzeichnisse eintragen.
Aktuelles Verzeichnis durchsuchen mit "./" */
$verzeichnisse = array(
"./",
"./Tutorial/",
"../",
"../Kommentare/",
"../Kommentare/Tutorial-Kommentar-Skript/",
"../MLR-Schrift-Tab/",
"../MLR-Schrift-Tab/Tutorial/",
"../Nachrichten/",
"../Nachrichten/Tutorial/",
);
/* Die Dateiendungen der Dateien die gefunden werden sollen.
Dateiendungen mit Großbuchstaben müssen extra eingetragen werden! */
$dateiendungen = array(
".gif",
".htm",
".html",
".jpg",
".mp3",
".pdf",
".php",
".png",
".txt",
".zip",
);
/* Die Dateiendungen der Dateien die von der oberen Liste "keine"
Textdateien sind (es wird nur der Dateiname angezeigt) */
$_dateiendungen = array(
".gif",
".jpg",
".mp3",
".pdf",
".png",
".zip",
);
/* Vorzeichen bei Dateien die nicht durchsucht werden
sollen zum Beispiel: _intern.htm, _log.php, _data.txt */
$vorzeichen = "_";
/* Einzelne Dateien die nicht durchsucht werden sollen */
$nicht_durchsuchen = array(
"nachrichten.php",
"nachrichten_editor.php",
);
/* Länge des minimalen Suchbegriffs (hier min. 3 Zeichen) */
$suchbegriff_min = 3;
/* Länge des maximalen Suchbegriffs */
$suchbegriff_max = 50;
/* Datei-Info - Anzahl der durchsuchten Verzeichnisse und Dateien anzeigen (ja/nein) */
$datei_info = "ja";
/* Maximale Anzeige (Begrenzung) der Suchergebnisse */
$suchergebnisse_max = 400;
/* Ergebnis der Suche speichern (ja/nein) */
$speichern = "nein";
/* Name der Datei in der die Sucheingaben gespeichert werden */
$suchdatei = "suchbegriffe.txt"; // Benötigt Schreibrechte!
/* Automatische Weiterleitung wenn nur eine Datei gefunden wurde (ja/nein) */
$autolink = "nein";
/* Unerwünschte Sucheingaben von der Suche ausschließen */
$ausschluss = array(
"Demotext",
"Demotext2",
);
/* Länge des angezeigten Textausschnitts (Zeichen) */
$textausschnitt = 200;
/* META-Tags, wenn diese vorhanden sind, anzeigen (ja/nein) */
$metatags = "nein";
/* URL (Optional) Bsp.: www.example.com/ */
$url = "";
/* Zeitzone (siehe: http://de3.php.net/manual/de/timezones.europe.php) */
date_default_timezone_set("Europe/Berlin");
// Formular anzeigen
echo '<form method="get" action="' . $_SERVER["SCRIPT_NAME"] . '"> <input type="search" name="suchbegriff" placeholder="Suchbegriff eingeben (3-50 Zeichen)" value="' . (isset($_GET["suchbegriff"]) ? strip_tags($_GET["suchbegriff"]) : '') . '" size="35" maxlength="' . $suchbegriff_max . '" required="required"> <input type="submit" name="suche" value="suchen"></form>';
$gefunden = $dateinr = 0; $link = ""; $ausgabe = array();
$startzeit = microtime(true);
if (isset($_GET["suche"]) || isset($_GET["suchbegriff"])) {
$_GET["suchbegriff"] = strip_tags(trim($_GET["suchbegriff"]));
$_GET["suchbegriff"] = str_ireplace($ausschluss, "", $_GET["suchbegriff"]);
if (strlen($_GET["suchbegriff"]) >= $suchbegriff_min && strlen($_GET["suchbegriff"]) <= $suchbegriff_max) {
foreach ($verzeichnisse as $verzeichnis) {
foreach ($dateiendungen as $dateiendung) {
foreach (glob($verzeichnis . "*" . $dateiendung) as $datei) {
$dateiname = basename($datei);
if ($dateiname[0] != $vorzeichen &&
!in_array($dateiname, $nicht_durchsuchen)) {
$text = (!in_array($dateiendung, $_dateiendungen)) ? file_get_contents($datei) : substr(strtoupper($dateiendung), 1) . '-Datei';
preg_match('/<title>(.*?)<\/title>/i', $text, $t);
$titel = isset($t[1]) ? $t[1] : $dateiname;
unset($t[1]);
$dateinr++;
$meta = ($metatags == "ja" && count(get_meta_tags($datei)) > 0) ? '<br>' . implode('<br>', get_meta_tags($datei)) : "";
$text = preg_replace('/\<head\>(.*)\<\/head\>/Usi', '', $text);
$text = strtr(strip_tags($text), array("ä"=>"ä", "ö"=>"ö", "ü"=>"ü", "Ä"=>"Ä", "Ö"=>"Ö", "Ü"=>"Ü", "ß"=>"ß", "\r" =>" ", "\n" =>" ", "\t" =>" ", " " =>" "));
$preg = explode(" ", $_GET["suchbegriff"]);
$preg = implode(".*?", $preg);
if ((strstr($text, $_GET["suchbegriff"]) or
stristr($text, $_GET["suchbegriff"]) or
stristr($dateiname, $_GET["suchbegriff"]) or
preg_match("/" . $preg . "/i", $text)) &&
$gefunden <= $suchergebnisse_max) {
$gefunden++;
$link = $datei;
$start = strpos(strtolower($text), strtolower($_GET["suchbegriff"])) - $textausschnitt;
if ($start < 0) $start = 0;
$ende = strlen($_GET["suchbegriff"]) + $textausschnitt *2;
$textteil = substr($text, $start, $ende);
$treffer = substr_count(strtolower($text), strtolower($_GET["suchbegriff"]));
$ausgabe[$treffer . $gefunden] = '<li><a href="' . $datei . '">' . $titel . '</a> <small>(' . $treffer . 'x)</small>' . $meta . '<br>… ' .
preg_replace('/(' . $_GET["suchbegriff"] . ')/i', "<mark>\$1</mark>", (strlen($textteil) < $textausschnitt ? substr($text, strpos($text, $_GET["suchbegriff"]), $textausschnitt) : $textteil)) .
' …<br><var>Stand: ' . date("d.m.y h:i", filemtime($datei)) . ' - ' . number_format((filesize($datei) / 1024), 1, ",", ".") . ' KB - ' . $url . $datei . '</var></li>';
}
}
}
}
}
krsort($ausgabe);
$ausgabe = implode($ausgabe);
// Keine Übereinstimmungen gefunden
if ($gefunden == 0) {
echo '<p>Es wurden keine Übereinstimmungen mit dem eingegebenen Suchbegriff gefunden.</p>';
}
else {
// Automatische Weiterleitung
if ($autolink == "ja" && $gefunden == 1) {
echo '<script>location.href="' . $link . '";</script><noscript><meta http-equiv="refresh" content="0; URL=' . $link . '"></noscript>';
}
// Ausgabe
echo '<p>Es ' . ($gefunden == 1 ? 'wurde '. $gefunden . ' Datei' : 'wurden ' . $gefunden . ' Dateien') . ' gefunden:</p>' .
'<ol>' . $ausgabe . '</ol>';
}
// Datei-Info anzeigen
if ($datei_info == "ja") {
printf('<p>Durchsuchte Verzeichnisse: ' . count($verzeichnisse) . ' - Dateien: ' . $dateinr . ' (in %.2f Sekunden)</p>', microtime(true) - $startzeit);
}
// Ergebnis der Suche speichern
if ($speichern == "ja") {
$fp = fopen($suchdatei, "a+");
fputs($fp, date("d.m.y H:i") . '|' . $_GET["suchbegriff"] . '|' . $gefunden . "\n");
fclose($fp);
}
}
// Länge des Suchbegriffs zu kurz/zu lang
else {
echo '<p>Es sind ' . (strlen($_GET["suchbegriff"]) < $suchbegriff_min ?
'mindestens ' . $suchbegriff_min . ' Zeichen nötig' :
'maximal ' . $suchbegriff_max . ' Zeichen erlaubt') . '!</p>';
}
}
?>