Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Przeszukiwanie katalogów w poszukiwaniu pliku
Forum PHP.pl > Forum > Przedszkole
mundek88
Witajcie,
posiadam folder główny a w nim mnóstwo innych podkatalogów i podkatalogów podkatalogów itd.
Nie ma stałego ich ułożenia,
np. raz jest folder_glowny/podfolder
a raz folder_glowny/xyz/zaq/abcd/

i teraz chciałbym przeszukać wszystkie pliki (łącznie ze wszystkimi podkatalogami) w poszukiwaniu pliku _mini.jpg - takich plików jest sporo, więc kazdego znalezionego adres dodac do tablicy.

Nie mam pojęcia jak się za to zabrać...
pozdrawiam
kicaj
Iteracja katalogow, bylo, poszukaj na forum!
mike
glob()

Albo iteratorami: Iteratory w PHP, czyli stare nowe SPL :: Filtrowanie wyników
Mordoran
  1. <?php
  2. if ($handle = opendir($nazwa_katalogu)) { // proba otwarcia katalogu z parametru
  3. while (false !== ($file = readdir($handle))) {
  4. if ($file == "_mini.jpg" ) {
  5. // zapisz do tablicy ze jest plik
  6. }
  7. //sprawdzaj czy sa katalogi w tym katalogu
  8. }
  9. closedir($handle);
  10. }
  11. ?>


i dalej rekurencja bym polecial
mundek88
ej, to jest mój pierwszy skrypt w php...
ten kod co podałeś nie odpala...

Cytat
//sprawdzaj czy sa katalogi w tym katalogu

no włąśnie na tym mój problem polega..
jak to zrobić ?
mike
Cytat(mundek88 @ 24.08.2007, 11:04:39 ) *
ej, to jest mój pierwszy skrypt w php...
No i?
Cytat(mundek88 @ 24.08.2007, 11:04:39 ) *
ten kod co podałeś nie odpala...
Pierwszy skrypt nie zwalnia Cię z myślenia. Jeśli oczekujesz gotowca to od razu sie wyloguj i nie wracaj.
Forum służy do pomocy.

Dostałeś linki i słowa kluczowe a także prowizryczny kod. Spróbuj coś wykombinować a jak nie to pokaż nam co osiągnąłeś a my Ci pomożemy.

Zapraszam do Przedszkola (przenoszę wątek).
Jeśli zaczynasz z PHP to po co pchasz się na PHP?
mundek88
naskrobałem coś takiego:
  1. <?php
  2.  
  3. $objDir = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( '.xyz/' ) );
  4.  
  5. foreach( $objDir as $objFile )
  6. {
  7. if (basename($objFile) == "_mini.jpg") {echo $objFile. '<br>';}
  8. }
  9. ?>

Działa jak należy, ale długo nie nacieszyłem się działaniem skryptu.
Cytat
Fatal error: Maximum execution time of 30 seconds exceeded in D:\index.php on line 5

Jak to obejść ?
mike
Zwiększyć czas na wykonanie skryptu w pliku php.ini.
Masz pewnie dużo plików (a jeszcze rekurencja jest) i przeszukanie wszystkie zajmuje więcej czasu niż skrypt ma zarezerwowane.
mundek88
Cytat(mike @ 24.08.2007, 11:19:17 ) *
Zwiększyć czas na wykonanie skryptu w pliku php.ini.
Masz pewnie dużo plików (a jeszcze rekurencja jest) i przeszukanie wszystkie zajmuje więcej czasu niż skrypt ma zarezerwowane.

zgadza się to dobiero część znalezionych plików, dlatego zależało by mi na optymalizacji tego.
Da się napisać to jakoś w sposób skracający czas wyszukiwania ? smile.gif
mike
Spróbuj z użyciem glob() albo tradycyjnie, proceduralnie: opendir(), readdir(), closedir() i fnmatch() zamiast Iteratorów.
Nie mnie jednak może nie być rezultatów. Przeszukiwanie plików jest czasochłonne i czas ten możesz zmniejszyć tylko nieznacznie.
-Ana-
Cytat(mundek88 @ 24.08.2007, 10:16:38 ) *
naskrobałem coś takiego:
  1. <?php
  2.  
  3. $objDir = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( '.xyz/' ) );
  4.  
  5. foreach( $objDir as $objFile )
  6. {
  7. if (basename($objFile) == "_mini.jpg") {echo $objFile. '<br>';}
  8. }
  9. ?>

Ten przykład listuje tylko bieżący katalog i podkatalogi ale już nie podkatalogi.
Jeśli utworzę katalog: c:\1\2\3 to powyższy przykład wyświetli:
\1
\1\2

Dlaczego nie przeszukuje w głąb wszystkich?
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.