Rozdział 7. ♦ System plików 193
Konstrukcję bardzo podobną do użytej w skrypcie z listingu 7.5 można zastosować do usuwania zawartości całego katalogu wraz z podkatalogami. Kod realizujący takie zadanie został zaprezentowany na listingu 7.6. Przykładowe wywołanie zaprezentowanej funkcji delDi r może mieć postać:
delD1r('/usr/tmp'):
Listing 7.6. Funkcja usuwająca zawartość katalogu function delDir(Jdir)
{
if(!$fd - opendirC$dir)) return false:
while ((Jfile - readdir(Jfd)) !-- false){
1f($file = || Jfile = continue:
if(is dir($dir."/$file")){ delDir(Jdir."/Jfile"): rmdir(Jdir."/Jfile"):
else if(is_file(Jdir."/Jfile")){ unlinkddir."/Jfile"):
closedir(Jfd);
Sposób otwarcia katalogu oraz odczytywania jego kolejnych elementów jest analogiczny do przedstawionego w poprzednim przykładzie. W identyczny sposób stosowane są także wywołania rekurencyjne. Jeśli zostanie stwierdzone, że odczytanym elementem katalogu jest kolejny katalog, następuje ponowne wywołanie funkcji del Di r, której w postaci argumentu jest przekazywana jego nazwa, połączona z nazwą wskazywaną przez argument dir. Po jej wykonaniu katalog jest usuwany za pomocą funkcji rmdir. Jeśli jednak odczytanym elementem katalogu jest plik, jest on usuwany za pomocą funkcji unlink. Należy pamiętać, że czynność usuwania plików i katalogów zakończy się sukcesem jedynie wtedy, gdy będą one miały odpowiednio ustawione prawa dostępu.
Wykorzystując wiadomości przedstawione do tej pory, możemy w ramach treningu napisać ciekawy skrypt, który będzie pozwalał na przeglądanie w przeglądarce zawartości dysku serwera. Na stronie wyświetlane będą nazwy plików i katalogów. Katalogi będą miały postać odnośników (rysunek 7.3). Kliknięcie takiego katalogu-odnośnika spowoduje wyświetlenie jego zwartości. Skrypt realizujący przedstawione zadanie został zaprezentowany na listingu 7.7.
Nazwa katalogu, którego zawartość ma być zaprezentowana, jest przekazywana do skryptu metodą GET w postaci parametru o nazwie dir. Jeżeli parametr nie zostanie przekazany, przyjmujemy, że ma zostać wyświetlona zawartość katalogu głównego /. Pobraniem i wysłaniem danych do przeglądarki zajmuje się funkcja listDir, która otrzymuje nazwę katalogu w postaci argumentu.