about myself   PHP & Linux   Hyperlinks

^..zurück..^
lookuPhp.tar.gz

Lokale Suchmaschiene mit PHP und regulären Ausdrücken

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 vom Dateisystem liest. Die Art der Suche kann ausgewählt werden: ganze Wörter oder Teilwörter und Sätze (Satzteile) oder jedes Wort einzeln. Es werden Namen der Seiten als Link dargestelt, in denen das Wort/Wortteil/Satz vorkommt. 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. Au&azlig;erdem 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 sematische Links) durchsucht und die Liste der durchzusuchenden Dateien ebenfalls in DOCUMENT_ROOT speichert. Beim Starten der Suche wird diese Datei mit der genannten Liste von DOCUMENT_ROOT eingelesen. Hast Du darin kein Schreibrecht (und dieses hast Du nicht, wenn du domäne/~user/ nutzst) kann dort die Liste nicht abgelegt werden. Vielleicht in der nächsten Version werde ich die andere Möglichkeit einrichten...

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 die in einer Liste mit der Möglichkeit dar, einzelne Dateien von der Suche auszuschließen. Über das Eingabefeld kannst Du Dateiendungen vorgeben, die in die Liste der durchzusuchenden Dateien 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" 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.

Benutzung

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 (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 frür das Suchformular und Ergebnisse, vorausgesetzt, Du machst Dir die Mühe und machst eine eigene Übersertzung zB 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 angesprochen 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 das "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 Seitennamens (Dateinamens) = 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.
Für Fragen und Anregungen bin ich unter about myself zu finden.

Viel Spaß mit lookuPhp!