ďťż
Podstrony
|
telcocafeKoż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. |
|||
Sitedesign by AltusUmbrae. |