|
dodaj tą stronę do ulubionych
użytkownicy online 29, liczba odwiedzin: 1185423
| |||||||||
![]() | |||||||||
|
. |
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
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...
Zastosowanie funkcji glob w przykładach
&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: 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...
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 ...
|
. | ||||||
| | 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 | |||||||||