Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukiwarka w php
Forum PHP.pl > Forum > Przedszkole
anijud
Mam taką wyszukiwarkę. Wyszukuje ona pliki i wyświetla ścieżki do wyszukanych plików. Ja chcę by zamiast ścieżek wyświetlały się linki do danych plików. Czy ktoś wie jak to zrobić?

  1. <?php
  2.  
  3.  
  4. function drzewko($folder) {
  5. global $pliki;
  6. if($folder != "/") {
  7. $folder .= "/";
  8. }
  9. $id_f = opendir($folder);
  10. if($id_f) {
  11. while($plik = readdir($id_f)) {
  12. if($plik == '.' || $plik == '..') {
  13. continue;
  14. }
  15. if(is_dir($folder . $plik)) {
  16. drzewko($folder . $plik);
  17. } else {
  18. $pliki[] = $folder . $plik;
  19. }
  20. }
  21. closedir($id_f);
  22. }
  23. return $pliki;
  24. }
  25.  
  26. function czytelne($spis) {
  27. $rozszerzenie[] = "txt";
  28. $rozszerzenie[] = "dat";
  29. $rozszerzenie[] = "php";
  30. $rozszerzenie[] = "php3";
  31. $rozszerzenie[] = "phtml";
  32. $rozszerzenie[] = "htm";
  33. $rozszerzenie[] = "html";
  34. foreach($rozszerzenie as $roz) {
  35. $dl_roz = strlen($roz);
  36. foreach($spis as $plik) {
  37. if(substr($plik, -$dl_roz) == $roz) {
  38. $wynik[] = $plik;
  39. }
  40. }
  41. }
  42. return $wynik;
  43. }
  44.  
  45.  
  46.  
  47. $szukane=$_POST['szukane'];
  48. if(isset($szukane) && $szukane != '') {
  49. $szukane = ereg_replace("[\*\.\$/]", "", $szukane);
  50. $szukane_slowa = split("\ ", $szukane);
  51. array_unshift($szukane_slowa, $szukane);
  52. $ile_slow = count($szukane_slowa);
  53. unset($szukane);
  54.  
  55. $pliki = drzewko(".");
  56. $czytelne = czytelne($pliki);
  57. unset($pliki);
  58. sort($czytelne);
  59.  
  60. foreach($czytelne as $plik) {
  61. $id_pliku = fopen($plik, "r");
  62. $zawartosc = fread($id_pliku, filesize($plik));
  63. for($i=0; $i < $ile_slow; $i++) {
  64. if(ereg($szukane_slowa[$i], $zawartosc)) {
  65. $trafienia[] = $folder . $plik;
  66. }
  67. }
  68. fclose($id_pliku);
  69. }
  70.  
  71. if(!isset($trafienia)) {
  72. echo "Niestety nie znaleziono nic co by pasowało do twojego zapytania. Powrót";
  73. } else {
  74. $trafienia = array_unique($trafienia);
  75. sort($trafienia);
  76. foreach($trafienia as $pojedyncze) {
  77. echo $pojedyncze.'<br/>';
  78. }
  79. }
  80. } else {
  81. echo "Przecież chciałeś czegoś szukać! Powrót";
  82. }
  83. ?>
thomson89
Dajesz normalny link, a w źródle (href) tą ścieżkę do pliku.
kapuch
Zamien to:
  1. echo $pojedyncze.'<br/>';

na to:
  1. echo '<a href="'.$pojedyncze.'">'.$pojedyncze.'</a><br/>';

anijud
ok dzieki , działa, tylko wyskakuje błąd postaci:

Warning: fread() [function.fread]: Length parameter must be greater than 0. in /var/www/kataloguck/szukarka.php on line 74

i jeszcze dwa pytania:
czy da się zrobić tak, żeby wyświetlała się sama nazwa pliku bez rozszerzenia php?questionmark.gif
czy można zrobić tak by wyszukiwarka nie rozróżniała dużych i małych liter?questionmark.gif?
kapuch
Ten komunikat wskazuje na to, ze probowales czytac pusty plik, bo:
  1. fread($id_pliku, filesize($plik)) // jako drugi argument przekazujesz filesize, czyli rozmiar $plik, gdy ten plik jest pusty, to pewnie przekazuje 0 - co powoduje blad, a moze poprostu ta zmienna $plik nic nie zawiera? Sprawdz dokladnie kod.


2. Da sie wyswietlic bez rozszerzenia, wystarczy:
  1. $info = pathinfo($pojedyncze);
  2. echo '<a href="'.$pojedyncze.'">'.$info['dirname'].'/'.$info['filename'].'</a><br/>';
  3. // Albo prosciej:
  4. $wynik = preg_replace("/(.+)\..*$/", '$1', $pojedyncze);
  5. echo '<a href="'.$pojedyncze.'">'.$wynik.'</a><br/>';
  6. // Mozna jeszcze na wiele sposobow, poczytaj o:

anijud
Ok. Działa, rozszerzenie już się nie pojawia, ale chciałbym jeszcze żeby pokazywała się sama nazwa pliku bez ścieżki ( u mnie jest tak ./pies, a chcę bez tej kropki i / )Próbowałem zrobić ale mi to nie wychodzi.
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.