#!/usr/bin/perl #!c:/programme/perl/bin/perl #use File::stat; ## Variablendeklaration ## # Angabe des Basisverzeichnis (genaue Angaben beim Admin erfragen) $basedir = $ENV{DOCUMENT_ROOT}."/imv-center/prueftest/"; # Zum Basisverzeichnis korrespondierender URL $baseurl = 'http://www.pruefziffer.de/'; # Durchsuchbare Inhalte/ Dateien @files = ('*.html'); # URL und Titel der Website $link_url = 'http://www.pruefziffer.de'; $link_title = 'PrüfzifferValidate - Bankverbindungen schnell und einfach prüfen'; # Verzeichnis, in dem das Skript abgelegt ist $cgi_url = '/cgi-bin/search.cgi'; ## Ende Variablendeklaration ## # Optionen für die Gewichtung vom Dateiname, Titel, # Meta-Schlüsselwörter Meta-Beschreibung ($name_x, $title_x, $keywords_x, $description_x) = (1,2,4,2); ######################################################### ## Nachfolgender Code muss nur dann bearbeitet werden, # ## wenn das Ausgabedokumente anpepasst werden soll. # ######################################################### read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } # Umlaute $FORM {'queryphrase'} =~ s/ä/\ä\;/g; $FORM {'queryphrase'} =~ s/ö/\ö\;/g; $FORM {'queryphrase'} =~ s/ü/\ü\;/g; $FORM {'queryphrase'} =~ s/Ä/\Ä\;/g; $FORM {'queryphrase'} =~ s/Ö/\Ö\;/g; $FORM {'queryphrase'} =~ s/Ü/\Ü\;/g; $FORM {'queryphrase'} =~ s/ß/\ß\;/g; @sp = split (/\+/, $FORM{'queryphrase'}); if ($FORM{'queryphrase'}) { &get_files; &search; &return_html; } else { &prompt; } sub prompt { &output_top; print <Suche

