28932 skanuj0180 (7)

28932 skanuj0180 (7)



192 PHP i MySQL dla każdego

Jeżeli interesuje nas nie tyle wolna, ile całkowita ilość miejsca, zamiast disk_free_space należy zastosować funkcję disk_total_space. Działa ona w sposób niemal analogiczny, z tą różnicą, że zwraca całkowitą ilość miejsca na dysku. Obie funkcje zwracają wartości typu float; przy korzystaniu z nich nie występują zatem problemy opisane przy okazji omawiania funkcji filesize.

Niestety nie ma standardowej funkcji, która pozwoliłaby stwierdzić, ile miejsca na dysku zajmuje katalog wraz z podkatalogami. Jeśli zatem potrzebujemy takiej informacji, musimy samodzielnie napisać odpowiednią procedurę. Sposób realizacji takiego zadania został zaprezentowany na listingu 7.5. Obliczeniem, ile bajtów zajmuje wybrany katalog wraz całą swoją zawartością, zajmuje się funkcja getDirSize.

Listing 7.5. Funkcja obliczająca ilość miejsca zajmowanego przez katalog

function getOirSize($dir)

{

Scount = 0;

ifOJfd = opendir($dir)) return 0;

wili 1 e ((Sfile - readdir(Sfd)) !== false){ if($file —    || $file “ continue;

if(is_dir($dir."/$file")){

Scount += getDirSize($dir.7Sfile"):

}

else if(is_file($dir."/$file''))

Scount +- filesize($dir."/$file"):

}

return Scount:

}

Funkcja działa w sposób rekurencyjny, tzn. dla każdego podkatalogu wywołuje samą siebie. Nazwa katalogu jest przekazywana w postaci argumentu dir (na jej końcu nie powinno być znaku ukośnika), katalog otwierany jest za pomocą funkcji opendir. Zawartość katalogu jest odczytywana w pętli whi 1 e za pomocą funkcji readdi r, tak jak miało to miejsce w przypadku kodu z listingów 7.1 i 7.3. Wewnątrz pętli jest najpierw sprawdzane, czy nazwa odczytanego elementu jest nazwą katalogu bieżącego lub nadrzędnego. Jeśli tak, jest wywoływana instrukcja continue powodująca przejście do kolejnej iteracji pętli. Jeśli jednak odczytana nazwa jest różna zarówno od . jak i od.., następuje sprawdzenie, czy jest to katalog (i s_di r), czy plik (i s_fi 1 e).

W pierwszym przypadku jest ponownie wywoływana funkcja getDi rSize, obliczająca ilość miejsca zajmowanego przez podkatalog. Nazwa podkatalogu jest konstruowana przez dodanie do parametru di r nazwy zawartej w zmiennej fi le. W przypadku drugim, kiedy file wskazuje na plik, jego wielkość jest odczytywana za pomocą funkcji filesize. Sumaryczny rozmiar wszystkich plików jest zapisywany w zmiennej count i wartość tej zmiennej jest ostatecznie zwracana jako wynik działania getDi rSize.


Wyszukiwarka

Podobne podstrony:
50065 skanuj0427 (2) 444 PHP i MySQL dla każdego Jeżeli wartością parametru acti on był ciąg modyfi
37913 skanuj0276 (3) 290 PHP i MySQL dla każdeg: Jeżeli chcemy ograniczyć liczbę wyświetlanych kolum
54459 skanuj0317 (2) 332 PHP i MySQL dla każdego Efektem działania podzapytania nie musi być pojedyn
skanuj0270 (3) 284 PHP i MySQL dla każdego Przykładowo, jeżeli zostanie zastosowany typ TINYINT UNSI
skanuj0270 (3) 284 PHP i MySQL dla każdego Przykładowo, jeżeli zostanie zastosowany typ TINYINT UNSI

więcej podobnych podstron