ďťż

Wyszukiwarka w PHP z eksperta

       

Podstrony


telcocafe

Kożystam z wyszukiwarki z Eksperta. Tak wygląda jej kod:
<?  if (isset($_POST["zapytanie"])) $zapytanie=strtolower($_POST["zapytanie"]);    else $zapytanie="";    $zakazane_pliki=array("funkcje.php","hasla.php","szukaj.php") ;  $dozwolone_rozszerzenia=array("htm","html","php");    if ($zapytanie!="") {   echo "Wyniki wyszukiwania frazy <b>$zapytanie</b>:<br>";   przeszukuj(".",$zapytanie, $zakazane_pliki,$dozwolone_rozszerzenia);  }   else echo "Nie wpisales zadnej frazy!";      function przeszukuj($nazwa_folderu,$zapytanie,$zakazane_pliki,$dozwolone_rozszerzenia)  {     if (!isset($nazwa_folderu)) $nazwa_folderu=".";     $folder=opendir($nazwa_folderu);      while ($plik=readdir($folder))   {    if ((!in_array($plik, $zakazane_pliki)) && in_array(substr($plik,strrpos($plik,".")+1),$dozwolone_rozszerzenia) )        {     $zawartosc=implode("",file($nazwa_folderu."/".$plik));     $zawartosc2=strip_tags(strtolower($zawartosc));     $pozycja=strpos($zawartosc2, $zapytanie);     $start=strpos($zawartosc, "<title>")+7;     $stop=strpos($zawartosc, "</title>");       if ($start===false || $stop===false)       $tytul="brak tytułu strony";     else       $tytul=substr($zawartosc,$start,($stop-$start));            if ($pozycja!==false)      {     echo "<a href=".$nazwa_folderu."/".$plik.">".$tytul."</a>< br>";     }   }        if ($plik!="." && $plik!=".." && is_dir($nazwa_folderu."/".$plik))       przeszukuj($nazwa_folderu."/".$plik, $zapytanie, $zakazane_pliki, $dozwolone_rozszerzenia);   }     closedir($folder);  }    ?>  
A odwołanei do niego następująco:
<form method="POST" action="szukaj.php">Szukaj <input type="text" name="zapytanie" size="20">  <input type="submit" value="Szukaj" name="s1">  </form>
Problem jest taki:
1. Jak podać katalogi, które ma opuszcząć (nie przeszukiwać)?
2. Jak podać katalogi, w których ma podawać przed linkiem pliku "index.php?pokaz=" i usunąć w rozszeżenie ".htm"?



co do 1. to dopisujesz katalogi do tablicy $zakazane
a co do 2. to troche trzeba to przerobic ale mi sie nie chce ;)

Próbowałem dopisywać katalogi, ale wtedy pokazuje błąd w tej linii.
A co do dej przeróbki to by mi się przydała. Pliska

Odświeżę może temat, bo mi też było takie coś potrzebne, ale udało mi się zrobić to samemu. Podam kawałki kodu które zmieniłem:
Zamiast:
else $tytul=substr($zawartosc,$start,($stop-$start)); if ($pozycja!==false) { echo "<a href=".$nazwa_folderu."/".$plik.">".$tytul."</a>< br>";
Wystarczy dać takie coś:
else $tytul=substr($zawartosc,$start,($stop-$start)); $plik2=explode(".",$plik); if ($pozycja!==false) { echo "<a href=index.php?pokaz=".$plik2[0].">".$tytul."</a><br />";
To wszystko. Wyszukiwarka będzie działać.

A co do Ad.1 to nie wiem, bo nie potrzebowałem tego.



jakakolwiek sensowna wyszukiwarka nie będzie przy szukaniu otwierała plików, których zawartość ma szukać. To kolejny artykuł KŚE z serii "nic nie warte skrypty w PHP". Ktoś kto na poważnie zajmuje się PHP by to zobaczył to by padł ze śmiechu. Totalne dno przy "produkcyjnym" zastosowaniu.

Jak zrobić wyszukiwarkę:
- przy korzystaniu z baz danych mamy coś takiego jak LIKE i ILIKE (nie wszędzie)
SELECT * FROM artykuly WHERE tresc ILIKE '%fraza%'
- można zastosować SQLite (jest pod PHP5) by stworzyć indeks tekstowych artykułów (wyszukiwarka dokumentacji na php.net korzysta ze sqlite)
- zastosować cLucene: indexer i wyszukiwarkę. Głównie pod pliki ale można też przekazać odpowiednio dane z bazy. Wrapper znajduje się w Zend Framework, jest też binarne rozszerzenie na pecl.net. Lucene jest wysoce skalowalna i posiada "wtyki" w wielu językach (pyhon, perl, ruby itd.)
- jak się ma czystą i sensowną stronę to google dobrze ją zindeksuje i można skorzystać z Google API dla PHP by zrobić sobie "google na mojej stronie". Lub też wczytywać stronę google z wynikami wyszukiwania.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.