PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : glimpse script problem



pall
16.05.03, 08:18
Hallo

Ich bin dabei für meinen Apache-Server eine Suchmaschine zu schreiben, damit ich meine HTML-Seiten und meine HOWTOS usw. mit einen Suchbegriff schnell durchsuchen kann. Ich setzte dafür Glimpse ein.
Ich habe einen Glimpse-Filters erstellt um gz-Dateien vorher zu entpacken bevor sie in den Glimpse_Index geschrieben werden. Ich kann die .gz Dateien mir jedoch nicht im Konqueror anzeigen lassen, was mit html-Dateien aber wunderbar funktioniert. Was muß ich an dem Script ändern um mir auch gz_Dateien anzeigen zu lassen? Habe mal mein such_HOWTO.cgi-Script reingestellt.

<div style="background-color:white"><font face="Fixedsys,Courier,Courier New"><span style="font-family:monospace; font-size:10pt;color:blue">
<pcode>

#!/usr/bin/perl -T

$ENV{'PATH'} = '/bin';

####################################
# einige Routinen fürs CGI Parsing #
####################################

sub url_decode
{
my $input = shift;
$input =~ s/\+/ /g;
$input =~ s/%([0-9A-Fa-f]{2})/pack("C", hex($1))/eg;
if ($input =~ /^([-\@\w.öäüÖÄÜß]+)$/) # Test gegen Hacker
{
return $1;
}
else
{
&error_message ('error_char');
}
}

sub parse_cgi
{
my $input = shift;
my %FORM;
my (@PAIRS, $pair);

@PAIRS = split (/&/, $input);
foreach $pair (@PAIRS)
{
($key, $value) = split (/=/, $pair);
$key = &url_decode ($key);
$value = &url_decode ($value);
if (defined $FORM {$key})
{
$FORM {$key} .= "\0" . $value;
}
else
{
$FORM {$key} = $value;
}
}

return %FORM;
}

########################
# Messagekatalog #
########################

sub language
{
%MESG = ( 'headline', 'Search Results: ',
'title', 'Title',
'hits', 'Hits',
'error', 'Error',
'error_glimpse', 'Please install the glimpse package on this server!',
'error_char', 'Your search string includes illegal characters!' );

if ($ENV {'HTTP_ACCEPT_LANGUAGE'} eq "de")
{
%MESG = ( 'headline', 'Suchergebnisse: ',
'title', 'Titel',
'hits', 'Treffer',
'error', 'Fehler',
'error_glimpse',
'Bitte installieren sie das glimpse Paket auf diesem Server!',
'error_char', 'Ihre Suchanfrage enthält unzulässige Buchstaben!' );
}

sub error_message
{
print <<"END";
<HTML>

<HEAD>
<TITLE>$MESG{'error'}</TITLE>
</HEAD>

<BODY BGCOLOR=#FFFFFF>
<H1>$MESG{'error'}</H1>
$MESG{$_[0]}<P>
<HR>
<ADDRESS>
<A HREF="mailto:$ENV{'SERVER_ADMIN'}\@$ENV{'HTTP_HOST'}">
$ENV{'SERVER_ADMIN'}\@$ENV{'HTTP_HOST'}</A>
</ADDRESS>
</BODY>

</HTML>
END
exit;
}

##############################
# Ist glimpse installiert? #
##############################

sub glimpse_installed
{
if (not -X '/usr/bin/glimpse')
{
&error_message ('error_glimpse');
}
}

#######################
# Treffer sortieren #
#######################

sub sort_vgl
{
$results{$b}[1] > $results{$a}[1];
}

######################
# Suche #
######################

sub search
{
@results = split (/\n/,
`/usr/bin/glimpse -i -U -c -H /var/lib/html_index "$FORM{'search'}"`);

foreach $line (@results)
{
if ($line =~ /(.+?)\s(.+):\s([0-9]*)/)
{
$a = $1;
$b = $2;
$c = $3;
$a =~ s/\/usr//;
$b =~ s/\\:/:/g;
$results{$a} = [$b, $c];
}
}

print <<"ENDE";

<HTML>

<HEAD>
<TITLE>$MESG{'headline'} $FORM{'search'}</TITLE>
</HEAD>

<BODY BGCOLOR=#FFFFFF>
<H1>$MESG{'headline'} $FORM{'search'}</H1>

<TABLE>
<TR><TH>$MESG{'title'}
<TH>$MESG{'hits'}

ENDE

foreach $key (sort sort_vgl keys %results)
{
printf ("<TR><TD><A HREF=\"%s\">%s</A>\n", $key, $results{$key}[0]);
printf (" <TD>%s\n", $results{$key}[1]);
}
printf ("</TABLE>\n");

printf ("</BODY>\n</HTML>\n");
}

####################
# Hauptfunktion #
####################

&language;

if (defined $ARGV[0])
{
$FORM{'search'} = $ARGV[0];
}
else
{
printf ("Content-type: text/html\n\n");
%FORM = &parse_cgi ($ENV {'QUERY_STRING'});
}

&glimpse_installed;
&search;

</pcode>
</span></font></div>

Hier meine suche.html

<html>
<head>
<title>Suche </title>

</head>
<body BGCOLOR="#FFFFFF">
<H1>Suche</H1>
Ihre Suchanfrage für HOWTO
<form ACTION="/cgi-bin/such_HOWTO.cgi">
<BR> <INPUT TYPE="text" name="search">
<INPUT TYPE="submit" VALUE="search"></form><BR><BR>
Ihre Suchanfrage für MAN
<form ACTION="/cgi-bin/such_MAN.cgi">
<BR> <INPUT TYPE="text" name="search">
<INPUT TYPE="submit" VALUE="search">

</form>
</body>
</html>

Das such_MAN.cgi Script sieht genauso aus, wie das such_HOWTO.cgi, verweißt lediglich auf einen anderen Glimpse-Index. Doch leider wird mit dem such_MAN.cgi nichts gefunden, da der Glimpse-Index anscheind aus .gz-Dateien besteht. Bin mir aber nicht sicher. Wer kann helfen?

Danke Tschau