skanuj0140 (14)

skanuj0140 (14)



Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 151

Katalog jest otwierany za pomocą funkcji opendi r, a deskryptor tego katalogu jest przypisywany zmiennej fd. Nazwy znajdujących się w tym katalogu plików są odczytywane w pętli whlle za pomocą funkcji readdir. Każde wywołanie readdir zwraca nazwę / jednego pliku, która to nazwa jest przypisywana zmiennej fi 1 e. W przypadku gdy zostaną odczytane nazwy wszystkich plików, wywołanie readdir zwróci wartość false i pętla whi 1 e zakończy działanie. W pętli whi 1 e znajduje się instrukcja warunkowa i f, która pozwala na pominięcie nazw wszelkich podkatalogów. Za sprawdzenie, czy odczytana nazwa jest nazwą katalogu, odpowiada funkcja i s_dir. W ten sposób skrypt PHP wygeneruje automatycznie kod HTML zawierający listę odnośników, który w poprzednim przykładzie był tworzony ręcznie (listing 5.10). Tym samym zmiana zawartości katalogu z plikami do pobrania nie będzie wymagała żadnej modyfikacji kodu.

Druga część zadania to napisanie skryptu downloadphp, do którego odwołuje się każdy z odnośników. Jego realizacja będzie oczywiście bardzo podobna do poprzedniego przykładu. W rzeczywistości należy jedynie wymienić funkcję checkFileName — pozostałe elementy możemy pozostawić praktycznie bez zmian. Funkcja checkFileName będzie tym razem przyjmowała dwa parametry, którymi są: nazwa pliku (fi 1 e) oraz nazwa katalogu (path). Kod funkcji będzie podobny do kodu funkcji printList z listingu 5.12. Katalog wskazany argumentem path zostanie otworzony za pomocą funkcji opendir, a następnie w pętli while będzie odczytywana jego zawartość. Każda odczytana nazwa zostanie zapisana w zmiennej file i, o ile nie jest katalogiem, porównywana z argumentem name. W ten sposób sprawdzimy, czy nazwa przekazana do skryptu w postaci parametru faktycznie odpowiada nazwie jednego z plików znajdujących się w katalogu wskazywanym przez filesPath. Jeżeli plik uda się odnaleźć, funkcja checkFileName zwróci wartość true, a w przeciwnym przypadku — wartość false. Pełny kod skryptu został zaprezentowany na listingu 5.13.

Listing 5.13. Kod skryptu wysyłającego plik do użytkownika_

<?php

IfilesPath = "./downloads/":

function checkFileName($name. $path)

{

$fd = opendir($path): if(!$fd) return false: while ((Sfile - readdir(Ifd)) !== false){ if(is_dir<Ipath.$fi 1e)) continue: if($file == Sname) return true:

}

c1osedir<$fd): return false:

}

function send($fileName. SfilePath)

{

i f(!file_exi sts($fi1ePath.$fi 1 eName)){ echoCNie ma takiego pliku na serwerze!'): return:

}

$fd = fopen($filePath.$fileName.''r”):

Ssize - filesize($filePath.$fileName):

Scontents = fread($fd. filesize($filePath.$fileName)):


Wyszukiwarka

Podobne podstrony:
skanuj0130 (14) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 141 skrypt, odczytujący wartos ć p
20417 skanuj0132 (14) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 143 Plik wysiany do serwera
50756 skanuj0134 (14) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 145 Klauzula default instruk
skanuj0138 (15) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 149 fclose(Sfd): header("Cont
skanuj0144 (13) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 155 header("Content-Type:
10110 skanuj0136 (15) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 147Wysyłanie pliku wybierane
10466 skanuj0142 (12) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 153 Warto zauważyć, że przy
82595 skanuj0128 (17) Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 139 Rysunek 5.3. Formularz

więcej podobnych podstron