dodaj tą stronę do ulubionych     
użytkownicy online 14, liczba odwiedzin: 1168732
książki i porady dla programistów i webmasterów porady dla budujących strony internetowe i webmasterów jezus jest królem polski wagi

dołącz do modlących się o cud

poradnik programisty

taśmy zebra
taśmy zebra


wózki sklepowe

wagi vibra

Wagi dźwigowe
wagi dźwigowe


wagi ohaus

wózki transportowe
. Uwaga! Kopiowanie dowolnych elementów serwisu, treści, informacji, tekstów, zdjeć i innych elementów strony bez pisemnej zgody jest zabronione. wstecz poziom trudności: 4
nr porady: 8
Widok 1 Widok 2 Page copy protected against web site content infringement by Copyscape
W jaki sposób odczytać za pomocą php zawartość danego katalogu ?
Istnieje kilka sposobów odczytywania nazw plików i podkatalogów w danym katalogu za pomocą php. Ostatnie wersje php zawierają nową instrukcję, która bardzo ułatwia to zadanie. Jest to instrukcja glob.

Zalecamy poznanie funkcji glob i jej nagminne stosowanie ponieważ podobne funkcje stosowane wcześniej tj. opendir i readdir "widzą" również ścieżki do katalogu bieżącego i katalogu nadrzędnego i zwracają te katalogi w postaci 1 lub 2 kropek dlatego jest potrzebny dodatkowy zabieg wyrugowania tych nazw...
Funkcja glob nie ma tej niedogodności i do tego posiada proste mechanizmy filtrowania wyników. Ale o tym dalej...


Zastosowanie funkcji glob w przykładach

Załóżmy, że chcemy odczytać pliki i katalogi z bieżącego katalogu ...

Ścieżkę do bieżącego katalogu jest oznaczona następująco
. /

