Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Przeszukiwanie plików na serwerze w poszukiwaniu frazy.
wlodziu
post 4.07.2011, 09:00:18
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.07.2011

Ostrzeżenie: (0%)
-----


Witam. Próbuje stworzyć wyszukiwarkę plików na serwerze. Jej działanie ma polegać na tym, że wpisuje szukaną fraze i skrypt przeszukuje wszystkie katalogi i pliki na serwerze w poszukiwaniu tej frazy i wyświetla liste plików w jakich ona się znajduje. Mam taki skrypt on działa, ale (jest jedno ale) nie szuka w plikach php, znaczy szuka, ale nie wiem na jakiej zasadzie jeśli umieszczę np w pliku:
  1. <?php
  2. echo "ala ma kota";
  3. ?>

To nie znajdzie żadnych ze słów.
A chodzi mi o to by szukało np. zmiennej. Proszę o pomoc, niżej kod PHP skryptu:
  1.  
  2. <?
  3.  
  4. if (isset($_POST["zapytanie"])) $zapytanie=strtolower($_POST["zapytanie"]);
  5. else $zapytanie="";
  6.  
  7. $zakazane_pliki=array("funkcje.php","hasla.php","szukaj.php");
  8. $dozwolone_rozszerzenia=array("htm","html","php");
  9.  
  10. if ($zapytanie!="") {
  11. echo "Wyniki wyszukiwania frazy <b>$zapytanie</b>:<br>";
  12. przeszukuj(".",$zapytanie, $zakazane_pliki,$dozwolone_rozszerzenia);
  13. }
  14. else echo "Nie wpisales zadnej frazy!";
  15.  
  16.  
  17. function przeszukuj($nazwa_folderu,$zapytanie,$zakazane_pliki,$dozwolone_rozszerzenia)
  18. {
  19.  
  20. if (!isset($nazwa_folderu)) $nazwa_folderu=".";
  21.  
  22. $folder=opendir($nazwa_folderu);
  23.  
  24. while ($plik=readdir($folder))
  25. {
  26. if ((!in_array($plik, $zakazane_pliki)) && in_array(substr($plik,strrpos($plik,".")+1),$dozwolone_rozszerzenia))
  27. {
  28. $zawartosc=implode("",file($nazwa_folderu."/".$plik));
  29. $zawartosc2=strip_tags(strtolower($zawartosc));
  30. $pozycja=strpos($zawartosc2, $zapytanie);
  31. $start=strpos($zawartosc, "<title>")+7;
  32. $stop=strpos($zawartosc, "</title>");
  33.  
  34. if ($start===false || $stop===false)
  35. $tytul="".$nazwa_folderu."/".$plik."";
  36. else
  37. $tytul="".$nazwa_folderu."/".$plik."";
  38.  
  39.  
  40. if ($pozycja!==false)
  41. {
  42. echo "<a href=".$nazwa_folderu."/".$plik.">".$nazwa_folderu."/".$plik."</a><br>";
  43. }
  44. }
  45.  
  46. if ($plik!="." && $plik!=".." && is_dir($nazwa_folderu."/".$plik))
  47. przeszukuj($nazwa_folderu."/".$plik, $zapytanie, $zakazane_pliki, $dozwolone_rozszerzenia);
  48. }
  49.  
  50. closedir($folder);
  51. }
  52.  
  53. ?>

