Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP5] FolderResearch, Klasa przeszukująca cały folder wraz z podfolderami
Babcia@Stefa
post 18.08.2008, 14:45:12
Post #1





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


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)

Ten post edytował Babcia@Stefa 19.08.2008, 10:09:23


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
mike
post 18.08.2008, 15:00:43
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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ą?
Go to the top of the page
+Quote Post
Babcia@Stefa
post 18.08.2008, 15:36:09
Post #3





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


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)


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
mike
post 18.08.2008, 15:40:44
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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
Go to the top of the page
+Quote Post
Babcia@Stefa
post 18.08.2008, 16:07:37
Post #5





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


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)

Ten post edytował Babcia@Stefa 18.08.2008, 16:25:42


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
kwiateusz
post 18.08.2008, 16:39:53
Post #6


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




a iteratorami nie byloby szybciej, ladniej i w ogole dżezi? 3 link na slowo directoryiterator zwraca calkiem przyzwoite przyklady uzycia...
Go to the top of the page
+Quote Post
Babcia@Stefa
post 18.08.2008, 19:14:49
Post #7





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


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)

Ten post edytował Babcia@Stefa 19.08.2008, 09:48:10


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
NuLL
post 18.08.2008, 23:01:11
Post #8





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


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

Ten post edytował NuLL 18.08.2008, 23:01:37


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Babcia@Stefa
post 19.08.2008, 09:41:05
Post #9





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


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)

Ten post edytował Babcia@Stefa 19.08.2008, 12:33:06


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
bim2
post 20.08.2008, 23:31:27
Post #10





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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


--------------------
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: 29.03.2024 - 14:24