Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka na plikach
Forum PHP.pl > Forum > PHP
e0d9
Ostatnio wpadlem na pomysl wstawienia na strone wyszukiwarki, co byloby bardzo przydatne dla odwiedzajacych. Nie korzystam z bazy danych MySql, dlatego wyjscie bylo jedno - wyszukiwarka przeszukujaca pliki.

Znalazlem w sieci taki skrypt:
  1. <?php
  2. function drzewko($folder) {
  3.  global $pliki;
  4.  if($folder != "/") {
  5. $folder .= "/";
  6.  }
  7.  $id_f = opendir($folder);
  8.  if($id_f) {
  9. while($plik = readdir($id_f)) {
  10.  if($plik == '.' || $plik == '..') {
  11. continue;
  12.  }
  13.  if(is_dir($folder . $plik)) {
  14. drzewko($folder . $plik);
  15.  } else {
  16. $pliki[] = $folder . $plik;
  17.  }
  18. }
  19. closedir($id_f);
  20.  }
  21.  return $pliki;
  22. }
  23.  
  24. function czytelne($spis) {
  25.  $rozszerzenie[] = "php";
  26.  foreach($rozszerzenie as $roz) {
  27. $dl_roz = strlen($roz);
  28. foreach($spis as $plik) {
  29.  if(substr($plik, -$dl_roz) == $roz) {
  30. $wynik[] = $plik;
  31.  }
  32. }
  33.  }
  34.  return $wynik;
  35. }
  36.  
  37. if(isset($szukane) && $szukane != '') {
  38.  $szukane = ereg_replace("[*.$/]", "", $szukane);
  39.  $szukane_slowa = split(" ", $szukane);
  40.  array_unshift($szukane_slowa, $szukane);
  41.  $ile_slow = count($szukane_slowa);
  42.  unset($szukane);
  43.  
  44.  $pliki = drzewko(".");
  45.  $czytelne = czytelne($pliki);
  46.  unset($pliki);
  47.  sort($czytelne);
  48.  
  49.  foreach($czytelne as $plik) {
  50. $id_pliku = fopen($plik, "r");
  51. $zawartosc = fread($id_pliku, filesize($plik));
  52. for($i=0; $i < $ile_slow; $i++) {
  53.  if(ereg($szukane_slowa[$i], $zawartosc)) {
  54. $trafienia[] = $folder . $plik;
  55.  }
  56. }
  57. fclose($id_pliku);
  58.  }
  59.  
  60.  if(!isset($trafienia)) {
  61. echo "<p>Przeszukano zasoby witryny.</p><p>Podane wyrażenie nie zostało odnalezione.</p>";
  62.  } else {
  63.  echo "<p>Przeszukano zasoby witryny.</p><p>Podane wyrażenie znajduje się na nastepujących podstronach:</p><ul>";
  64. $trafienia = array_unique($trafienia);
  65. sort($trafienia);
  66. foreach($trafienia as $pojedyncze) {
  67.  echo "<li><a href="$pojedyncze">$pojedyncze</a></li>" .'';
  68. } echo "</ul>";
  69.  }
  70. } else {
  71.  echo "<p>Nie przeszukano zasobów witryny !</p>";
  72. }
  73. ?>


Struktura mojej strony (includowane to, co nad i pod trescia) wywolala pewne komplikacje. Skrypt przeszukuje rowniez pliki footer.php i top.php, ktore sa includowane na kazdej podstronie. Chcialbym, aby przeszukiwana byla tylko glowna tresc strony. Problem da sie latwo rozwiazac nakazujac skryptowi pominiecie w wyszukiwaniach dwoch wymienionych plikow. Niestety, jestem jeszcze poczatkujacym jesli chodzi o php i nie mam pomyslu, jak to wykonać.
siemakuba
wydaje mi sie ze wystarczą zmiany w funkcji czytelne():

  1. <?php
  2. function czytelne($spis) {
  3.  
  4.  // dodane
  5.  $dontParse = array('footer.php', 'top.php');
  6.  
  7.  $rozszerzenie[] = "php";
  8.  foreach($rozszerzenie as $roz) 
  9.  {
  10. $dl_roz = strlen($roz);
  11. foreach($spis as $plik) 
  12. {
  13.  // dodany if
  14.  if (in_array($plik, $dontParse))
  15.  {  continue;
  16.  }  
  17.  
  18.  if(substr($plik, -$dl_roz) == $roz) 
  19.  {
  20. $wynik[] = $plik;
  21.  }
  22. }
  23.  }
  24.  return $wynik;
  25. }
  26. ?>

pisane z glowy, nie testowane.
pozdr.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.