Z góry dziękuję.
Go to the top of the page
+Quote Post
Adi32
post 4.07.2011, 09:06:27
Post #2





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3.  
  4. function szukaj($sama='',$cos,&$gdzie)
  5. {
  6. global $return;
  7.  
  8. //global $_POST['gdzie'];
  9.  
  10. if (!empty($gdzie)) {
  11. $tyl = '../../'.$gdzie.'/';
  12. } else {
  13. $tyl = '../../';
  14. }
  15. //$tyl = '../'; // folder nadrzedny
  16. //$tyl = '../../strony/'; - strony
  17.  
  18. // ustawiania licznika
  19. if ($i='') {
  20. $i=0;
  21. }
  22. global $i;
  23.  
  24. $sciezkaa .= $sama.'/';
  25.  
  26. $sciezka = $tyl.$sciezkaa;
  27.  
  28. $sciezka = str_replace('//','/',$sciezka);
  29.  
  30. if ($handle = opendir($sciezka)) {
  31.  
  32. while (false !== ($file = readdir($handle)))
  33. {
  34.  
  35. if($file!=='..' && $file!=='.' && $file!=='jpg' && $file!=='png') {
  36.  
  37. if (is_dir($sciezka.$file)) {
  38.  
  39. szukaj($sciezkaa.$file, $cos,$gdzie);
  40.  
  41. } else {
  42.  
  43. if (strpos(file_get_contents($sciezka.$file), $cos) !== false) {
  44. echo $cos .' Znaleziono w pliku: '.$sciezka.$file.'<br />';
  45. flush();
  46.  
  47. }
  48.  
  49. }
  50.  
  51. }
  52.  
  53. }
  54.  
  55. closedir($handle);
  56. }
  57.  
  58. return $return;
  59.  
  60. }
  61.  
  62.  
  63.  
  64.  
  65. ?>
  66.  
  67. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  68. <html xmlns="http://www.w3.org/1999/xhtml" lang="pl" xml:lang="pl">
  69. <head>
  70. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  71. <title>Znajdywarka</title>
  72. <meta name="language" content="pl" />
  73. <meta name="Description" content="opis strony" />
  74. <meta name="Keywords" content=" wyraz1, wyraz2, wyraz3, wyraz4..." />
  75. <link rel="stylesheet" type="text/css" href="css/screen.css" />
  76. <script type="text/javascript" src="js/jquery.js"></script>
  77. <script type="text/javascript" src="js/js.js"></script>
  78. </head>
  79.  
  80. <body>
  81.  
  82. <p>Jeżeli wpiszesz coś w pole 'gdzie' to wyszukiwanie odbędzie się w: strony/(gdzie)/</p>
  83. <p>Jeżeli nic nie wpiszesz w pole 'gdzie' to wyszukiwanie odbędzie się w: strony/</p>
  84. <p></p>
  85. <form method="POST" action="detal.php">
  86. <label>Gdzie: <input type="text" name="gdzie" value=<?=$_POST['gdzie']?> /></label>
  87. <label>Co: <input type="text" name="cos" value=<?=$_POST['cos']?> /></label>
  88. <label><input type="submit" name="szukaj" value="Szukaj!"></label> <br />
  89.  
  90. </form>
  91.  
  92. <?php
  93.  
  94. if(isset($_POST['szukaj']) && !empty($_POST['cos'])) {
  95.  
  96. echo '<pre>';
  97. print_r(szukaj(null,$_POST['cos'],$_POST['gdzie']));
  98. echo '</pre>';
  99.  
  100. }
  101.  
  102. ?>
  103.  
  104. </body>
  105. </html>


Napisałem sobie jeszcze wersje FTP, która przeszuka cały server do którego się zalogujesz ale niestety nie udostępnię.

Ta wersja potrafi cofnąć się do folderu public_html lub niżej jeżeli brak praw.

Sądzę ze będziesz potrafił przystosować do swoich potrzeb.

Ten post edytował Adi32 4.07.2011, 09:09:24


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
redeemer
post 4.07.2011, 09:09:01
Post #3





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


Myślę, że błąd leży tutaj:
  1. $zawartosc2=strip_tags(strtolower($zawartosc));


--------------------
Go to the top of the page
+Quote Post
wlodziu
post 4.07.2011, 09:12:19
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.07.2011

Ostrzeżenie: (0%)
-----


Adi32, nie działa poprawnie.. http://wlodziu.eu/szuka3.php , właśnie chodzi mi żeby logował sie na serwer i szukał ;]

redeemer, on tylko tu zamienia znaki, moim zdaniem nie parsuje kodu php.

Ten post edytował wlodziu 4.07.2011, 09:15:37
Go to the top of the page
+Quote Post
by_ikar
post 4.07.2011, 09:23:19
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze zrozumiałem. Ma przeszukiwać katalogi w poszukiwaniu plików o konkretnej frazie tak? Bo na początku zrozumiałem, że ma je otwierać i szukać frazy, ale po kodzie nie widzę tego aby miał go otwierać.. Bardzo dobrze byłoby tutaj zastosować, o ile chodzi o samo wyszukiwanie plików według nazwy, po podanej frazie; bardzo dobre użycie wówczas RecursiveDirectoryIterator jak i RecursiveIteratorIterator.

