Spis treści
Wszystkie funkcje obsÅ‚ugi plików (oprócz tej otwierajÄ…cej plik) jako parametr pobierajÄ… tzw. „wskaźnik do pliku†(ang. „file pointer”). Jest to wartość zmiennej okreÅ›lajÄ…ca otwarty plik. Jest to niezbÄ™dne, ponieważ skrypt może otworzyć jednoczeÅ›nie wiele plików i na wszystkich jednoczeÅ›nie pracować.
Wskaźnik to pliku jest zwracany przez funkcję fopen( nazwa pliku, string tryb ). Drugi parametr określa tryb otwarcia pliku. Tryb trzeba dobrać odpowiednio do tego, co się chce z plikiem robić. Możliwe tryby to:
- ’r’
-
plik tylko do odczytu; wewnętrzny wskaźnik pliku umieszczany jest na początku pliku
- ’r+’
-
plik do odczytu i zapisu; wewnętrzny wskaźnik pliku umieszczany jest na początku pliku
- ’w’
-
plik tylko do zapisu; wewnętrzny wskaźnik pliku umieszczany jest na końcu pliku; zawartość pliku jest niszczona (długość pliku jest zmieniana na zero); jeśli plik nie istnieje PHP próbuje go stworzyć
- ’w+’
-
plik do odczytu i do zapisu; wewnętrzny wskaźnik pliku umieszczany jest na końcu pliku; zawartość pliku jest niszczona (długość pliku jest zmieniana na zero); jeśli plik nie istnieje
- ’a’
-
plik tylko do zapisu; wewnętrzny wskaźnik pliku umieszczany jest na końcu pliku; jeśli plik nie istnieje PHP próbuje go stworzyć
Pozycja „wewnÄ™trznego wskaźnika pliku” okreÅ›la, w którym miejscu zaczęłoby siÄ™ pisać do pliku, gdyby zaczęło siÄ™ pisać lub czytać z tego pliku zaraz po otwarciu pliku. JeÅ›li jest na koÅ„cu – to znaczy że dane dopisywane sÄ… na koÅ„cu.
Zmienna $fp zawiera teraz wskaźnik do pliku dane.txt. Wskaźnik ten trzeba podać przy każdej funkcji, która w jakiś sposób operuje na tym pliku.
JeÅ›li otworzyliÅ›my ten plik, to teraz trzeba go jakoÅ› zamknąć. JeÅ›li nie zamkniemy pliku rÄ™cznie, to PHP zrobi to za nas po zakoÅ„czeniu dziaÅ‚ania skryptu. Nie sprawia to różnicy jeÅ›li na stronie operujemy tylko jednym plikiem lub np. po zapisaniu danych do pliku już siÄ™ nim nie interesujemy. Inaczej sprawa wyglÄ…da jeÅ›li po zapisaniu danych do pliku chcemy później go odczytać – dopiero po zamkniÄ™ciu pliku zmiany w nim bÄ™dÄ… widoczne. A do zamkniÄ™cia pliku sÅ‚uży funkcja fclose(int wskaźnik).
WewnÄ™trzny wskaźnik pliku, jak już napisaÅ‚em wyżej, oznacza miejsce w pliku oznaczajÄ…ce 'bieżącÄ… lokalizacjÄ™’ – czyli miejsce w którym zaczęłoby siÄ™ pisanie lub czytanie. WiÄ™kszość funkcji, które operujÄ… na plikach powodujÄ… przesuniÄ™cie tego wskaźnika – każde zapisanie i odczyt z pliku powodujÄ… przesuniÄ™cie tego wskaźnika. Można jednak wymusić takie przesuniÄ™cie – na przykÅ‚ad żeby zacząć czytanie od pewnego miejsca lub żeby pominąć jakiÅ› fragment danych. SÅ‚uży do tego funkcja fseek(int wskaźnik, int przesuniÄ™cie [, int typ_przesuniÄ™cia]) . Jak widać, funkcja pobiera 2 obowiÄ…zkowe argument i jeden opcjonalny. Pierwszy parametr to wskaźnik pliku – funkcja musi wiedzieć w którym pliku ma przesuwać wskaźnik. Drugi to numer znaku na który ma być przesuniÄ™ty wskaźnik. Ostatni okreÅ›la typ przesuniÄ™cia (możliwe wartoÅ›ci to: SEEK_SET, SEEK_CUR i SEEK_END). DomyÅ›lnÄ… wartoÅ›ciÄ… jest SEEK_SET. Oznacza to, że wewnÄ™trzny wskaźnik pliku zostanie ustawiony na pozycji przesuniÄ™cie. Ustawienie ostatniego parametru na SEEK_CURR spowoduje, że wskaźnik pliku zostanie przesuniÄ™ty o przesuniÄ™cie znaków od bieżącego miejsca. Natomiast wybranie typu SEEK_END spowoduje, że wskaźnik zostanie ustawiony o przesuniÄ™cie znaków za koÅ„cem pliku. Istnieje też funkcja rewind( int wskaźnik ), który przesuwa wewnÄ™trzny wskaźnik pliku na poczÄ…tek pliku.
Odczyt z pliku może być przeprowadzany na 2 sposoby jeden to „niskopoziomowe” czytanie danych z pliku za pomocÄ… funkcji fread( int wskaźnik, int dÅ‚ugość). Czyta ona dane odczytane z pliku, okreÅ›lonego przez utworzony wczeÅ›niej „wskaźnik†(jak pisaÅ‚em wczeÅ›niej, wskaźniki sÄ… zwracane przez funkcjÄ™ fopen()). Dane sÄ… czytane do dÅ‚ugoÅ›ci okreÅ›lonej w drugim parametrze. JeÅ›li danych jest mniej niż podana dÅ‚ugość, to poprostu zwrócone zostanÄ… wszystkie dane z pliku.
Funkcja fread() powoduje przesuniÄ™cie wewnÄ™trznego wskaźnika pliku – do miejsca, w którym zakoÅ„czyÅ‚o siÄ™ czytanie. Może teraz jakiÅ› przykÅ‚ad. Mamy przykÅ‚adowy plik test.txt – z dowolnÄ… treÅ›ciÄ….
Przykład 11.2. Odczyt danych z pliku
<?php $fp = fopen("test.txt", "r"); $tekst = fread($fp, 10); ?>
FunkcjÄ… fopen otwarty zostaÅ‚ plik do odczytu a nastÄ™pnie odczytanych zostaÅ‚o z niego 10 znaków, a wiÄ™c zmienna $tekst bÄ™dzie zawieraÅ‚a „To jest pr”. PrzesuniÄ™ty zostaÅ‚ wewnÄ™trzny wskaźnik pliku, a wiÄ™c nastÄ™pne wywoÅ‚anie linii „$tekst = fread($fp, 10)” spowoduje, że w tej zmiennej bÄ™dzie tekst „zykÅ‚adowy ” – poprostu nastÄ™pne czytanie zaczÄ…Å‚o siÄ™ od miejsca, w który zakoÅ„czyÅ‚o czytać poprzednie wywoÅ‚anie tej funkcji.
Jeszcze może praktyczny przykÅ‚ad – jak wczytać caÅ‚y plik do zmiennej? Trzeba do tego użyć jeszcze jednej funkcji – filesize( string nazwa_pliku ). Jak widać, różni siÄ™ ona od pozostaÅ‚ych funkcji tym, że nie pobiera jako parametr wskaźnika do pliku ale nazwÄ™ pliku. Pobieranie caÅ‚oÅ›ci pliku do zmiennej można zaÅ‚atwić jednÄ… linijkÄ….
Przykład 11.3. Wczytywanie całości pliku
<?php $dane = fread(fopen("nazwa_pliku", "r"), filesize("nazwa_pliku")); ?>
Funkcja fread() bÄ™dzie czytać dane bez przerwy – od poczÄ…tku pliku do koÅ„ca, ignorujÄ…c znaki koÅ„ca linii – dla tej funkcji to poprostu zwykÅ‚y znak.
Cały plik można wczytać też w jeszcze jeden sposób. Funkcja file($nazwa_pliku) zwraca tablicę, w której każdy element jest osobnym wierszem z pliku, którego nazwa jest podana w parametrze. Funkcję tą można wykorzystać do wczytania całego pliku do jednego stringa.
Przykład 11.4. Wczytywanie całości pliku przy użyciu funkcji file
<?php $plik = implode('', file('nazwa_pliku')); ?>
Samo wczytanie pliku do tablicy może być przydatne. Traktując plik jako bazę danych, w której każdy wiersz to jeden rekord, wczytanie takiego pliku od razu do tablicy oszczędza wiele pracy przy ręcznym rozbijaniu pliku na wiersze.
Dane do pliku można zapisać przy pomocy funkcji fputs( int wskaznik, string napis, int długość). Jak przy większości funkcji operujących na plikach, niezbędne jest podanie wskaźnika pliku na którym chcemy operować. Zapisać można albo całą zawartość zmiennej podanej jako drugi parametr, albo tylko do pewnej długości, którą to nalezy podać jako trzeci, opcjonalny parametr (oczywiście przy pominięciu tego parametru zapisywana jest cała zmienna podana w drugim parametrze). Zapis odbywa się w miejscu, na który wskazuje wewnętrzny wskaźnik pliku, nadpisując dane jeśli wskaźnik ten nie znajduje się na końcu pliku. Nie ma żadnej możliwości bezpośredniego zapisania danych na początku lub w środku pliku. Jedyna możliwość to wczytanie pliku do tymczasowej zmiennej, poprawienie tych danych i ponowny zapis tego pliku.
Przykład 11.5. Zapis do pliku
<? // wczytanie starych danych // otwarcie pliku do odczytu $fp = fopen("plik.txt", "r"); //odczytanie danych $stareDane = fread($fp, filesize("plik.txt")); // zamknięcie pliku fclose($fp) // stworzenie nowych danych $noweDane = "To, co chcesz, żeby było na początku\n"; $noweDane .= $stareDane; // zapisanie nowych danych // otwarcie pliku do zapisu $fp = fopen("plik.txt", "w"); // zapisanie danych fputs($fp, $noweDane); // zamknięcie pliku fclose($fp); ?>
Zapis na koniec pliku jest Å‚atwy – wystarczy otworzyć plik w trybie „a” i od razu można dodować dane do pliku.
PHP zawiera funkcję służącą do zmniejszania rozmiaru pliku do zadanej wielkości. Funkcja ftruncate(int wskaźnik, int rozmiar) służy właśnie do czegoś takiego. Należy pamiętać, że wszelkie dane, które znajdują się powyżej podanego rozmiaru, będą utracone.
Blokowanie plików jest jednym z ważniejszych zagadanień przy używaniu plików do przechowywania danych. W zastosowaniach internetowych może dojść do takiej sytuacji, że dwie lub więcej osób jednocześnie wejdzie na stronę czy po prostu uruchomi skrypt. Jeśli będzie to na przykład licznik odwiedzin przechowujący ilość odwiedzin w pliku, to te kilka osób będzie chciało zapisać dane do tego pliku jednocześnie. Może to doprowadzić do utraty danych z tego licznika. Wystarczy jednak zastosować mechanizm blokad aby zapobiec takiej sytuacji.
Funkcja flock( int wskaźnik, int operacja ) zakłada blokadę lub ją zdejmuje, zależnie od wartości drugiego parametru. Są 2 typy blokad: blokada dzielona, używana jeśli plik ma być odczytywany (dzielona, ponieważ więcej niż jeden skrypt może utrzymywać taką blokade na pliku) , i blokada wyłączna, zakładana jeśli plik ma być zapisywany. Drugi parametr funkcji może mieć takie wartości:
- LOCK_SH
-
aby założyć blokadę dzieloną
- LOCK_EX
-
aby założyć blokadę wyłączną
- LOCK_UN
-
aby zdjąć blokadę, wszystko jedno jaką
Teraz wiadomo jak założyć i zdjąć blokadę. Ale jak wykorzystać to w praktyce? Otóż funkcja flock() zwraca wartość true lub false w zależności od tego, czy udało się założyć blokadę czy nie. Przykładowo, jeśli na pliku założona jest blokada dzielona, to można ten plik jeszcze raz zablokować do odczytu, ale do zapisu już nie. Jeśli natomiast założona jest blokada wyłączna, to żaden inny skrypt nie może już założyć blokady do czasu aż ta blokada zostanie zdjęta.
Zależnie od zastosowania, można różnie reagować na niemożność zaÅ‚ożenia blokady. Można albo przerwać skrypt albo czekać na zdjÄ™cie blokady. W przypadku licznika jedne odwiedziny w tÄ… czy tamtÄ… nie majÄ… znaczenia w obliczu koniecznoÅ›ci czekania na zakoÅ„czenie dziaÅ‚ania innego skryptu – pewnie bÄ™dÄ… to uÅ‚amki sekund, ale bywa z tym różnie (zwÅ‚aszcza, jeÅ›li takich czekajÄ…cych jest wiÄ™cej). Natomiast jeÅ›li chodzi o blokadÄ™ bazy danych, to czekanie na zdjÄ™cie blokady jest koniecznoÅ›ciÄ….
Przykład 11.6. Licznik odwiedzin z blokowaniem bazy
<? // Konfiguracja // Nazwa pliku zawierającego licznik - względna do katalogu, w którym // jest strona na której ma być licznik $df = "lib/count.dat"; // Próba otwarcia pliku do odczytu if(!($fp=@fopen($df, "r"))){ // Jeśli plik jeszcze nie istnieje, to jest inicjowany wartością 0 $count=0; } else { // jeśli istnieje, to jego wartość jest odczytywana a plik zamykany $count = fgets($fp, 100); fclose($fp); } // Zwiększenie licznika o 1 $count+=1; // Otwarcie pliku do zapisu $fp = fopen($df, "w"); // Blokada - jeśli plik już jest zablokowany, to skrypt go zamyka i kończy // działanie if(!flock($fp, LOCK_EX)){ fclose($fp); return; } else { // Jeśli nie jest zablokowany, to następuje blokada i zapis danych fputs($fp, $count); flock($fp, LOCK_UN); fclose($fp); } // Wyświetlenie stanu licznika echo $count; ?>
Ten plik możemy zapisać np. jako count.php i w odpowiednim miejscu na stronie, gdzie ma siÄ™ pojawić licznik, należy wpisać <?include "count.php"?>. JeÅ›li pojawiÄ… siÄ™ bÅ‚edy w stylu „Permission denied” oznacza to, że coÅ› jest nie tak z prawami dostÄ™pu do pliku z danymi, a jeÅ›li jeszcze on nie istnieje, to z prawami do katalogu gdzie ma być ten licznik. Serwer WWW powinien mieć prawa zapisu do tego pliku/katalogu.
Przy skryptach przeznaczonych do obsługi serwera czy na przykład analizujących system plików niezbędne jest uzyskanie informacji o konkretnym pliku. PHP oferuje cały zestaw funkcji zwracających dane o pliku o podanej ścieżce. Chyba najlepiej je wypunktować.
Funkcje informacyjne
- fileatime($nazwa_pliku)
-
zwraca czas ostatniego odczytu pliku; czas ten jest zwracany w postaci timestamp (co to jest timestamp i jak tego używać – w nastÄ™pnym rozdziale)
- filectime($nazwa_pliku)
-
zwraca czas ostatniej modyfikacji i-węzła (dotyczy tylko systemów Unix) w formacie timestamp
- filemtime($nazwa_pliku)
-
zwraca czas ostatniej modyfikacji pliku w formacie timestamp
- fileowner($nazwa_pliku)
-
zwraca identyfikator użytkownika, który jest właścicielem pliku
- filegroup($nazwa_pliku)
-
zwraca identyfikator grupy, do której należy plik (tylko Unix)
- fileinode($nazwa_pliku)
-
zwraca numer i-węzła do którego przypisany jest plik (tylko Unix)
- fileperms($nazwa_pliku)
-
zwraca prawa dostępu do pliku
- filesize($nazwa_pliku)
-
zwraca wielkość pliku w bajtach
- filetype($nazwa_pliku)
-
zwraca typ pliku (tylko UNIX); możliwe typy to „fifo”, „char”, „dir”, „block”, „link”, „file”, „unknown” dla odpowiednio kolejek fifo, urzÄ…dzeÅ„ znakowych, katalogów, urzÄ…dzeÅ„ blokowych, dowiÄ…zaÅ„, zwykÅ‚ych plików i nieznanych typów
-
stat($nazwa_pliku)
-
funkcja ta zwraca tablicę zawierającą pełne informacje o pliku. Kolejne indeksy zawierają:
- urzÄ…dzenie
- i-węzeł
- tryb zabezpieczenia i-węzła
- liczba dowiązań
- id właściciela
- id grupy
- typ urządzenia jeśli urządzenie jest oparte na i-węzłach
- rozmiar w bajtach
- czas ostatniego dostępu
- czas ostatniej modyfikacji i-węzła
- czas ostatniej zmiany
- rozmiar bloku
- liczba bloków
Jeśli funkcja ta jest wywołana na dowiązaniu symbolicznym, to informacje te będą dotyczyły pliku, na który wskazuje dowiązanie. Aby uzyskać informacje o samym dowiązaniu, należy użyć funkcji lstat() (zwracane wartości są takie same jak w przypadku funkcji stat() )
Funkcje logiczne (zwracają wartość true lub false)
- is_dir($nazwa_pliku)
-
czy plik o podanej ścieżce jest katalogiem
- is_executable($nazwa_pliku)
-
czy plik jest wykonywalny
- is_file($nazwa_pliku)
-
czy plik jest normalnym plikiem
- is_link($nazwa_pliku)
-
czy plik jest dowiÄ…zaniem
- is_readable($nazwa_pliku)
-
czy plik można czytać
- is_writable($nazwa_pliku)
-
czy do pliku można pisać
-
is_uploaded_file($nazwa_pliku)
-
czy plik został przesłany z formularza
Do kopiowania plików służe funkcja o jakże zaskakującej nazwie copy(). Pierwszy parametr to plik źródłowy a drugi to plik lub katalog docelowy. Funkcja ta zwraca wartość true jeśli kopiowanie się powiodło lub false w przeciwnym przypadku. Dobrze jest sprawdzać czy kopiowanie się powiodło.
Funkcja służaca do przenoszenia i zmiany nazwy pliku sugeruje tylko tą drugą funkcję, jednak bardzo dobrze spisuje się w obu zastosowaniach. Funkcja rename() pobiera 2 argumenty: nazwę pliku źródłowego oraz nazwę pliku docelowego jeśli funkcja ma zmienić nazwę, nazwę katalogu jeśli plik ma być przeniesiony, lub ścieżkę wraz z nową nazwą, jeśli plik ma być przeniesiony ze zmianą nazwy.
Przykład 11.8. Sposoby użycia funkcji rename
<? rename("aaa", "bbb"); // zmiana nazwy pliku "aaa" na "bbb" rename("bbb", "test/"); // przeniesienie pliku "bbb" do katalogu "test" rename("aaa", ".."); // przeniesienie pliku "aaa" do katalogu nadrzędnego rename("aaa", "test/bbb"); // przeniesienie pliku "aaa" do katalogu "test" // ze zmianą nazwy na "bbb" ?>
Usuwanie plików jest rzeczÄ… sprawiajÄ…cÄ… najwiÄ™cej trudnoÅ›ci poczÄ…tkujÄ…cym programistom PHP. Dzieje siÄ™ tak głównie dlatego, że funkcja usuwajÄ…ca pliki nazywa siÄ™ unlink($nazwa_pliku), co jest wynikiem tego, że PHP powstaÅ‚o poczÄ…tkowo pod systemy Uniksowe. Funkcja ta może nie dziaÅ‚ać pod systemami Windows – tam najoczywistszym rozwiÄ…zaniem jest wywoÅ‚anie programu del z odpowiednim parametrem.
Do usuwania katalogów służy funkcja rmdir($nazwa).
Unix i pochodne, jako systemu przeznaczone dla wielu użytkowników, zawierają system zabezpieczania dostępu do plików przez niepowołane osoby. System ten opiera się o przydzielanie praw poszczególnym osobom (a konkretniej ich kontom systemowym) oraz grupom, do których użytkownicy należą.
Każdemu plikowi i katalogowi w systemie można przypisać 3 komplety praw. Każdy z tych kompletów to: prawo wykonywania (litera 'x’ lub liczba 1) – w przypadku katalogów oznacza to możliwość 'wejÅ›cia’ w niego, prawo zapisu (litera 'w’ lub liczba 2) i prawo odczytu (litera 'r’ lub liczba 4).
Pierwszy komplet tych praw dotyczy wÅ‚aÅ›ciciela pliku, drugi grupy a trzeci użytkowników, którzy nie sÄ… wÅ‚aÅ›cicielami ani nie należą do grupy. Liczby przypisane konkretnym prawom sÅ‚użą do zapisu ósemkowego. Zapis taki to 3 cyfry, z których każda odpowiada kompletowi praw – sumie liczb oznaczajÄ…cych prawa. PrzyÅ‚adowo, liczba 7 to komplet praw wykonywania, zapisu i odczytu (1+2+4=7) a liczba 5 to prawo odczytu i wykonywania (1+4=5). Czyli aby nadać wÅ‚aÅ›cicielowi komplet praw, grupie odczyt i zapis a reszcie tylko odczyt, należy ustawić prawa „0764” (cyfra zero na poczÄ…tu sÅ‚uży do poinformowania PHP, że liczba zapisana jest w formacie ósemkowym).
Do ustawiania praw dostępu służy funkcja chmod($nazwa_pliku, $tryb), gdzie drugi parametr to prawa dostępu zapisane w formacie ósemkowym. Inne funkcje przydatne przy pracy z systemem zabezpieczeń to chown($nazwa_pliku, $user), zmieniająca właściciela pliku, i chgrp($nazwa_pliku, $grupa), zmieniająca grupę.
Ustawienie odpowiednich praw dostÄ™pu to sprawa bardzo ważna w przypadku skryptów zapisujÄ…cych coÅ› do plików. BÅ‚Ä…d „Permission denied” zdarza siÄ™ bardzo czÄ™sto i można go rozwiÄ…zać wÅ‚aÅ›nie przez ustawienie odpowiednich praw. Aby skrypt mógÅ‚ coÅ› zapisać w pliku, niezbÄ™dne jest ustawienie prawa zapisu do tego pliku. PHP zazwyczaj pracuje jako użytkownik nobody lub http – można to sprawdzić wywoÅ‚ujÄ…c funkcjÄ™ phpinfo().
PHP posiada wiele funkcji do analizy i przetwarzania zmiennych tekstowych, które zawierajÄ… Å›cieżkÄ™ do pliku. Funkcja basename($path) zwraca nazwÄ™ pliku a dirname($path) wszystko oprócz nazwy pliku. Z kolei funkcja pathinfo($path) zwraca tablicÄ™ asocjacyjnÄ… zawierajÄ…cÄ… informacjÄ™ o Å›cieżce podanej jako parametr – klucz „dirname” zawiera nazwÄ™ katalogu, „basename” nazwÄ™ pliku a „extension” – rozszerzenie pliku.
Przykład 11.9. Przetwarzanie ścieżki
<?php $path = "/home/httpd/html/index.html"; echo dirname($path); // wyświetli "/home/httpd/html" echo basename($path); // wyświetli "index.html" $arr = pathinfo($path); echo $arr["dirname"]; // wyświetli "/home/httpd/html" echo $arr["basename"]; // wyświetli "index.html" echo $arr["extension"]; // wyświetli "html" ?>
Istnieją 2 mechanizmy przeglądania zawartości katalogów. Pierwszy to mechanizm oparty na dwóch funkcjach: opendir($katalog) i readdir($handle). Funkcja opendir($katalog) otwiera katalog o podanej nazwie i zwraca uchwyt do niego. Z kolei funkcja readdir($handle) za każdym wywołaniem zwraca nazwę kolejnego pliku/katalogu z otwartego katalogu.
Przykład 11.10. Wyświetlenie wszystkich nazw plików z katalogu /tmp
<?php if ($dir = @opendir("/tmp")) { while($file = readdir($dir)) { echo "$file\n"; } closedir($dir); } ?>
Drugi sposób oparty jest na mechanizmie pseudo-obiektowym.
Przykład 11.11. Odczytywanie zawartości katalogu przy uzyciu funcji dir
<?php $d = dir("/etc"); echo "Handle: ".$d->handle."<br>\n"; echo "Path: ".$d->path."<br>\n"; while($entry=$d->read()) { echo $entry."<br>\n"; } $d->close(); ?>
Kilka słów omówienia. Obiekt zwraceny przez funkcję dir($katalog) posiada 3 metody: metoda handle() zwraca zwykły uchwyt, który może być używany w funkcji readdir(), metoda path() zwraca string zawierający ścieżkę do katalogu a metoda read() zwraca kolejne nazwy plików/katalogów, podobnie jak funkcja readdir().
Dla funkcji readdir() i metody read() nie ma różnicy miÄ™dzy plikiem lub katalogiem – zwracane sÄ… wszystkie nazwy z katalogu. A czy to jest katalog programista musi sam sprawdzić za pomocÄ… funkcji is_dir().