HTML Seiten mit PHP und regulären Ausdrücken durchsuchen

  • Beitrags-Autor:
  • Beitrags-Kategorie:Software & Co.
  • Lesedauer:6 min Lesezeit

Vielleicht kennt ihr das Problem:

Man hat jede Menge HTML-Seiten, aber man braucht spezielle Software oder externe Dienste, um sie auf Wunsch des Benutzers durchzusuchen… Das ist ärgerlich! Doch es geht auch ohne diese „Helfer“. Es reicht, PHP Unterstützung auf dem Server und das lookuPhp Skript. Dieser kann als DIV in jede Seite eingebunden werden und durchsucht die im Setup vorgegebenen Seiten mit Hilfe von regulären Ausdrücken (RegEx).

Diese Lösung erzeugt eine gewisse Last auf dem Server und die Antworten sind auch nicht innerhalb von Milisekunden da, aber für eine Domain mit 100 Seiten reicht das alle mal!

Grundsätzliche Überlegungen

Diese Skripte sind in PHP programmiert und nutzen die regulären Ausdrücke (in den meisten Distributionen kein eigenes PHP-Packet, sondern vorinstalliert). Die Suchmaschiene braucht keine Datenbanken, weil sie die Dateien direkt von der Festplatte liest. Die Art der Suche kann ausgewählt werden: ganze Wörter oder Teilwörter und Sätze (Satzteile) oder jedes Wort einzeln. Wurde etwas in eiener Seite gefunden, wird der Seitentitel als Link dargestelt. Die Suche mit diesen Skripten liefert gute Ergebnisse nur auf kleinen Homepages unter 100-150 Seiten. Je häfiger gesuchte Begriffe auf den Seiten vorkommen, desto langsamer die Ausgabe. Ausserdem ist dieses Skript nur für Internetauftritte geeignet, die als eigene Domain im Apache mit DOCUMENT_ROOT eingetragen worden sind. (Seiten in Home-directories vom Typ http.//domäne/~benutzer/ können mit diesem Skript nicht durchsucht werden.) Es liegt daran, dass der Einrichtungsskript das Wurzelverzeichnis des Servers öffnet, darin alle Dateien und Unterordner (auch als Sym-Links unter Linux) durchsucht und die Liste der durchzusuchenden Dateien ebenfalls in DOCUMENT_ROOT speichert. Beim Starten der Suche wird diese Liste von DOCUMENT_ROOT eingelesen und nur die darin genannten Seiten durchsucht!

Installation

Entpacke lookuPhp.tar.gz am besten in das Hauptverzeichnis ("DOCUMENT_ROOT") deines Servers. Führe searchsetup.php aus, wenn du dir sicher bist, dass es dort keine rekursiven Symlinks gibt, sonst läuft sich der Server ein einer Schleife möglicherweise tot. Dieser Skript durchsucht alle Unterordner vom DOCUMENT_ROOT aus (unter Linux auch Symlinks) und stellt sie in einer Liste dar. Du kannst einzelne Dateien von der Suche auszuschließen, indem du das Häkchen herausnimmst. Über das Eingabefeld kannst du Dateiendungen vorgeben, die in die Liste aufgenommen werden sollen. Voreinstellung ist html und htm (Schreibweise: "html|htm"). Du kannst natürlich auch php-Skripte darin aufnehmen. (Dazu muss das Feld um "|php" erweitert werden und die Suche neu gestartet.) Jedoch werden dadurch möglicherweise auch Variablen mit passwörtern sichtbar. Hier liegt Deine VERANTWORTUNG! Angesichts der neuen Würmer, die php-Skripte Angreifen können, würde ich gar keine php-Skripte in die Liste aufnehmen. Wähle Dateien ab, die nicht durchsucht werden sollen und lass die Liste speichern. Sie heißt "search.inc" (DOCUMENT_ROOT/search.inc bzw http://domäne.de/search.inc) und enthält Dateinamen mit vollem Pfad (ab DOCUMENT_ROOT des Servers) getrennt durch PIPE-Zeichen "|". Diese Datei wird immer geöffnet, egal wo Du die search.php platzierst.

Einrichtung

Die Links zum Such-Formular (search.php) musst Du um "?language=de" erweitern (also href="search.php?language=de") für Deutsch oder "pl" für Polnisch! Du kannst die Datei vom Aussehen her aufpeppen (jedoch ohne den php-Code zu ändern). Ein fataler Fehler wäre, die CSS und Übersetzungsdateien aus dem Ordner zu entfernen! Denke daran, dass die URL’s zu css-styles und bildern absolut (d.h. mit "/" anfangen) sein sollen. Die Links werden ebenfalls absolut ausgegeben. Damit kannst Du aus jedem Unterordner auf Dateien im Hauptverzeichnis springen. Möglich sind auch andere Sprachen für das Suchformular und Ergebnisse, vorausgesetzt, Du machst Dir die Mühe und machst eine eigene Übersertzung z.B. für ukrainisch (abzuspeichern nach dem Länder-code "ua" als "lang.ua.php") und benutzt "search.php?language=ua" (also Bestandteil des Dateinamens der Übersetzungsdatei).

Suchen kann man – wie bereits erwähnt – eine Zeichenfolge (genaue Reihe von Wörtern im Satz) oder jedes Wort einzeln. Die Wörter werden dabei durch ein Leerzeichen voneinander getrennt. Die einzelnen Wörter oder die Wörterkette kann auch als ein Teil eines anderen Wortes bzw. einer ähnlichen Wörterkette gesucht werden, wenn man "als Wort-Teile" auswählt. Damit findet man "Haus" und "Hauses" aber auch "Robert" und "eroberte" (da die Groß- und Kleinschreibung nicht beachtet wird). Wird jedes Wort einzeln gesucht, so werden Ergebnisse nach Suchbegriff geordnet (zuerst das erste Wort mit passenden Ergebnissen, dann das zweite usw.)

In der CSS-Datei, die Du im HEAD der HTML-Datei einbindest (im search.php-Skipt heißt sie "style.css" und im Archiv beinhaltet ist) mußt Du nur noch CSS-Klasses mit Deinen Lieblingsfarben und Fonts belegen: searchbackground beinhaltet die Hintergrundfarbe, die für highlighting benutzt wird; searchfound legt das Aussehen der gefundenen Stellen fest; searchstring das Aussehen der Hinweise zu gesuchten Einzelwörtern (und -Teilen); searchsitename legt die Eigenschaften des Links der gefundenen Seite = der Überschrift fest. Außerdem solltest Du darauf achten, dass die Pseudoklassen wie hover oder visited (a:hover und a:visited) ebenfalls belegt sind, damit das Layout passt.

search.php kann man auch in einem IFRAME einbinden z.B.:

<iframe width="600" height="150" 
frameborder="0" align="middle" src="search.php"></iframe>

Bei gleichem Layout der Seite und des search.php-Skriptes sieht das ganze so aus, als wäre es eine Seite! Siehe unten… (durchsucht nicht den Blog, sondern die statischen Seiten von http://robert.kolatzek.org)

Für Fragen und Anregungen bin ich unter about myself zu finden.

Viel Spaß mit lookuPhp!