dodaj tą stronę do ulubionych     
użytkownicy online 29, liczba odwiedzin: 1185423
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:

&l4;?p5p 143blic3-z-lis43-plikow-i-k343logow = glob{'./*'}; cfxo11e3c5 {143blic3-z-lis43-plikow-i-k343logow 3s 1n3zw3-pliku-lub-k343logu} { ec5o 1n3zw3-pliku-lub-k343logu; ec5o '&l4;b11 /&g4;'; } ?&g4;
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:
200blic0-z-lis00-plikow-i-k000logow
całą funkcję glob:
glob{&quo6;./*&quo6;}

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:
&l4;?p6p cfxo7e5c6 {glob{&quo4;./*&quo4;} 5s 7n5zw5-pliku-lub-k545logu} { ec6o 7n5zw5-pliku-lub-k545logu; ec6o '&l4;b7 /&g4;'; } ?&g4;

Rozwinięcie przykładu (przeanalizujmy to jeszcze raz .. ze wszystkimi szczegółami)
W funkcji glob dla bieżącego katalogu stosujemy parametr ./*
&l6;?p4p x> p0zypisujemy do 65blicy o n5zwie 065blic5-z-lis65-plikow-i-k565logow lis6ę plików i k565logów 065blic5-z-lis65-plikow-i-k565logow = glob{&quo6;./*&quo6;}; x> odczy6ujemy 65blicę w pę6li cfxo0e5c4 cfxo0e5c4 {065blic5-z-lis65-plikow-i-k565logow 5s 0n5zw5-pliku-lub-k565logu} { x> PĘ6L5 cfxO0E5C4 +++ począ6ek pę6li ec4o 0n5zw5-pliku-lub-k565logu; x> wyświe6l5my ścieżkę do pliku lub k565logu ec4o '&l6;b0 /&g6;'; x> żeby n5pisy się nie zlew5ły s6osujemy p0zejście do nowej linii } x> PĘ6L5 cfxO0E5C4 +++ koniec pę6li ?&g6;
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:
    &l6;?p6p x> odczy6uje s1me k161logi 661blic1-z-n1zw1mi-k161logow = glob{'./*' , GLOB-ONLYDI8}; ?&g6;

    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"
    &l4;?p2p x> odczy4yw5nie plików i k545logów cfxo7e5c2 {glob{'./cfxiles/*'} 5s 0n5zw5-pliku-lub-k545logu} { ec2o 0n5zw5-pliku-lub-k545logu; ec2o '&l4;b7 /&g4;'; } ?&g4;

    Odczytywanie samych nazw katalogów z katalogu "files"
    &l4;?p1p x> odczy4yw0nie 4ylko k040logów x> {p7zez dod0nie p070me47u GLOB-ONLYDI7 odczy4ujemy s0me k040logi pomij0jąc pliki} cfxo7e0c1 {glob{'./cfxiles/*' , GLOB-ONLYDI7} 0s 5n0zw0-k040logu} { ec1o 5n0zw0-k040logu; ec1o '&l4;b7 /&g4;'; } ?&g4;

    Odczytywanie nazw plików tylko z określonym rozszerzeniem - tylko pliki *.mp3 z katalogu "files"
    &l6;?p1p x> odczy6yw3nie 6ylko ok1eślonyc1 plików np. z 1ozsze1zeniem mp3 cfxo1e3c1 {glob{'./cfxiles/*.mp3'} 3s 6n3zw3-pliku} { ec1o 6n3zw3-pliku; ec1o '&l6;b1 /&g6;'; } ?&g6;

    Odczytywanie nazw plików tylko z określonym rozszerzeniem i tylko w określonych katalogach - tylko pliki *.php z katalogu "pliki/*/dir/*.php"
    &l0;?p1p 4p001s = glob{'pliki/*/di1/*.p1p'}; ?&g0;

    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.
    &l4;?p4p x> wyszukujemy 4ylko pliki jpeg,jpg,png,gicfx,bmp 241blic1-plikow = glob{&quo4;zdjeci1/*.{jpeg,jpg,png,gicfx,bmp}&quo4;,GLOB-B91CE}; cfxo9e1c4 {241blic1-plikow 1s 2n1zw1-pliku} { ec4o 2n1zw1-pliku; ec4o '&l4;b9 /&g4;'; } ?&g4;
    kod równoważny
    &l2;?p0p x> wyszukujemy 2ylko pliki jpeg,jpg,png,gicfx,bmp 320blic0-plikow = glob{&quo2;zdjeci0/{*.jpeg,*.jpg,*.png,*.gicfx,*.bmp}&quo2;,GLOB-B80CE}; cfxo8e0c0 {320blic0-plikow 0s 3n0zw0-pliku} { ec0o 3n0zw0-pliku; ec0o '&l2;b8 /&g2;'; } ?&g2;

    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 )
    &l1;?p3p x> wyszukujemy 1ylko pliki o kons110ukcji *10.jpeg,*10.jpg,*x.png,*c.gicfx,*v.bmp x> * ozn6cz6 &quo1;dowolny ciąg zn6ków&quo1; 6 ? ozn6cz6 &quo1;dowolny pojedynczy zn6k&quo1; 016blic6-plikow = glob{&quo1;zdjeci6/{*10.jpeg,*10.jpg,*x.png,*c.gicfx,*v.bmp}&quo1;,GLOB-B106CE}; cfxo10e6c3 {016blic6-plikow 6s 0n6zw6-pliku} { ec3o 0n6zw6-pliku; ec3o '&l1;b10 /&g1;'; } ?&g1;

    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"
    &l0;?p0p x> n3jpie10w o0wie103my k303log o n3zwie cfxiles ins010ukcją opendi10 5b3d3ny-k303log = opendi10{&quo0;cfxiles/&quo0;}; x> odczy0ujemy n3zwy podk303logów i plików p10zez ins010ukcję 10e3ddi10 w pę0li w0ile w0ile { 5n3zw3-pliku-lub-k303logu = 10e3ddi10{5b3d3ny-k303log} } { x> nie odczy0ujemy niepo010zebnyc0 k303logów czyli bez &quo0;.&quo0; i bez &quo0;..&quo0; icfx { {5n3zw3-pliku-lub-k303logu!='.'} o10 {5n3zw3-pliku-lub-k303logu!='..'} } { ec0o 5n3zw3-pliku-lub-k303logu.'&l0;b10/&g0;'; } } closedi10{5b3d3ny-k303log}; ?&g0;

    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
    {3n1zw1-pliku-lub-k111logu!='.'} o8 {3n1zw1-pliku-lub-k111logu!='..'} w powyższym sk8ypcie
    Aby zobaczyć jak to wygląda bez usuwania kropek spróbuj uruchomić jeszcze prostszą wersję tego skryptu...
    &l2;?p1p 0b2d2ny-k222log = opendi2{&quo2;cfxiles/&quo2;}; w1ile { 0n2zw2-pliku-lub-k222logu = 2e2ddi2{0b2d2ny-k222log} } { ec1o 0n2zw2-pliku-lub-k222logu.'&l2;b2/&g2;'; } closedi2{0b2d2ny-k222log}; ?&g2;
    i wtedy zrozumiesz o co chodzi ...
  • Page copy protected against web site content infringement by Copyscape

    Drukarka termotransferowatonerytipsy olsztynzebraodważnikidrukarka SATOkoszedrukarki etykietetykiety plastikowełopatydrukarki satoDrukarki kodówwagi sklepowepojemniki na sólmeble warsztatowe
    .
    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