Bitte geben Sie einen Suchbegriff oder eine Suchphrase ein:
EOM &output_bottom; } sub get_files { &bad_base unless (-e $basedir); chdir($basedir); foreach $file (@files) { # $ls = `ls $file`; # @ls = split(/\s+/,$ls); @ls = glob $file; foreach $temp_file (@ls) { if (-d $file) { $filename = "$file$temp_file"; if (-T $filename) { push(@FILES,$filename); } } elsif (-T $temp_file) { push(@FILES,$temp_file); } } } } sub search { # Konvertiert mehrere Leerzeichen in eines: $FORM{'queryphrase'} =~ s/\s+/ /g; $FORM{'queryphrase'} = " $FORM{'queryphrase'} "; # Konvertiert NOT-Statements in Minuszeichen: $FORM{'queryphrase'} =~ s/ not / -/ig; # Konvertiert AND-Statements in Pluszeichen: $FORM{'queryphrase'} =~ s/ and / \+/ig; # OR-statements: $FORM{'queryphrase'} =~ s/ or / /ig; # Platzhalter: $check = 'true' unless ($FORM{'queryphrase'} =~ /\*/); # Gruppierte Einträge: @terms = split(/\"/,$FORM{'queryphrase'}); $iterator = 0; $FORM{'queryphrase'} = ""; $placeholder = '%%%==%%%'; foreach $term (@terms) { if ($iterator == 1) {$iterator--;} else {$iterator++;} $term =~ s/ /$placeholder/g unless $iterator; $FORM{'queryphrase'} .= $term; } @terms = split(/\s+/,$FORM{'queryphrase'}); foreach $term (@terms) { next if ($term eq ''); $term =~ s/$placeholder/ /g; if ($term =~ /^\+/) { $term =~ s/\+//o; $term = '\W' . $term. '\W' unless ($term =~ /^\$/); $term =~ s/^\$//; push(@required,$term); $required_terms_present = "you bet"; } elsif ($term =~ /^-/) { $term =~ s/-//o; $term = '\W' . $term. '\W' unless ($term =~ /^\$/); $term =~ s/^\$//; push(@forbidden,$term); $forbidden_terms_present = "fraid so"; } else { $term = '\W' . $term. '\W' unless ($term =~ /^\$/); $term =~ s/^\$//; push(@optional,$term); } } foreach $FILE (@FILES) { open(FILE,"$FILE"); @LINES = ; close(FILE); $string = join(' ',@LINES); $string =~ s/\n//g; # Extrahiert Titel, sofern vorhanden: if ($string =~ /(.*)<\/title>/i) { $titles{$FILE} = $1; for ($i=1;$i<$title_x;$i++) { $string .= $titles{$FILE}; } } $titles{$FILE} = $FILE unless $titles{$FILE}; # Extrahiert Beschreibung, sofern vorhanden: if ($string =~ /<meta\s+name="description"\s+content="(.*)>/i) { @cut = split(/\">/,$1); $description{$FILE} = $cut[0]; for ($i=0;$i<$description_x;$i++) { $string .= $description{$FILE}; } } else { $string2 = $string; $string2 =~ s/<title>(.*)<\/title>//ig; $string2 =~ s/<([^>]|\n)*>//g; @words = split(/\s+/,$string2); for ($i=0;$i<25;$i++) {$description{$FILE} .= "$words[$i] ";} $description{$FILE} .= "..."; } # Extrahiert Keywords, sofern vorhanden: if ($string =~ /<meta\s+name="keywords"\s+content="(.*)>/i) { @cut = split(/\">/,$1); $keywords = $cut[0]; for ($i=0;$i<$keywords_x;$i++) { $string .= $keywords; } } # Gewichtet den Dateinamen: for ($i=0;$i<$name_x;$i++) { $string .= "$baseurl$FILE"; } # $string =~ s/<([^>]|\n)*>//g; # Überprüft optionale Ausdrücke: foreach $term (@optional) { $lowercase = $term; $lowercase =~ tr/[A-Z]/[a-z]/; $lowercase =~ tr/\\w/\\W/; if (($term eq $lowercase) && ($check)) { $include{$FILE} = 'yes' if ($string =~ /$term/i); @count = split(/$term/i,$string); } elsif ($check) { $include{$FILE} = 'yes' if ($string =~ /$term/); @count = split(/$term/,$string); } $word_count = @count; $relevance{$FILE} = $relevance{$FILE} + $word_count; } # Prüft erforderliche Begriffe: if ($required_terms_present eq "you bet") { foreach $term (@required) { $lowercase = $term; $lowercase =~ tr/[A-Z]/[a-z]/; $lowercase =~ tr/\\w/\\W/; if (($term eq $lowercase) && ($check)) { if (($string =~ /$term/i) && ($include{$FILE} ne 'no')) { $include{$FILE} = 'yes'; @count = split(/$term/i,$string); } else { $include{$FILE} = 'no'; last; } } elsif ($check) { if (($string =~ /$term/) && ($include{$FILE} ne 'no')) { $include{$FILE} = 'yes'; @count = split(/$term/,$string); } else { $include{$FILE} = 'no'; last; } } $word_count = @count; $relevance{$FILE} = $relevance{$FILE} + $word_count; } } # Prüft verbotene Begriffe: if (($forbidden_terms_present eq "fraid so") && ($check)) { foreach $term (@forbidden) { $lowercase = $term; $lowercase =~ tr/[A-Z]/[a-z]/; $lowercase =~ tr/\\w/\\W/; if (($term eq $lowercase) && ($string =~ /$term/i)) { $include{$FILE} = 'no'; last; } elsif ($string =~ /$term/) { $include{$FILE} = 'no'; last; } } } # Platzhalter $include{$FILE} = 'yes' unless ($check); # Format für die Relevanz der Suchergebnisse: if ($include{$FILE} eq 'yes') { $relevance = sprintf("%.3f",($relevance{$FILE}/1000)); $HITS{"$relevance$FILE"} = "$FILE"; $hitcount++; } } # Schleifenende - alle Dateien sind durch. } # Suchprozedur abgeschlossen. #### Ergebnisausgabe ### sub return_html { # Erzeugt eine Zusammenfassung für den Suchenden: $docstring = "$hitcount Dokumente"; $docstring = "Ein Dokument" if ($hitcount == 1); $docstring = "Keine Dokumente" unless ($hitcount); $summary = "<H3> $docstring gefunden</H3> \n"; $summary .= "<BLOCKQUOTE>\n<PRE>\n"; $summary .= "Optionale Begriffe: " if (@optional); $i = 0; foreach $term (@optional) { $term = "<I>$term</I>" unless ($term =~ /^\\W/); $term =~ s/\\W//g; $summary .= "$term"; $i++; $summary .= ", " unless ($i == @optional); } $summary .= "\n Erzungene Begriffe: " if (@required); $i = 0; foreach $term (@required) { $term = "<I>$term</I>" unless ($term =~ /^\\W/); $term =~ s/\\W//g; $summary .= "$term"; $i++; $summary .= ", " unless ($i == @required); } $summary .= "\n Ausgeschlossene Begriffe: " if (@forbidden); $i = 0; foreach $term (@forbidden) { $term = "<I>$term</I>" unless ($term =~ /^\\W/); $term =~ s/\\W//g; $summary .= "$term"; $i++; $summary .= ", " unless ($i == @forbidden); } $summary .= "\n</PRE></BLOCKQUOTE>\n"; open(SUMMARY,">>$summary_file"); print SUMMARY "Suche nach $ENV{'REMOTE_HOST'}:<BR>\n"; print SUMMARY $summary; close(SUMMARY); # Es folgt die Ausgabe der Suchergebnisse: &output_top; print <<EOM; <h1>Ergebnis der Suche</h1> <P><font face="Verdana, Arial, Helvetica, sans-serif"> $summary <DL> EOM if ($hitcount > 0) { foreach $key (reverse sort keys %HITS) { $file = $HITS{$key}; $size = -s "$basedir$file"; if ($size > 1500) {$size = int($size/1000) . " K";} else {$size = "$size bytes";} $last = &Last_Modified("$basedir$file"); print "<P><DT><a href=\"$baseurl$file\"><STRONG>$titles{$file}</STRONG></a></DT>\n"; print "<DD>$description{$file}<BR>\n"; print "<CITE><A HREF=\"$baseurl$file\">$baseurl$file</A>"; # print "<FONT SIZE=-1> - $size - $last</FONT>"; print "</CITE></DD></P>\n"; } } &output_bottom; } sub Last_Modified { $filename = shift; #$sb = stat($filename); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime((stat($filename))[9]); #($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = scalar localtime($sb->mtime); @months = ("Januar","Februar","M&auuml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"); $year += 1900; return "$mday. $months[$mon] $year"; } sub output_top { print "Content-type: text/html\n\n"; print <<EOM; <HTML> <HEAD> <STYLE type="text/css"> A:link,A:visited,A:active{color:#000099;text-decoration:none;font-weight:bold;font-family:Arial,Helvetica,Verdana,sans serif} A:hover{color:#990000;text-decoration:underline;font-weight:bold;font-family:Arial,Helvetica,Verdana,sans serif} p,td,li{color:#000000;font-family:Arial,Helvetica,Verdana,sans serif;font-size:10pt} h1{color:#0000AA;font-family:Arial,Helvetica,Verdana,sans serif;font-size:16pt} h2{color:#0000AA;font-family:Arial,Helvetica,Verdana,sans serif;font-size:14pt} h3{color:#0000AA;font-family:Arial,Helvetica,Verdana,sans serif;font-size:12pt} .field{color:#08386D;font-size:8pt;font-family:Arial,Helvetica,Verdana,sans serif;background-color:#F3F5F8;padding:0pt;top:-5pt;} body{margin-left:0px;margin-right:0px;margin-top:0px;margin-bottom:0px} </STYLE> <TITLE>Suche auf den Seiten von pruefziffer.de
Homepage pruefziffer.de PrüfzifferValidate
    News   Site Map   Kontakt   Impressum    
Produktbeschreibung
Funktionen testen
Downloads
Preise
PrüfzifferValidate bestellen
Frequently Asked Questions
EOM } sub output_bottom { print <

 
© 1999-2001 imMEDIAtely Medienversand, Germany
EOM }