Napisałem na swoje potrzeby loader klas w php. Przeszukuje on katalogi które mu podam, oraz podkatalogi wcześniej podanych katalogów. I w sumie bardzo ładnie to działa, bo tworzy sobie mapę plików w postaci tablicy gdzie kluczem jest nazwa klasy a wartością ścieżka do pliku. Jeżeli np raz byś przeszukał sobie wszystkie pliki stworzył taką mapę plików, i aktualizował ją co jakiś czas (może być cron, może być cache które ma jakiś czas żywotności) i całość może nawet dość szybko chodzić. Jeżeli chodzi o przeszukiwanie takiej mapy, frazami które są nie pełne, to jest: masz przykładowo plik o nazwie "ala ma kota.txt" a ktoś w polu wyszukiwarki wpisał: "ala ma" to w sumie mogło by to trochę mniej optymalnie wyglądać, ale chyba bardziej optymalnie niż za każdym razem przeszukiwać dziesiątki katalogów w poszukiwaniu danej frazy.

Jeżeli przeszukiwanie katalogów za każdym razem, to nie problem, to zawsze można użyć glob który uprości sporo kodu.

Ten post edytował by_ikar 4.07.2011, 09:25:39
Go to the top of the page
+Quote Post
wlodziu
post 4.07.2011, 09:26:40
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.07.2011

Ostrzeżenie: (0%)
-----


źle zrozumialeś, chodzi o to by każdy plik w każdym katalogu otwierał i szukał podanej frazy
Go to the top of the page
+Quote Post
Adi32
post 4.07.2011, 09:28:31
Post #7





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(wlodziu @ 4.07.2011, 10:12:19 ) *
Adi32, nie działa poprawnie.. http://wlodziu.eu/szuka3.php , właśnie chodzi mi żeby logował sie na serwer i szukał ;]

redeemer, on tylko tu zamienia znaki, moim zdaniem nie parsuje kodu php.


Tak, ponieważ nie edytowałeś ścieżki.

  1. $tyl


ustaw sobie na '../' albo wpisz tak jak Ci będzie pasowało na serverze.

P.S. Teraz ja nie wiem czy dobrze rozumiem ale ten skrypt otwiera pliki i przeszukuje ich zawartość w poszukiwaniu frazy.

Jeżeli chcesz skrypt który sprawdza tylko nazwy to też mam, mogę udostępnic.

Jeżeli chodzi Ci o szukacz FTP to ciężka sprawa, to mój autorski skrypt który powstał głównie w celach przenoszenia plików z serwera1 do servera2 z możliwością ich edycji w locie na podstawie kluczy. Musiałbym wyciąć z niego tylko część szukającą...


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
wlodziu
post 4.07.2011, 09:32:45
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.07.2011

Ostrzeżenie: (0%)
-----


