Avatar billede lsolesen Nybegynder
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?
Avatar billede sostack Nybegynder
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
Avatar billede lsolesen Nybegynder
01. august 2003 - 14:34 #2
Den returnerer bare, at filnavnet ikke eksisterer, hvis jeg fx indtaster http://www.vih.dk/index.php
Avatar billede sostack Nybegynder
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
Avatar billede lsolesen Nybegynder
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?
Avatar billede sostack Nybegynder
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
Avatar billede lsolesen Nybegynder
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!
Avatar billede sostack Nybegynder
05. august 2003 - 09:16 #7
Lad os høre hvad du finder ud af, det kan jo være det kan hjælpe andre ;-}

//sostack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester