Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP5] FolderResearch
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Babcia@Stefa
Witam, na potrzeby własne napisałem klasę (prosta klasa) która przeszukuje folder wraz z podfolderami (często przydatna), a napisałem ją dlatego że funkcja rename()" title="Zobacz w manualu PHP" target="_manual przenosi cały folder, a funkcja copy()" title="Zobacz w manualu PHP" target="_manual wywala dziwaczny błąd smile.gif

  1. <?php
  2. /* Klasa przeszukuje folder wraz z jego podfolderami 
  3.  Napisana przez: WebNuLL(Babcia@Stefa)
  4.  www.babciastefa.boo.pl
  5.  Wersja: 2.0
  6. */
  7. class FolderResearch
  8. {
  9. // Tu trzymamy elementy tablicy, funkcja ClearResults czyści je :) a modyfikator private oznacza że nie można ich modyfikować
  10. private $Elements;
  11.  
  12. /* Głowna metoda, odpowiedzialna za wszystko, wywołuje sama siebię kiedy przechodzi do podfolderu */
  13. public function Find($Dir)
  14. {
  15. if(is_dir($Dir))
  16. {
  17. $FilesArray = scandir($Dir);
  18. foreach ($FilesArray as $No => $File) 
  19. {
  20. if($File == '..' OR $File == '.')
  21. continue;
  22.  
  23. if(is_dir($Dir. '/' .$File))
  24. {
  25. $this->Find($Dir. '/' .$File);
  26. $this->Elements[$Dir. '/' .$File] = 'directory';
  27. } else
  28. $this->Elements[$Dir. '/' .$File] = 'file';
  29.  
  30. }
  31. }
  32. }
  33.  
  34. /* Czyści wyniki */
  35. public function ClearResults()
  36. {
  37. return $this->Elements = array();
  38. }
  39.  
  40. /* Pobiera elementy bez potrzeby ponownego przeszukiwania */
  41. public function GetElements()
  42. {
  43. return $this->Elements;
  44. }
  45. }
  46. ?>


Użycie:
  1. <?php
  2. $Dir = new FolderResearch();
  3. $Dir->Find('forum.php.pl');
  4. $Elements = $Dir->GetElements();
  5. $Echo .= '<center>' .count($Elements). ' elementów</center><table border="1" cellpadding="0" cellspacing="0"><tr><td>Ściezka</td><td>Typ</td></tr>';
  6. foreach ($Elements as $key => $value)
  7. {
  8. $Echo .= '<tr><td>' .$key. '</td><td>' .$value. '</td></tr>';
  9. }
  10. echo $Echo. '</table>';
  11. ?>


Przykładowy wynik:


Pozdrawiam, WebNuLL(Babcia@Stefa)
mike
A co to ma robić? Bo nie ma takiego słowa jak przeszukiwająca.
W sumie opis i komentarz mówi, że to ma czegoś szukać (po co Ci więc były funkcje rename() i copy()). Jeśli tak to LOL. Długo stałeś przed otwartymi drzwiami waląc w nie głową?
Babcia@Stefa
Cytat(mike @ 18.08.2008, 14:00:43 ) *
A co to ma robić? Bo nie ma takiego słowa jak przeszukiwająca.
W sumie opis i komentarz mówi, że to ma czegoś szukać (po co Ci więc były funkcje rename() i copy()). Jeśli tak to LOL. Długo stałeś przed otwartymi drzwiami waląc w nie głową?


Myślałem że jesteś trochę mądrzejszy żeby zrozumieć, lub jesteś tyle że trochę dogryźliwy ;]
No ale dobra...

Ta klasa szuka w wybranym folderze plików i folderów, następnie zwraca je w postaci tablicy!
Funkcja rename potrafi przenieść cały folder z plikami, funkcja copy nie ! (dlatego trzeba radzić sobie inaczej..)

Pozdrawiam, WebNuLL(Babcia@Stefa)
mike
Cytat(Babcia@Stefa @ 18.08.2008, 16:36:09 ) *
Ta klasa szuka w wybranym folderze plików i folderów, następnie zwraca je w postaci tablicy!
PHP posiada gotowe mechanizmy, z których możesz skorzystać lub napisać to 1000 razy lepiej. To miałem na myśli pisząc, że walisz głową w otwarte drzwi tongue.gif
Cytat(Babcia@Stefa @ 18.08.2008, 16:36:09 ) *
Funkcja rename potrafi przenieść cały folder z plikami, funkcja copy nie ! (dlatego trzeba radzić sobie inaczej..)
To wiem, tylko po co Ci były te funkcje przy pisaniu mechanizmu szukania? Tego nie wiem tongue.gif
Babcia@Stefa
Pisze aplikację w PHP która przypomina program "Total Commander" dla Windows.
Są tam dwa okienka, i akurat teraz od jakiejś godziny siedzę nad kopiowaniem oraz przenoszeniem plików i folderów z jednego okienka do drugiego.
Z przenoszeniem sobie poradziłem, przenosi każdy plik i folder, jeśli foldery nie istnieją, tworzy je itp.

Pozdrawiam, WebNuLL(Babcia@Stefa)
kwiateusz
a iteratorami nie byloby szybciej, ladniej i w ogole dżezi? 3 link na slowo directoryiterator zwraca calkiem przyzwoite przyklady uzycia...
Babcia@Stefa
Cytat(kwiateusz @ 18.08.2008, 15:39:53 ) *
a iteratorami nie byloby szybciej, ladniej i w ogole dżezi? 3 link na slowo directoryiterator zwraca calkiem przyzwoite przyklady uzycia...


To jest mała i szybka klasa, DirectoryIterator jest troche duży, ma zbędne funkcje winksmiley.jpg
Dla mnie najlepsze to co moje, zamiast korzystać więcej z wbudowanego w Windows managera plików korzystam ze swojego winksmiley.jpg

Klasa jeszcze posłuży mi jako wyszukiwarka plików smile.gif
Inna moja klasa - CacheMan będzie kontrolować cache wyszukiwania, ajax będzie pokazywać pasek postępu aż do utworzenia cache itp.

@NuLL
Nie, WebNuLL to nie podróba Ciebię, nick sobię wymyśliłem o tak, szukając w Google czy takowy istnieje (takowy nie istniał więc pozostał), przepraszam cie że tak myślisz ale nie wiedziałem że masz podobny nick (że wogóle istniejesz biggrin.gif) smile.gif

Pozdrawiam, WebNuLL (Babcia@Stefa)
NuLL
Cytat
To jest mała i szybka klasa, DirectoryInterator jest troche duży, ma zbędne funkcje

A dziala szybciej niz twoja smile.gif Wynajdowanie kola to marne zajecie - daleko z tym nie zajedziesz.

A WebNuLL jakas marna podróba mnie ? smile.gif
Babcia@Stefa
Dobra, czego wy się czepiacie...
Co do tego DirectoryInterator* to mało o tym wiem, dlatego napisałem własne, a że udostępniłem to moja dobra wola, rozbudowywuje polski internet dodając coś nowego smile.gif

@edit
Nie słyszałem o DirectoryInteratorze.. myślałem że to klasa napisana zewnętrznie.

@edit
Funkcja scandir()" title="Zobacz w manualu PHP" target="_manual chodzi szybciej niż DirectoryInterator" title="Zobacz w manualu PHP" target="_manual* a więc użyłem jej.

* Nie znam dokładnej nazwy smile.gif

@edit
"Pomógł" nacisnąłem dlatego że się czegoś nauczyłem, teraz wiem co jest wydajniejsze do listowania katalogów winksmiley.jpg

Pozdrawiam, WebNuLL(Babcia@Stefa)
bim2
Cytat
rozbudowywuje polski internet dodając coś nowego

Jeśli tak go chcesz budować, to ja dziękuję...

PS. Czytaj komentarze na php.net, bo w readdir() było parę gotowych przykładów winksmiley.jpg
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.