Dokłądnei chodzi o to, podaje dane do ftp (formularz) skrypt sie loguje startuje z public_html i przeszukuje wszystkie katalogi i pliki w poszukiwaniu wpisanej frazy, ale musi też szukać zmiennych.
Go to the top of the page
+Quote Post
Adi32
post 4.07.2011, 09:45:03
Post #9





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. <?
  2.  
  3. $ftp_server = "";
  4. $ftp_user = "";
  5. $ftp_pass = "";
  6.  
  7.  
  8.  
  9. $conn = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
  10.  
  11. // try to login
  12. if (@ftp_login($conn, $ftp_user, $ftp_pass)) {
  13. //echo "Connected as $ftp_user@$ftp_server\n";
  14. echo 'nawiazano polaczenie z serverem!';
  15. $nav = 'ok';
  16. } else {
  17. echo "Couldn't connect as $ftp_user\n";
  18. }
  19.  
  20. function szukaj(&$conn,$sciezka='domains',$szukane)
  21. {
  22. echo '<pre>';
  23.  
  24. $lista = (ftp_nlist($conn,$sciezka));
  25.  
  26.  
  27. if (is_array($lista)) {
  28.  
  29. foreach ($lista as $num => $plik)
  30. {
  31.  
  32. //sleep(0.1);
  33.  
  34. $info = (pathinfo($plik));
  35.  
  36. if ($info['extension'] != '.' && $info['extension'] != '..' /* && $info['filename'] != 'jquery-tooltip' && $info['filename'] != 'przystan' && $info['filename'] != 'examples' && $info['filename'] != 'makefont' && $info['filename'] != 'font' && $info['filename'] != 'fpdf'*/) {
  37.  
  38. //echo '<br /> Info o pliku '.$plik.'<br />';
  39. //print_r ($info);
  40.  
  41. // jeśli katalog
  42. if(!isset($info['extension']) && $info['filename'] != '..' && $info['filename'] != '.') {
  43. echo '<br />Otwieram: '. $info['dirname'].'/'.$info['basename'].'<br />';
  44. szukaj($conn,$info['dirname'].'/'.$info['basename'],$szukane);
  45. }
  46. echo $plik.'<br />';
  47. flush();
  48. //echo $plik.'<br />';
  49. /*flush();
  50.  
  51.   if($info['basename'] == $szukane) {
  52.   echo $plik.'<br />';
  53.   flush();
  54.   }
  55.   */
  56. }
  57.  
  58. }
  59.  
  60. }
  61.  
  62. }
  63.  
  64. ?>
  65.  
  66. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  67. <html xmlns="http://www.w3.org/1999/xhtml" lang="pl" xml:lang="pl">
  68. <head>
  69. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  70. <title>Znajdywarka</title>
  71. <meta name="language" content="pl" />
  72. <meta name="Description" content="opis strony" />
  73. <meta name="Keywords" content=" wyraz1, wyraz2, wyraz3, wyraz4..." />
  74. <link rel="stylesheet" type="text/css" href="css/screen.css" />
  75. </head>
  76.  
  77. <body>
  78.  
  79. <p>Jeżeli wpiszesz coś w pole 'gdzie' to wyszukiwanie odbędzie się w: domena.pl/strony/(gdzie)/</p>
  80. <p>Jeżeli nic nie wpiszesz w pole 'gdzie' to wyszukiwanie odbędzie się w: domena.pl/strony/</p>
  81. <p></p>
  82.  
  83. <form method="POST" action="">
  84. <label>Gdzie: <input type="text" name="gdzie" value=<?=$_POST['gdzie']?> /></label>
  85. <label>Co: <input type="text" name="cos" value=<?=$_POST['cos']?> /></label>
  86. <label><input type="submit" name="szukaj" value="Szukaj!"></label> <br />
  87.  
  88. </form>
  89.  
  90. <?php
  91.  
  92. if(isset($_POST['szukaj']) && !empty($_POST['cos'])) {
  93.  
  94. echo '<pre>';
  95. szukaj($conn,'sciezka/startowa',$_POST['cos']);
  96. echo '</pre>';
  97.  
  98. }
  99.  
  100. ?>
  101.  
  102. </body>
  103.  
  104. </html>


szuka po nazwach plików, wystarczy zedytować aby przeszukiwał pliki.


Ten post edytował Adi32 4.07.2011, 09:46:23


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
wlodziu
post 4.07.2011, 09:48:52
Post #10





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.07.2011

Ostrzeżenie: (0%)
-----


Dzięki, tylko nie wiem jak zrobić by przeszukiwał też pliki php, np w szukana fraze wpisze $login i znajdzie mi wszystkei pliki które posiadają tą zmienną
Go to the top of the page
+Quote Post
Adi32
post 4.07.2011, 09:54:43
Post #11





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Ok spróbuje dopisać Ci wyszukiwanie w plikach.

Spróbuj przystosować na razie szukacz po nazwach do swoich potrzeb.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
redeemer
post 4.07.2011, 09:55:19
Post #12





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(wlodziu @ 4.07.2011, 10:12:19 ) *
redeemer, on tylko tu zamienia znaki, moim zdaniem nie parsuje kodu php.

Proponuję zobaczyć jak wyglada zawartość zmiennej $zawartosc2:
  1. $zawartosc2 = echo strip_tags(strtolower("<?php echo 'ala ma kota';?> ala ma psa"));
Funkcja strip_tags() usuwa wszystko pomiędzy < i >


--------------------
Go to the top of the page
+Quote Post
wlodziu
post 4.07.2011, 09:58:56
Post #13





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.07.2011

Ostrzeżenie: (0%)
-----


Problem rozwiązany, dziekuje wszystkim za pomoc.
Go to the top of the page
+Quote Post
Adi32
post 4.07.2011, 10:03:27
Post #14





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Ten mój skrypt na zasadzie FTP łączy się z zewnętrznym serverem, jednak otwieranie plików i edycja w locie przy wysyłaniu odbywa się za pomocą PHP. Tak więc popatrz sobie w manualu funkcje FTP i zobacz czy któraś oferuje pobieranie zawartości pliku. Jeśli nie to zrób sobie folder TEMP i i dopisz skrytpa który będzie do niego tymczasowo kopiować pliki do przeszukania, potem kasować. Prosta sprawa.

Ten post edytował Adi32 4.07.2011, 10:03:43


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 02:01