|
dodaj tą stronę do ulubionych
użytkownicy online 14, liczba odwiedzin: 1168732
| |||||||||
![]() | |||||||||
|
. |
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
&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: 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...
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 ...
|
. | ||||||
| | 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 | |||||||||