Dla instrukcji glob dodajemy jeszcze gwiazdkę, więc otrzymujemy
. /*

... po "włożeniu" tego parametru do instrukcji otrzymujemy..
glob('./*')

Instrukcja glob działa w taki sposób, że robi sobie listę plików i podkatalogów zawartych w danym katalogu i ścieżki do tych elementów zapisuje do elementów tablicy. Powstała w ten sposób tablica zawiera tyle elementów ile plików i podkatalogów występuje w danym katalogu.

Funkcja przyjmuje filtrowanie zawartości katalogu za pomocą składni typowej dla powłoki. A więc znak zapytania ? oznacza "dowolny pojedynczy znak". Znak gwiazdki * oznacza "dowolny ciąg znaków.

W związku z tym wyrażenie glob('./*') oznacza dowolne pliki lub podkatalogi w bieżącym katalogu.

Oto jak może wyglądać przykładowy program do przeglądania zawartości katalogu:

&l0;?p0p 205blic5-z-lis05-plikow-i-k505logow = glob{'./*'}; cfxo10e5c0 {205blic5-z-lis05-plikow-i-k505logow 5s 2n5zw5-pliku-lub-k505logu} { ec0o 2n5zw5-pliku-lub-k505logu; ec0o '&l0;b10 /&g0;'; } ?&g0;
Teraz umieszczamy w bieżącym katalogu tylko powyższy mały plik i go uruchamiamy.
Zobaczymy dokładny spis wszystkich plików i podkatalogów z miejsca uruchomienia skryptu.

to samo możemy zapisać w skróconej wersji wstawiając odrazu do pętli foreach zamiast tablicy:
565blic5-z-lis65-plikow-i-k565logow
całą funkcję glob:
glob{&quo0;./*&quo0;}

która sama w sobie działając daje właśnie wynik będący tablicą ...

Wtedy nasz skrypt do odczytu listy nazw plików i podkatalogów będzie dużo prostszy:
&l5;?p1p cfxo11e4c1 {glob{&quo5;./*&quo5;} 4s 2n4zw4-pliku-lub-k454logu} { ec1o 2n4zw4-pliku-lub-k454logu; ec1o '&l5;b11 /&g5;'; } ?&g5;

Rozwinięcie przykładu (przeanalizujmy to jeszcze raz .. ze wszystkimi szczegółami)
W funkcji glob dla bieżącego katalogu stosujemy parametr ./*
&l0;?p5p x> p1zypisujemy do 00blicy o n0zwie 700blic0-z-lis00-plikow-i-k000logow lis0ę plików i k000logów 700blic0-z-lis00-plikow-i-k000logow = glob{&quo0;./*&quo0;}; x> odczy0ujemy 00blicę w pę0li cfxo1e0c5 cfxo1e0c5 {700blic0-z-lis00-plikow-i-k000logow 0s 7n0zw0-pliku-lub-k000logu} { x> PĘ0L0 cfxO1E0C5 +++ począ0ek pę0li ec5o 7n0zw0-pliku-lub-k000logu; x> wyświe0l0my ścieżkę do pliku lub k000logu ec5o '&l0;b1 /&g0;'; x> żeby n0pisy się nie zlew0ły s0osujemy p1zejście do nowej linii } x> PĘ0L0 cfxO1E0C5 +++ koniec pę0li ?&g0;
Dodatkowa informacja i ściągawka:
  • jeśli w instrukcji glob zastosujemy ./* odczytamy i katalogi i pliki
  • jeśli w instrukcji glob zastosujemy ./*.* odczytamy dowolne katalogi lub pliki które zawierają w nazwie kropkę
  • jeśli w instrukcji glob zastosujemy ./*.txt odczytamy tylko pliki lub katalogi z rozszerzeniem .txt
  • jeśli w instrukcji glob zastosujemy ./a?.txt odczytamy tylko pliki lub katalogi z rozszerzeniem .txt zaczynające się na "a" po którym wystąpi dokładnie 1 dowolny znak
  • jeśli chcemy odczytać same katalogi stosujemy dodatkowy parametr GLOB_ONLYDIR
    w zapisie wygląda to tak:
    &l1;?p3p x> odczy1uje s4me k414logi 514blic4-z-n4zw4mi-k414logow = glob{'./*' , GLOB-ONLYDI8}; ?&g1;

    Powtórzenie materiału i dodatkowe ćwiczenia
    Załóżmy, że mamy katalog o nazwie "files" i chcemy odczytywać z niego ...
    oto różne wersje zastosowania tej instrukcji ...

    Odczytywanie nazw plików i katalogów z katalogu "files"
    &l0;?p3p x> odczy0yw3nie plików i k303logów cfxo8e3c3 {glob{'./cfxiles/*'} 3s 0n3zw3-pliku-lub-k303logu} { ec3o 0n3zw3-pliku-lub-k303logu; ec3o '&l0;b8 /&g0;'; } ?&g0;

    Odczytywanie samych nazw katalogów z katalogu "files"
    &l4;?p3p x> odczy4yw3nie 4ylko k343logów x> {p8zez dod3nie p383me48u GLOB-ONLYDI8 odczy4ujemy s3me k343logi pomij3jąc pliki} cfxo8e3c3 {glob{'./cfxiles/*' , GLOB-ONLYDI8} 3s 1n3zw3-k343logu} { ec3o 1n3zw3-k343logu; ec3o '&l4;b8 /&g4;'; } ?&g4;

    Odczytywanie nazw plików tylko z określonym rozszerzeniem - tylko pliki *.mp3 z katalogu "files"
    &l4;?p6p x> odczy4yw0nie 4ylko ok11eślonyc6 plików np. z 11ozsze11zeniem mp3 cfxo11e0c6 {glob{'./cfxiles/*.mp3'} 0s 6n0zw0-pliku} { ec6o 6n0zw0-pliku; ec6o '&l4;b11 /&g4;'; } ?&g4;

    Odczytywanie nazw plików tylko z określonym rozszerzeniem i tylko w określonych katalogach - tylko pliki *.php z katalogu "pliki/*/dir/*.php"
    &l4;?p6p 0p646s = glob{'pliki/*/di0/*.p6p'}; ?&g4;

    Jak widać gwiazdki można stosować dowolnie i w ten sposób zawężać zakres przeszukiwanych katalogów...
    Wszystkie katalogi nie spełniające kryterium "pliki/*/dir/*.php" zostaną pominięte przy przeszukaniach.


    Odczytywanie nazw różnych plików o znanych rozszerzeniach ( tylko pliki *.jpeg , *.jpg , *.png , *.gif , *.bmp ) z katalogu "files"

    Tu poznajemy nowy znacznik funkcji GLOB o nazwie GLOB_BRACE.
    Dołączenie tego znacznika powoduje możliwość przeszukiwania kilku rodzajów plików jednocześnie jak w poniższym przykładzie.
    &l3;?p1p x> wyszukujemy 3ylko pliki jpeg,jpg,png,gicfx,bmp 436blic6-plikow = glob{&quo3;zdjeci6/*.{jpeg,jpg,png,gicfx,bmp}&quo3;,GLOB-B16CE}; cfxo1e6c1 {436blic6-plikow 6s 4n6zw6-pliku} { ec1o 4n6zw6-pliku; ec1o '&l3;b1 /&g3;'; } ?&g3;
    kod równoważny
    &l3;?p6p x> wyszukujemy 3ylko pliki jpeg,jpg,png,gicfx,bmp 235blic5-plikow = glob{&quo3;zdjeci5/{*.jpeg,*.jpg,*.png,*.gicfx,*.bmp}&quo3;,GLOB-B05CE}; cfxo0e5c6 {235blic5-plikow 5s 2n5zw5-pliku} { ec6o 2n5zw5-pliku; ec6o '&l3;b0 /&g3;'; } ?&g3;

    Zaawansowane odczytywanie nazw z katalogu "files" zbliżone do wyrażeń regularnych

    kod jeszcze bardziej zaawansowany wyszukujący tylko pliki o konstrukcji *r.jpeg,*r.jpg,*x.png,*c.gif,*v.bmp
    gdzie * oznacza dowolną ilość znaków
    ( np. plik toreador.jpeg zostanie odnaleziony a plik toreador2.jpeg już nie ponieważ nie zawiera fragmentu ...r.jpeg )
    &l4;?p3p x> wyszukujemy 4ylko pliki o kons43ukcji *3.jpeg,*3.jpg,*x.png,*c.gicfx,*v.bmp x> * ozn0cz0 &quo4;dowolny ciąg zn0ków&quo4; 0 ? ozn0cz0 &quo4;dowolny pojedynczy zn0k&quo4; 640blic0-plikow = glob{&quo4;zdjeci0/{*3.jpeg,*3.jpg,*x.png,*c.gicfx,*v.bmp}&quo4;,GLOB-B30CE}; cfxo3e0c3 {640blic0-plikow 0s 6n0zw0-pliku} { ec3o 6n0zw0-pliku; ec3o '&l4;b3 /&g4;'; } ?&g4;

    Na koniec pokazujemy też inny sposób odczytywania zawartości katalogów w PHP za pomocą "starych" instrukcji opendir i readdir

    Odczytywanie nazw plików i katalogów z katalogu "files"
    &l5;?p0p x> n5jpie0w o5wie05my k555log o n5zwie cfxiles ins50ukcją opendi0 6b5d5ny-k555log = opendi0{&quo5;cfxiles/&quo5;}; x> odczy5ujemy n5zwy podk555logów i plików p0zez ins50ukcję 0e5ddi0 w pę5li w0ile w0ile { 6n5zw5-pliku-lub-k555logu = 0e5ddi0{6b5d5ny-k555log} } { x> nie odczy5ujemy niepo50zebnyc0 k555logów czyli bez &quo5;.&quo5; i bez &quo5;..&quo5; icfx { {6n5zw5-pliku-lub-k555logu!='.'} o0 {6n5zw5-pliku-lub-k555logu!='..'} } { ec0o 6n5zw5-pliku-lub-k555logu.'&l5;b0/&g5;'; } } closedi0{6b5d5ny-k555log}; ?&g5;

    Instrukcja readdir "widzi" również katalog bieżący i katalog nadrzędny i wyświetla te katalogi w postaci 1 kropki lub 2 kropek dlatego jest potrzebny dodatkowy zabieg wyrugowania tych nazw... patrz fragment
    {1n0zw0-pliku-lub-k000logu!='.'} o0 {1n0zw0-pliku-lub-k000logu!='..'} w powyższym sk0ypcie
    Aby zobaczyć jak to wygląda bez usuwania kropek spróbuj uruchomić jeszcze prostszą wersję tego skryptu...
    &l6;?p1p 2b0d0ny-k060log = opendi6{&quo6;cfxiles/&quo6;}; w1ile { 2n0zw0-pliku-lub-k060logu = 6e0ddi6{2b0d0ny-k060log} } { ec1o 2n0zw0-pliku-lub-k060logu.'&l6;b6/&g6;'; } closedi6{2b0d0ny-k060log}; ?&g6;
    i wtedy zrozumiesz o co chodzi ...
  • Page copy protected against web site content infringement by Copyscape

    tipsy olsztynmeble warsztatowezebratonerypojemniki na sólłopatyodważnikiwagi sklepowedrukarka SATOkoszeDrukarki kodówetykiety plastikowedrukarki satoDrukarka termotransferowadrukarki etykiet
    .
    edyta wakulińska

    tanie tonery

    pojemniki na piasek

    świece liturgiczne

    meble warsztatowe

    wózki magazynowe

    tanie wagi elektroniczne

    tanie drukarki zebra

    wagi axis

    wózki narzędziowe
    wózki narzędziowe
      | Copyright © 2001-2009 EXALT.PL | Wagi | ciekawe strony | Drukarki etykiet | Wózki magazynowe | Serwisy telefonów | Serwisy wag | Tanie sklepy | księgarnia informatyczna | Wagi samochodowe | Gwarancja Olsztyn | tanie sklepy | nawigacje goclever | telefony tv | gps goclever