Suchmaschinen Skript
Scripte > Attachment
Ein kleines Suchmaschinen-Script
Dieses Skript durchsucht das aktuelle Verzeichnis und/oder andere Verzeichnisse nach Begriffen (je nach Voreinstellung) und listet diese farblich gekennzeichnet auf. Es bietet diverse Möglichkeiten der Suchbegriff-Voreinstellung und bietet somit auch einen Schutz für Verzeichnisse und Dateien die nicht durchsucht bzw. gefunden werden sollen.
- Gefundene Suchbegriffe werden farblich hervorgehoben.
- Angabe der Verzeichnisse die durchsucht werden sollen.
- Die Dateiendungen der Dateien die gefunden werden sollen können eingetragen werden.
- Ein Vorzeichen bei Dateien definieren die nicht durchsucht werden sollen.
- Es können auch einzelne Dateien von der Suche ausgeschlossen werden.
- Angabe der Mindestlänge eines Suchbegriffs.
- Die Länge des angezeigten Textausschnitts kann angepasst werden.
- Anzeige des Dateinamens (oder HTML-Title-Tag wenn vorhanden), Suchtreffer.
- Dateipfad, Dateigröße und letzte Aktualisierung der gefundenen Datei.
- Suche nach Dateinamen und/oder Dateiendung (hilfreich für den Webmaster!).
- Anzahl der durchsuchten Verzeichnisse und Dateien anzeigen (Optional).
- Unerwünschte Sucheingaben von der Suche ausschließen.
- Maximale Anzeige (Begrenzung) der Suchergebnisse.
- Suchbegriffe können in einer Datei gespeichert werden (Optional).
- Automatische Weiterleitung wenn nur eine Datei gefunden wurde (Optional).
- Wörter die durch Zeilenumbrüche, Leerzeichen etc. getrennt sind werden gefunden.
- Suche nach Bildern, PDF-Dateien, MP3-Dateien, Zip-Archive, … (Dateiname)
ZIP-Datei in ein beliebiges Verzeichnis auf dem PC entpacken und das Verzeichnis "wsX5Obj" auf den Webserver in das Root-Verzeichnis kopieren. HEAD-Code in den HEAD-Bereich <head>.....</head> und HTML-Code in den BODY-Bereich <body>.....</body> der aufrufende Datei einfügen.
Eine demo.php ist beigefügt, die zum Test in das Root-Verzeichnis des Webservers kopiert werden kann.
Aufruf: "http://www.domain.tld/demo.php". Diese kann nicht lokal ausgeführt werden, d. h. diese muss zum Test auf den Server kopiert werden.
Zum Testen bitte einen Suchbegriff (z.B. "popup") in das Suchfeld eingeben:
Es wird die gesamte Homepage durchsucht.
Code für den <HEAD> Bereich
<link rel="stylesheet" href="wsX5Obj/Obj73_0/style.css" />
Code für den <BODY> Bereich
<?php include "wsX5Obj/Obj73_0/search.php"; ?>
alternative Einbindung:
<a name="Obj73_Anker"> </a>
<?php
// Die zu durchsuchenden Verzeichnisse eintragen. Aktuelles Verzeichnis durchsuchen mit "./"
$verzeichnisse = array(
"./",
);
// Die Dateiendungen der Dateien die gefunden werden sollen.
// Dateiendungen mit Großbuchstaben müssen extra eingetragen werden!
$dateiendungen = array(
".gif",".htm",".html",".jpg",".mp3",".php",".png",".txt",
// Die Dateiendungen der Dateien die von der oberen Liste "keine");
// Textdateien sind (es wird nur der Dateiname angezeigt)
$_dateiendungen = array(
".gif",".jpg",".mp3",".png",
// Vorzeichen bei Dateien die nicht durchsucht werden);
// sollen zum Beispiel: _intern.htm, _log.php, _data.txt
$vorzeichen = array(
"_",
);
// Einzelne Dateien die nicht durchsucht werden sollen
$nicht_durchsuchen = array(
"suchmaschine.php",
"login.php",
);// Länge des minimalen Suchbegriffs (min. 4 Zeichen)$suchbegriff_min = 4;
// Länge des maximalen Suchbegriffs
$suchbegriff_max = 50;
// Anzahl der durchsuchten Verzeichnisse und Dateien anzeigen (ja/nein)
$datei_info = "ja";
// Maximale Anzeige (Begrenzung) der Suchergebnisse
$suchergebnisse_max = 25;
// Ergebnis der Suche speichern (ja/nein)
$speichern = "ja";
// Pfad/Name der Datei in der die Sucheingaben gespeichert werden
$suchdatei = "wsX5Obj/Obj73_0/search.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 = 50;
// META-Tags, wenn diese vorhanden sind, anzeigen (ja/nein)
$metatags = "nein";
// URL (Optional)
$url = "http://x5forum.home-wiekau.de/";
// Zeitzone (siehe: http://php.net/manual/de/timezones.europe.php)
date_default_timezone_set("Europe/Berlin");
// Formular anzeigen
echo '<form method="get" action="' . $_SERVER["SCRIPT_NAME"] . '#Obj73_Anker">
<label>
<input class="Obj73_searchfield" name="suchbegriff" value=""
placeholder="Suchbegriff eingeben (mind. 4 Zeichen)"' .
(isset($_GET["suchbegriff"]) ? strip_tags($_GET["suchbegriff"]) : '') .
'" size="35" maxlength="' . $suchbegriff_max . '" required="required">
</label>
<button class="Obj73_button" type="submit" name="suche">
suchen
</button>
</form>
';
$gefunden = $dateinr = 0; $link = ""; $ausgabe = array();$startzeit = microtime(true);if (isset($_GET["suche"]) || isset($_GET["suchbegriff"])) {
$_GET["suchbegriff"] = strip_tags($_GET["suchbegriff"]);$_GET["suchbegriff"] = (function_exists('str_ireplace') ? str_ireplace($ausschluss, "", $_GET["suchbegriff"]) : str_replace($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" =>" ", " " =>" "));$_GET["suchbegriff"] = trim($_GET["suchbegriff"]);if ((strstr($text, $_GET["suchbegriff"]) orstristr($text, $_GET["suchbegriff"]) orstristr($dateiname, $_GET["suchbegriff"])) &&$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);if ($gefunden == 0) {echo '<p>Es wurden keine Übereinstimmungen mit dem eingegebenen Suchbegriff gefunden.</p>';} else {
if ($autolink == "ja" && $gefunden == 1) {
echo '<script>location.href="' . $link . '";</script><noscript><meta http-equiv="refresh" content="0; URL=' . $link . '"></noscript>';
}
echo '<p>Es ' . ($gefunden == 1 ? 'wurde '. $gefunden . ' Datei' : 'wurden ' . $gefunden . ' Dateien') . ' gefunden:</p>' .
'<ol>' . $ausgabe . '</ol>';
}
if ($datei_info == "ja") {printf('<p>Durchsuchte Verzeichnisse: ' . count($verzeichnisse) . ' - Dateien: ' . $dateinr . ' (in %.2f Sekunden)</p>', microtime(true) - $startzeit);}if ($speichern == "ja") {$fp = fopen($suchdatei, "a+");fputs($fp, date("d.m.y H:i") . '|' . $_GET["suchbegriff"] . '|' . $gefunden . "\n");fclose($fp);}} else {
echo '<p>Es sind ' . (strlen($_GET["suchbegriff"]) < $suchbegriff_min ?'mindestens ' . $suchbegriff_min . ' Zeichen nötig' :
'maximal ' . $suchbegriff_max . ' Zeichen erlaubt') . '!</p>';
}
}
?>
Code Datei "style.css"
mark { background-color: #D5FFAA; }
var { color: #00AF00; font-size: 11px; }
.Obj73_searchfield {
background-color: #ffffff;border: 2px solid #7C6031;padding: 7px;border-top-left-radius: 5px;border-bottom-left-radius: 5px;color: #000000;font-weight: normal;font-style: normal;}
.Obj73_button {
color: #7C6031;font-size: 12px;font-weight: bold;font-family: tahoma;background-color: #EEF6E8;border: 2px solid #7C6031;padding: 7px;border-radius: 5px;}
.Obj73_button:hover { background-color: #B4DA9F; border: 2px solid #7C6031; padding-left: 15px; }
» nach oben «