01. august 2003 - 10:28
Der er
6 kommentarer og
1 løsning
Søgefunktion og indeksering
Jeg er ved at lave en søgefunktion på
www.vih.dk. Siden har noget indhold i databaser (fx fag, kurser mv), mens andet indhold er på mere statiske sider (fx info om osv.). Jeg skal lave en søgefunktion, som returnerer et brugbart resultat - hvordan er det smartest at lave.
Jeg forestiller mig noget med at jeg laver en eller anden indeksering af alle siderne. Mit tillægsspørgsmål er så, hvordan jeg kan lave denne indeksering en smule automatisk?
01. august 2003 - 12:01
#1
prøv med noget i denne retning:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
sti/filnavn til indexering:<input type="text" name="filnavn"><br />
<input type="submit" value="Indexer">
</form>
<?php
function indexering($filnavn)
{
if(!strpos($filnavn, "."))
{
return "filnavnet skal indeholde en endelse ( ex. filnavn.html)";
exit;
}
if(!file_exists($filnavn))
{
return "filnavnet existerer ikke";
exit;
} else {
$fh = fopen($filnavn, "r");
$filindhold = fread($fh, 65535);
fclose($fh);
$filindhold = eregi_replace("/^\<[a-z0-9]\>/", "", $filindhold);
$search = array ("'<script[^>]*?>.*?</script>'si", // Strip out javascript
"'<[\/\!]*?[^<>]*?>'si", // Strip out html tags
"'([\r\n])[\s]+'", // Strip out white space
"'&(quot|#34);'i", // Replace html entities
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); // evaluate as php
$replace = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
$text = preg_replace ($search, $replace, $filindhold);
$text = nl2br($text);
$filtext = preg_replace("<br />", " ", $text);
$ord = explode(" ", $filtext);
$fh = fopen("indexering.rec", "a");
foreach($ord as $key)
{
$filord = $key . ":" . $filnavn . "\n";
fwrite($fh, $filord);
}
fclose($fh);
return $filnavn . " blev indexeret!<br />";
}
}
if($_POST['filnavn'])
{
echo indexering($_POST['filnavn']);
}
?>
//sostack
04. august 2003 - 09:54
#3
scriptet læser filer fra filsystemet, og ikke fra http-protokollen.
du skal bruge stien til filen, derfra hvor dit script ligger.
hvis dit script ligger i samme mappe på serveren, som filen der skal indexeres, skal du bare skrive filnavnet. hvis filen ligger i en undermappe til der hvor scriptet ligger skriver du "undermappe/fil.ext" uden anførselstegn.
sådan virker det her hos mig.
//sostack
04. august 2003 - 16:51
#4
Kan man måske lave det sådan, at den laver en indeksering af siderne efter, at de er sendt til browseren. Altså kun på html-indholdet - og så bagefter smide resultatet i en database, som man søger i?
05. august 2003 - 07:06
#5
Du kan ikke læse noget der er sendt til brugerens browser. Det er jo passé.
Så du skal nok igang med outputbuffering, eller med at læse streams.
//sostack
05. august 2003 - 08:50
#6
Ja, det er netop det jeg tænker på. Men tak for hjælpen så langt. Det du har skrevet, kan jeg også bruge til noget :), så du får lige nogle point!