<?php
###########################################################
#
# (c) PlaNet Concept e.K., Lars Odermath, 2003
#
###########################################################
#
# :: planetSearch :: Version vom 05.10.2003
#
# COPYRIGHT NOTICE
# Copyright 2003 PlaNet Concept e.K.
# All Rights Reserved.
# EMail: [email protected]
# URL : http://www.planetc.de
#
# :: planetSearch :: darf für private Homepages kostenlos benutzt und geändert
# werden, solange SÄMTLICHE Copyright-Verweise und die restlichen Kommentare erhalten
# bleiben.
#
# Mit dem Einsatz dieses Skripts akzeptieren Sie, daß PlaNet Concept e.K.,
# Lars Odermath, von jeglicher Haftung und Gewährleistung hinsichtlich des
# Einsatzes befreit ist.
#
# Der Verkauf dieses Skripts, auch in modifizierter Form, ist ohne vorherige
# Absprache ausdrücklich untersagt! (Mit anderen Worten: Bitte fragen Sie uns,
# bevor Sie versuchen, mit unserem Script Geld zu verdienen.)
#
# Sollten Sie den Copyright-Verweis in der Ausgabe des Scriptes nicht anzeigen
# oder das Script auf kommerziellen Seiten einsetzen wollen, können Sie dies gegen die
# Entrichtung einer Lizenz-Gebühr in Höhe von € 36,00 zzgl. der gesetzl. MWSt. tun.
# Senden Sie uns dazu bitte eine eMail und geben u.a. die URL für das Script an.
# Sie erhalten dann umgehend eine Rechnung von uns.
#
# BITTE LESEN UND BEACHTEN SIE UNSERE NUTZUNGSBEDINGUNGEN FÜR DIE SCRIPTE!!!
# Die Nutzungsbedingungen finden Sie in der der beigefügten "nutzungsbedingungen.txt"
# und unter http://www.planetc.de/download/nutzungsbedingungen.html
#
###########################################################
###########################################################
#############################
include ("./inc/config.inc.php");
#############################
$root_dir = $_SERVER["DOCUMENT_ROOT"].$from_dir."/";
@setlocale("LC_ALL", "de_DE");
# Suchbegriff(e) übernehmen und umwandeln
$search_exp = strip_tags($_POST["search_exp"]);
#############################
#Prüfen, ob ein Suchbegriff eingegeben wurde
if (!empty($search_exp)) {
# Sonderzeichen entfernen
$frrepl = array("=\+=", "=\s+=");
$torepl = array("", " ");
$search_exp = preg_replace( $frrepl, $torepl, $search_exp);
$search_exp = preg_quote($search_exp);
$search_exp = trim($search_exp);
# Zeichenanzahl des Suchbgeriffes prüfen
if (strlen($search_exp) < $sexp_length) {
// Template laden
$tmpl = join('', file("./tmpl/search_error.htm"));
$tmpl = preg_replace("=\[search_error_count\]=", $error_count, $tmpl);
$tmpl = preg_replace("=\[search_error_empty\]=", "", $tmpl);
eval('?>' . $tmpl);
} else {
# Suchbegriffe in Array umwandeln und zählen
$search_arr = explode(" ",$search_exp);
$search_count = count($search_arr);
# "Dummy"-Array für Such-Array erzeugen
$arr = array();
$arr_all = array();
# Template laden
$tmpl = join('', file("./tmpl/search_result.php"));
# Bereich der Trefferanzeige aus dem Template ziehen
preg_match_all("=\[SEARCH_START\](.*)\[SEARCH_STOP\]=siU", $tmpl, $between);
$search_pages = 0;
$cont_part = walk_dir($root_dir); // Verzeichnisdurchlauf starten
$search_pages = count($cont_part); // Anzahl der Trefferseiten
rsort($cont_part); // Array sortieren
for ($j=0; $j<$search_pages; $j++) { // Arrays auslesen
list($anz_searchexp, $title, $descr, $new_path) = $cont_part[$j];
$content = preg_replace("=\[SEARCH_TITLE\]=", "$title", $between[1][0]);
$content = preg_replace("=\[SEARCH_LINK\]=", "$from_dir"."$new_path", $content);
$content = preg_replace("=\[SEARCH_DESC\]=", "$descr", $content);
$content = preg_replace("=\[SEARCH_COUNT\]=", "$anz_searchexp", $content);
$cont_x .= $content;
}
// Suchergebnis zusammenstellen und anzeigen
$tmpl = preg_replace("=\[SEARCH_START\](.*)\[SEARCH_STOP\]=siU", $cont_x, $tmpl);
$search_exp = str_replace('\\', '', $search_exp);
$tmpl = preg_replace("=\[SEARCH_WORDS\]=", $search_exp, $tmpl);
$tmpl = preg_replace("=\[SEARCH_PAGES\]=", $search_pages, $tmpl);
if (empty($cont_part)) {
$tmpl = preg_replace("=\[NO_MATCH\]=", $no_match, $tmpl);
} else {
$tmpl = preg_replace("=\[NO_MATCH\]=", "", $tmpl);
}
eval('?>' . $tmpl);
#################################################
# Logdatei schreiben
foreach ($search_arr as $search_exp) {
$zeilen = file("./_log/search_log.txt");
$anz_zeilen = sizeof($zeilen);
$x=0;
# Datenfile auslesen
for ($i=0; $i<$anz_zeilen; $i++) {
list ($search_word, $search_num) = split("\\|", chop($zeilen[$i]));
// wenn Suchbegriff gefunden wird
if ($search_exp==$search_word) {
$search_num++;
$i-2;
$x++;
}
$new_log .= "$search_word|$search_num\n";
}
// wenn der Suchbegriff nicht schon geloggt wurde
if ($x==0) {
$search_num = "1";
$new_log .= "$search_exp|$search_num\n";
}
$data = fopen("./_log/search_log.txt","w+");
flock($data,1);
fwrite($data, $new_log);
flock($data,3);
fclose($data);
unset($new_log);
}
#################################################
}
}
#############################
# Wenn kein Suchbegriff eingegeben wurde
else {
# Template laden
$tmpl = join('', file("./tmpl/search_error.php"));
$tmpl = preg_replace("=\[search_error_count\]=", "", $tmpl);
$tmpl = preg_replace("=\[search_error_empty\]=", $error_empty, $tmpl);
eval('?>' . $tmpl);
}
#############################
#################################################
# Function für den Verzeichnisdurchlauf und die Trefferermittlung
function walk_dir($dir, $pos=2)
{
global $search_exp, $search_arr, $search_count, $arr, $ignore_dir, $dat_type, $root_dir, $search_area, $cont_part, $no_title, $search_pages, $arr_all;
$handle = @opendir($dir);
while ($file = @readdir ($handle))
{
if (preg_match("=^\.{1,2}$=",$file))
{
continue;
}
$cut_dir = preg_replace("=$root_dir=siU", "", $dir); // Verzeichnisse zum Vergleich anpassen
if (in_array($cut_dir, $ignore_dir)) continue; // zu ignorierende Verzeichnisse auslassen
if (preg_match('=(_vti_cnf|_notes)=i', $cut_dir)) continue;
if(is_dir($dir.$file))
{
walk_dir($dir.$file."/", $pos + 3);
}
else
{
#########################################
# Suche und Trefferanzeige
#########################################
$abs_dir = preg_replace("=$root_dir=","",$dir); // absoluten Pfad ermitteln
if (preg_match("=(\.$dat_type)$=",$file)) { // wenn eine Datei eine zulässige Endung hat...
$str = join('', file("$dir$file")); // ...Datei einlesen
if (!preg_match("=\<\!\-\-.no_search.\-\-\>=siU", $str)) { // auf auszuschließende Seiten prüfen
$str = ch_uml($str); // Umlaute verarbeiten
// Titel ermitteln
preg_match("=<title>(.*)</title>=siU", $str, $title);
// Meta-Beschreibung ermitteln
preg_match('=<meta.*name\="description".*content\="(.*)".*>=siU',$str,$descr);
// Keywords
preg_match('=<meta.*name\="keywords".*content\="(.*)".*>=siU',$str,$keyw);
// zu durchsuchender Bereich
if ($search_area==1) { // Titel, Description, Keywords
$a = "$title[1]"."$descr[1]"."$keyw[1]";
}
else { // alles
$str = preg_replace("=\<\!\-\-.no_search_start.\-\-\>.*?\<\!\-\-.no_search_stop.\-\-\>=s", "", $str);
$a = preg_replace("=<script.*>.*<\/script>=siU", "", $str); // JavaScript-Code entfernen
$a = preg_replace("=<\?.*?\?>=s", "", $a); // PHP-Tags löschen um nur Text zu durchsuchen
$a = preg_replace("=(<[^>]+>)=siU", "", $str); // Tags löschen um nur Text zu durchsuchen
$a .= "$title[1]"."$descr[1]"."$keyw[1]";
}
$i=0;
foreach ($search_arr as $search_word) { // jeden Suchbegriff prüfen
if (preg_match("=($search_word)=i", $a)) { // wenn Suchbegriff vorkommt...
$anz_searchexp += preg_match_all("=$search_word=siU", $a, $nullinger);
$i++; // i für jeden gefundenen Suchbegriff erhöhen
if ($i==$search_count) { // wenn ALLE Suchbegriffe gefunden wurden...
if (!empty($title[1])) // Title der Seite auslesen
{
$new_title = "$title[1]";
$new_path = "/$abs_dir$file";
}
else {
$new_title = "$no_title";
$new_path = "/$abs_dir$file";
}
if (!empty($descr[1])) // description auslesen
{
$new_descr = "$descr[1]";
}
else {
$new_descr = "";
}
if (!preg_match("=^\(\.\*\)$=", $new_title)) {
$s_show = array();
$s_show[] = $anz_searchexp;
$s_show[] = $new_title;
$s_show[] = $new_descr;
$s_show[] = $new_path;
array_push($arr_all, $s_show);
}
unset($str, $anz_searchexp);
}
}
}
}
}
#########################################
#########################################
}
}
$cont_part = $arr_all;
return ($cont_part);
@closedir($handle);
}
# Funktion ende
#################################################
// Umlaute bearbeiten
function ch_uml($del_uml) {
$del_uml = preg_replace("=ä=", "ä", $del_uml); // Umlaute und ß
$del_uml = preg_replace("=ö=", "ö", $del_uml);
$del_uml = preg_replace("=ü=", "ü", $del_uml);
$del_uml = preg_replace("=Ä=", "Ä", $del_uml);
$del_uml = preg_replace("=Ö=", "Ö", $del_uml);
$del_uml = preg_replace("=Ü=", "Ü", $del_uml);
$del_uml = preg_replace("=ß=", "ß", $del_uml);
return ($del_uml);
} // end func
#################################################
?>