PHP5 Praktyczny kurs


IDZ DO
IDZ DO
PRZYKŁADOWY ROZDZIAŁ
PRZYKŁADOWY ROZDZIAŁ
PHP5.
SPIS TRERCI
SPIS TRERCI
Praktyczny kurs
KATALOG KSIĄŻEK
KATALOG KSIĄŻEK
Autor: Marcin Lis
ISBN: 83-246-0307-7
KATALOG ONLINE
KATALOG ONLINE
Format: B5, stron: 432
ZAMÓW DRUKOWANY KATALOG
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
TWÓJ KOSZYK
ZnajomoSć języka PHP wykorzystywanego do tworzenia dynamicznych stron WWW
DODAJ DO KOSZYKA
DODAJ DO KOSZYKA
to dziS jedna z podstawowych umiejętnoSci wymaganych od webmastera. Era
statycznych stron tworzonych za pomocą języka HTML przeminęła już dawno,
a dynamiczne generowanie treSci stało się obecnie standardem. Język PHP i baza
CENNIK I INFORMACJE
CENNIK I INFORMACJE
danych MySQL stanowią platformę o wielkich możliwoSciach, stosowaną do tworzenia
zarówno wielkich portali i witryn e-commerce, jak i prostych stron prywatnych.
ZAMÓW INFORMACJE
ZAMÓW INFORMACJE
O NOWORCIACH Książka  PHP5. Praktyczny kurs jest wprowadzeniem w tajniki nowoczesnego
O NOWORCIACH
tworzenia stron WWW. Przedstawia proces instalacji języka PHP wraz z serwerami
WWW, podstawowe konstrukcje języka i sposoby wykorzystania ich w procesie
ZAMÓW CENNIK
ZAMÓW CENNIK
budowania witryny. Opisuje takie zagadnienia, jak współpraca z systemem plików,
obsługa sesji, możliwoSci programowania obiektowego oraz współpraca z bazami
danych. Dowiesz się z niej także, jak za pomocą PHP generować i przetwarzać
CZYTELNIA
CZYTELNIA
elementy graficzne oraz wykorzystywać protokoły sieciowe.
FRAGMENTY KSIĄŻEK ONLINE
FRAGMENTY KSIĄŻEK ONLINE
" Instalacja i konfiguracja PHP w różnych systemach operacyjnych
" Zmienne, typy danych i operatory
" Instrukcje sterujące
" Komunikacja skryptów z przeglądarką
" Obsługa plików cookie i sesji
" Operacje na plikach
" Programowanie obiektowe w PHP
" Wykorzystywanie danych zgromadzonych w bazie
Poznaj i wykorzystaj w swoich projektach możliwoSci języka PHP
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
Wstęp .............................................................................................. 7
Rozdział 1. Podstawy ......................................................................................... 9
Lekcja 1. Czym jest PHP? ................................................................................................ 9
Język skryptowy ......................................................................................................... 9
Krótka historia PHP ................................................................................................. 10
Jak to działa? ............................................................................................................ 10
Lekcja 2. Instalacja i konfiguracja narzędzi ................................................................... 12
Linux ........................................................................................................................ 12
Windows .................................................................................................................. 21
Plik konfiguracyjny PHP .......................................................................................... 25
PHP w wierszu poleceń ............................................................................................ 26
Rozdział 2. Elementy języka ............................................................................. 27
Lekcja 3. Pierwszy skrypt ............................................................................................... 27
Zaczynamy ............................................................................................................... 27
Znaczniki PHP ......................................................................................................... 30
Komentarze .............................................................................................................. 32
Wyświetlanie informacji .......................................................................................... 34
Instrukcja print ......................................................................................................... 36
Aączenie skryptów ................................................................................................... 36
Lekcja 4. Zmienne, typy danych i operatory .................................................................. 41
Czym są zmienne? ................................................................................................... 41
Rodzaje zmiennych, czyli typy danych .................................................................... 42
Zmienne w kodzie skryptu ....................................................................................... 46
Wyświetlanie wartości zmiennych ........................................................................... 48
Operacje na zmiennych ............................................................................................ 52
Operatory ................................................................................................................. 52
Zmienne globalne (superglobalne) ........................................................................... 67
Konwersje typów ..................................................................................................... 69
Ćwiczenia do samodzielnego wykonania ................................................................. 73
Lekcja 5. Instrukcje sterujące ......................................................................................... 73
Instrukcje warunkowe .............................................................................................. 73
Instrukcja wyboru .................................................................................................... 80
Operator warunkowy ................................................................................................ 82
Pętle ......................................................................................................................... 83
Składnia alternatywna .............................................................................................. 93
Ćwiczenia do samodzielnego wykonania ................................................................. 96
4 PHP5. Praktyczny kurs
Lekcja 6. Funkcje ........................................................................................................... 97
Definiowanie funkcji ................................................................................................ 97
Argumenty funkcji ................................................................................................... 98
Zwracanie wartości przez funkcje ............................................................................ 99
Zasięg zmiennych .................................................................................................. 101
Sposoby przekazywania argumentów .................................................................... 104
Domyślne argumenty funkcji ................................................................................. 106
Ćwiczenia do samodzielnego wykonania ............................................................... 107
Lekcja 7. Obsługa daty i czasu ..................................................................................... 107
Wyświetlanie daty i czasu ...................................................................................... 107
Tworzenie znacznika czasu .................................................................................... 115
Pozostałe funkcje ................................................................................................... 118
Ćwiczenia do samodzielnego wykonania ............................................................... 120
Lekcja 8. Ciągi znaków ................................................................................................ 121
Rodzaje ciągów znaków ......................................................................................... 121
Formatowanie ciągów ............................................................................................ 123
Przetwarzanie ciągów znaków ............................................................................... 128
Porównania ............................................................................................................ 131
Przeszukiwanie ...................................................................................................... 131
Ćwiczenia do samodzielnego wykonania ............................................................... 133
Lekcja 9. Tablice .......................................................................................................... 134
Proste tablice .......................................................................................................... 134
Tablice asocjacyjne ................................................................................................ 137
Operacje na tablicach ............................................................................................. 139
Ćwiczenia do samodzielnego wykonania ............................................................... 145
Rozdział 3. Współpraca z przeglądarką ............................................................ 147
Lekcja 10. Odbieranie danych z przeglądarki .............................................................. 147
Formularze HTML ................................................................................................. 147
Wysyłanie metodą GET ......................................................................................... 148
Metoda POST ......................................................................................................... 152
Wysyłanie plików do serwera ................................................................................ 154
Ćwiczenia do samodzielnego wykonania ............................................................... 158
Lekcja 11. Wysyłanie danych do przeglądarki ............................................................. 158
Sposoby wysyłania danych .................................................................................... 158
Wysyłanie zawartości plików ................................................................................. 159
Sposoby pobierania plików z serwisu .................................................................... 162
Ćwiczenia do samodzielnego wykonania ............................................................... 175
Lekcja 12. Obsługa cookies .......................................................................................... 175
Krótko o cookies .................................................................................................... 175
Obsługa cookies w PHP ......................................................................................... 176
Wykorzystanie cookies .......................................................................................... 180
Ćwiczenia do samodzielnego wykonania ............................................................... 184
Lekcja 13. Sesje ............................................................................................................ 184
Wstęp do sesji ........................................................................................................ 184
Identyfikator sesji ................................................................................................... 184
Rozpoczynanie sesji ............................................................................................... 185
Kończenie sesji ...................................................................................................... 185
Zmienne sesji ......................................................................................................... 186
Konfiguracja sesji .................................................................................................. 187
Implementacja sesji ................................................................................................ 189
Śledzenie zachowań użytkownika .......................................................................... 192
Kontrola dostępu z wykorzystaniem sesji .............................................................. 194
Ćwiczenia do samodzielnego wykonania ............................................................... 199
Spis treści 5
Rozdział 4. Współpraca z systemem plików ..................................................... 201
Lekcja 14. Operacje na strukturze systemu plików ...................................................... 201
Odczyt zawartości katalogu ................................................................................... 201
Operacje na katalogach .......................................................................................... 206
Operacje na plikach ................................................................................................ 207
Miejsce na dysku .................................................................................................... 210
Rekurencyjne usuwanie zawartości katalogu ......................................................... 211
Nawigacja po katalogach ....................................................................................... 212
Ćwiczenia do samodzielnego wykonania ............................................................... 214
Lekcja 15. Operacje na plikach .................................................................................... 215
Tworzenie i otwieranie plików ............................................................................... 215
Zamykanie plików .................................................................................................. 217
Odczyt danych ....................................................................................................... 217
Zapis danych .......................................................................................................... 224
Inne operacje .......................................................................................................... 228
Ćwiczenia do samodzielnego wykonania ............................................................... 231
Lekcja 16. Praktyczne wykorzystanie plików .............................................................. 231
Tekstowy licznik odwiedzin ................................................................................... 232
Licznik wykorzystujący grafikę ............................................................................. 233
Kontrola dostępu .................................................................................................... 235
Lista odnośników ................................................................................................... 239
Lista odwiedzin ...................................................................................................... 240
Ćwiczenia do samodzielnego wykonania ............................................................... 243
Rozdział 5. Obiektowy PHP ............................................................................. 245
Lekcja 17. Podstawy obiektowości .............................................................................. 245
Czym jest obiekt? ................................................................................................... 245
Definicja klasy ....................................................................................................... 246
Tworzenie obiektów ............................................................................................... 249
Konstruktory i destruktory ..................................................................................... 250
Obiektowa lista odwiedzin ..................................................................................... 254
Ćwiczenia do samodzielnego wykonania ............................................................... 257
Lekcja 18. Więcej o programowaniu obiektowym ....................................................... 257
Dziedziczenie ......................................................................................................... 257
Przesłanianie składowych ...................................................................................... 260
Klasy i składowe finalne ........................................................................................ 262
Konstruktory i destruktory klas bazowych ............................................................. 263
Specyfikatory dostępu ............................................................................................ 265
Składowe statyczne ................................................................................................ 267
Ćwiczenia do samodzielnego wykonania ............................................................... 270
Lekcja 19. Wyjątki ....................................................................................................... 270
Instrukcja throw ..................................................................................................... 271
Klasa Exception i pochodne ................................................................................... 271
Blok try...catch ....................................................................................................... 272
Przechwytywanie wielu wyjątków ......................................................................... 278
Własne wyjątki ....................................................................................................... 280
Ćwiczenia do samodzielnego wykonania ............................................................... 281
Rozdział 6. Grafika i obrazy ............................................................................ 283
Lekcja 20. Obsługa grafiki ........................................................................................... 283
Biblioteka graficzna ............................................................................................... 283
Jak stworzyć galerię obrazów? ............................................................................... 284
Przetwarzanie grafiki ............................................................................................. 293
Ćwiczenia do samodzielnego wykonania ............................................................... 305
6 PHP5. Praktyczny kurs
Rozdział 7. Obsługa sieci ................................................................................ 307
Lekcja 21. Połączenia, poczta i FTP ............................................................................. 307
Tablica $_SERVER ............................................................................................... 307
Adresy IP ............................................................................................................... 310
Jak rozpoznać przeglądarkę? .................................................................................. 313
Połączenie FTP ...................................................................................................... 315
Wysyłanie poczty ................................................................................................... 317
Ćwiczenia do samodzielnego wykonania ............................................................... 320
Rozdział 8. Współpraca z bazami danych ......................................................... 321
Lekcja 22. Podstawy baz danych .................................................................................. 321
MySQL i SQLite .................................................................................................... 321
Tabele, klucze i relacje ........................................................................................... 322
Bazy danych a PHP ................................................................................................ 326
Instalacja systemu bazy danych ............................................................................. 327
Obsługa serwera MySQL ....................................................................................... 333
Lekcja 23. Podstawy SQL ............................................................................................ 339
Czym jest SQL? ..................................................................................................... 339
Obsługa tabel ......................................................................................................... 340
Typy danych w kolumnach .................................................................................... 344
Zapytania ............................................................................................................... 349
Lekcja 24. PHP i bazy danych ...................................................................................... 361
PHP i MySQL ........................................................................................................ 361
PHP i SQLite .......................................................................................................... 369
Ćwiczenia do samodzielnego wykonania ............................................................... 377
Lekcja 25. Podejście obiektowe ................................................................................... 378
PEAR DB ............................................................................................................... 378
PHP i SQLite .......................................................................................................... 386
Lekcja 26. Bazy danych w praktyce ............................................................................. 391
Licznik ................................................................................................................... 391
Logowanie .............................................................................................................. 394
Ankieta ................................................................................................................... 396
Lista odwiedzin ...................................................................................................... 400
Liczba osób na stronie ............................................................................................ 403
Ćwiczenia do samodzielnego wykonania ............................................................... 406
Skorowidz ..................................................................................... 407
Rozdział 3.
Współpraca
z przeglądarką
Lekcja 10. Odbieranie danych
z przeglądarki
Formularze HTML
Skrypty PHP bardzo często są wykorzystywane do odbierania i przetwarzania danych
pochodzących z przeglądarki użytkownika. Najczęściej polega to na tym, że osoba prze-
glądająca stronę WWW wprowadza różne informacje do formularza HTML, które na-
stępnie, zazwyczaj po kliknięciu przycisku, są wysyłane do serwera, gdzie zajmuje się
nimi kod PHP. Aby taka procedura mogła zostać wykonana, formularz musi zawierać
parametry action oraz method, zatem jego ogólna postać będzie następująca:
target = "okno"
action = "url"
method = "metoda"
enctype = "typ kodowania">


Parametr method wskazuje metodę, która zostanie użyta do przesłania danych do ser-
wera, może to być GET lub POST. Natomiast action określa adres skryptu, który będzie
odbierał dane. Może on być adresem bezwzględnym, np. http://www.mojadomena.com/
skrypt.php, lub względnym, np. /skrypty/skrypt.php. W pierwszym przypadku dane zo-
staną dostarczone do skryptu skrypt.php znajdującego się w głównym katalogu serwera
o adresie http://www.mojadomena.com, natomiast w drugim  do skryptu o nazwie
skrypt.php znajdującego się w podkatalogu skrypty na serwerze ze stroną WWW zawie-
rającą formularz.
148 Rozdział 3. f& Współpraca z przeglądarką
Elementami składowymi formularza mogą być:
button  klasyczny przycisk,
checkbox  pole wyboru,
hidden  element ukryty,
password  pole tekstowe do wpisywania haseł,
radio  pole wyboru,
reset  przycisk reset,
select  lista wyboru,
submit  przycisk submit,
text  pole tekstowe,
textarea  rozszerzone pole tekstowe.
Każdy z tych elementów powinien mieć określony parametr name, dzięki któremu będzie
możliwa jego identyfikacja w skrypcie PHP.
Wysyłanie metodą GET
Metoda GET służy do przesyłania stosunkowo niewielkich ilości danych, np. krótkich for-
mularzy tekstowych. Wynika to z faktu, że są one przesyłane w adresie URL, który bę-
dzie miał wtedy schematyczną postać:
http://adres.serwera/skrypt.php?parametr1=wartość1¶metr2=wartość2
Jeśli wezmiemy pod uwagę, że adres URL ma zwykle ograniczoną długość (zależy to
od przeglądarki oraz serwera), a także że może zawierać jedynie znaki alfanumeryczne,
jasnym jest, dlaczego ta metoda jest wykorzystywana jedynie do wymiany prostych
danych tekstowych.
Aby zobaczyć, jak to działa w praktyce, napiszmy kod prostego formularza zawierają-
cego jedno pole tekstowe, który będzie wysyłał dane do skryptu o nazwie skrypt.php
umieszczonego w katalogu głównym naszego serwera WWW. Kod HTML zawierający
taki formularz jest widoczny na listingu 3.1.
Listing 3.1. Kod przykładowego formularza HTML




Przykładowa strona


action="http://127.0.0.1/skrypt.php">

Lekcja 10. Odbieranie danych z przeglądarki 149




Formularz (widoczny na rysunku 3.1) zawiera jedno pole tekstowe o nazwie pole1 oraz
przycisk typu Submit, którego kliknięcie powoduje przesłanie danych do serwera. War-
tość parametru method to get, a zatem dane zostaną przesłane do serwera za pomocą
metody GET. Nazwę skryptu oraz adres serwera wskazuje parametr action, wywołany
zostanie więc skrypt o nazwie skrypt.php znajdujący się na serwerze o lokalnym adre-
sie 127.0.0.1 (prawidłowe byłoby również użycie adresu http://localhost/skrypt.php).
Ponieważ zarówno kod HTML, jak i kod skryptu będą się znajdowały na tym samym
serwerze w tym samym katalogu, można również pominąć w parametrze action dane
dotyczące serwera. Tym samym mógłby mieć on postać:
action="skrypt.php"
Rysunek 3.1.
Formularz generowany
przez kod z listingu 3.1
Jeśli do pola tekstowego wprowadzimy przykładowy ciąg znaków, np. test, oraz kliknie-
my przycisk Wyślij zapytanie (napis na przycisku może być różny w zależności od zasto-
sowanej przeglądarki), to powstanie URL w postaci http://127.0.0.1/skrypt.php?pole1=test,
tak jak na rysunku 3.2. Przetworzony zostanie zatem skrypt znajdujący się na serwe-
rze lokalnym 127.0.0.1, w pliku skrypt.php i zostaną mu przekazane wartości znajdu-
jące się za znakiem ? odnośnika. W skrypcie możemy te wartości odczytać i wyko-
rzystać do własnych celów. Dowiedzmy się zatem, jak to zrobić.
Rysunek 3.2.
Odnośnik generowany
w metodzie GET
Dostęp do danych z formularza jest możliwy na trzy sposoby. Sposobem najstarszym
i obecnie niezalecanym jest wykorzystanie globalnej tablicy $HTTP_GET_VARS. Jako indeks
tablicy należy podać nazwę pola formularza, z którego chcemy odczytać dane. Sche-
matycznie taka konstrukcja będzie miała postać:
$zmienna = $HTTP_GET_VARS['nazwa_pola'];
Tego typu odwołanie należy stosować jedynie wtedy, gdy konieczna jest kompatybil-
ność ze starszymi wersjami PHP (PHP3), zazwyczaj jednak nie ma takiej potrzeby. Aby
skorzystać z tego typu odwołań w PHP5, należy w pliku konfiguracyjnym php.ini włączyć
domyślnie wyłączoną opcję register_long_arrays (register_long_arrays = On).
150 Rozdział 3. f& Współpraca z przeglądarką
Drugim sposobem dostępu do danych z formularza jest wykorzystanie globalnej tablicy
$_GET. Jako indeks tablicy należy zastosować, podobnie jak w poprzednim przypadku,
nazwę pola, z którego dane chcemy odczytać. Jest to też zalecany sposób odczytu i bę-
dziemy go stosować w dalszej części książki. Schematycznie konstrukcja taka ma postać:
$zmienna = $_GET ['nazwa_pola'];
Sposób trzeci to dostęp bezpośredni. Jeżeli w pliku konfiguracyjnym php.ini włączymy
opcję register_globals1, dostęp do pól formularza będzie odbywał się tak samo jak
do zwykłych zmiennych. Oznacza to, że jeśli w formularzu będzie występowało pole
o nazwie pole1, to w skrypcie będzie można się odwołać do niego tak, jak do zmiennej
$pole1. Ten sposób, choć wydaje się najwygodniejszy, może jednak prowadzić do po-
wstawania błędów w skryptach, gdyż zmienne związane z formularzem nie odróżniają
się od zmiennych lokalnych skryptu. Stosujmy ten sposób jedynie wtedy, gdy jest to
naprawdę potrzebne i dokładnie wiemy, jakie mogą być konsekwencje.
Na listingu 3.2 został przedstawiony skrypt odczytujący wartość pola tekstowego z for-
mularza z listingu 3.1 z wykorzystaniem wszystkich trzech sposobów.
Listing 3.2. Różne sposoby odczytu danych z formularza




Przykładowa strona


Dane wprowadzone do formularza:


//sposób pierwszy
$zmienna = $HTTP_GET_VARS['pole1'];
echo("1. Wartość pola pole1 to $zmienna
");
//sposób drugi
$zmienna = $_GET['pole1'];
echo("2. Wartość pola pole1 to $zmienna
");
//sposób trzeci
$zmienna = $pole1;
echo("3. Wartość pola pole1 to $zmienna");
?>


Przy przetwarzaniu formularzy bardzo przydaje się funkcja isSet, która pozwala stwier-
dzić, czy dane pole formularza zostało ustawione, innymi słowy czy została przekazana
do skryptu wartość odpowiadająca temu polu. Aby pokazać sposób wykorzystania tej
funkcji, utwórzmy formularz składający się z trzech pól wyboru typu radio. Odpowiedni
kod HTML został zaprezentowany na listingu 3.3, a jego wygląd widoczny jest na ry-
1
Począwszy od PHP w wersji 4.2.0, a więc także we wszystkich wersjach PHP5, opcja ta jest domyślnie
wyłączona.
Lekcja 10. Odbieranie danych z przeglądarki 151
sunku 3.3. Każde z pól ma taką samą wartość parametru name, a zatem tworzą one
jedną grupę. Dzięki temu na raz może być zaznaczone tylko jedno pole, są to więc
opcje wykluczające. Każde pole ma jednak inną wartość parametru value, dzięki czemu
w skrypcie będziemy je mogli łatwo zidentyfikować. Parametr action formularza wska-
zuje, podobnie jak we wcześniejszych przykładach, na skrypt znajdujący się w pliku
skrypt.php na serwerze lokalnym o adresie 127.0.0.1.
Listing 3.3. Formularz zawierający elementy typu radio




Przykładowa strona


Proszę zaznaczyć jedną z opcji.


action="http://127.0.0.1/skrypt.php">

Opcja1



Opcja2



Opcja3







Rysunek 3.3.
Wygląd formularza
generowanego
przez kod
z listingu 3.3
Napiszmy więc teraz skrypt skrypt.php. Pozwoli nam on stwierdzić, czy została zazna-
czona jakaś opcja i ewentualnie która. W wykonaniu tego zadania bardzo nam pomoże
wspomniana przed chwilą funkcja isSet. Spójrzmy na kod widoczny na listingu 3.4 
isSet jest tu używana do stwierdzenia, czy w tablicy $_GET jest ustawiony klucz o nazwie
152 Rozdział 3. f& Współpraca z przeglądarką
radio1, a tym samym czy do skryptu została przekazana wartość pola radio o nazwie
radio1. Jeśli tak, funkcja zwraca wartość true, jeśli nie  wartość false. Takie za-
chowanie pozwala na użycie instrukcji warunkowej if do wyświetlenia właściwego
komunikatu na ekranie.
Listing 3.4. Obsługa pól typu radio




Wynik działania skryptu



if(!isSet($_GET['radio1'])){
echo("Proszę zaznaczyć jedną z opcji!");
}
else{
echo("Zaznaczona opcja to {$_GET['radio1']}.");
}
?>




Metoda POST
Metoda POST to drugi sposób przesyłania danych do serwera. Główne różnice dla użyt-
kownika to możliwość przesłania dużo większej ilości danych (np. plików binarnych)
oraz to, że nie można ich zobaczyć w polu adresu przeglądarki (co wydaje się całkiem
logiczne). Maksymalna ilość danych, jakie mogą być przesłane za pomocą tej metody,
jest ograniczona przez znajdującą się w pliku php.ini opcję konfiguracyjną post_max_
size2. Domyślnie jest to 8 MB. Prosty formularz wykorzystujący przesyłanie danych
metodą POST został przedstawiony na listingu 3.5. Jak widać, jedyną różnicą w stosunku
do metody GET (formularz z listingu 3.1) jest zmiana wartości parametru method znacznika
form. Również i w tym przypadku parametr action mógłby mieć postać:
action="http://localhost/skrypt.php"
lub po prostu:
action="skrypt.php"
Listing 3.5. Kod formularza HTML wysyłającego dane metodą POST




2
Na maksymalną ilość odbieranych danych mogą również mieć wpływ ustawienia serwera WWW.
Lekcja 10. Odbieranie danych z przeglądarki 153
Przykładowa strona


action="http://127.0.0.1/skrypt.php">





W skrypcie PHP wartości przesłane z formularza można odczytać, podobnie jak miało
to miejsce w przypadku metody GET, na trzy sposoby. Sposobem pierwszym (obecnie
niezalecanym; niezbędne jest włączenie opcji konfiguracyjnej register_long_arrays)
jest wykorzystanie globalnej tablicy $HTTP_POST_VARS. Jako indeks tablicy należy podać
nazwę pola formularza, z którego chcemy odczytać dane. Schematycznie taka konstruk-
cja ma postać:
$zmienna = $HTTP_POST_VARS['nazwa_pola'];
Należy jej użyć, jeśli niezbędne jest zachowanie kompatybilności z wersją 3 PHP.
Drugim sposobem dostępu jest wykorzystanie globalnej tablicy $_POST. Jako indeks tablicy
należy zastosować również nazwę pola formularza, z którego chcemy odczytać dane.
Jest to polecany sposób odwoływania się do danych i będzie on stosowany w dalszej
części książki, o ile zaistnieje potrzeba zastosowania metody POST. Schematycznie kon-
strukcja taka ma postać:
$zmienna = $_POST['nazwa_pola'];
Sposób trzeci to dostęp bezpośredni, niezbędne jest w tym przypadku włączenie w pliku
konfiguracyjnym php.ini opcji register_globals. Dostęp do pól formularza może się
wtedy odbywać tak samo, jak w przypadku zwykłych zmiennych. Oznacza to, że jeśli
w formularzu będzie występowało pole o nazwie pole1, to w skrypcie będzie można
się odwołać do niego tak, jak do zmiennej $pole1. Jak już wiemy, ta metoda też nie jest
polecana, gdyż nie pozwala na odróżnienie zwykłych zmiennych od tych powstałych
ze względu na otrzymanie danych z formularza, co może powodować trudne do wy-
krycia błędy.
Na listingu 3.6 został przedstawiony skrypt odczytujący wartość pola tekstowego z for-
mularza z listingu 3.5 z wykorzystaniem wszystkich trzech wymienionych sposobów.
Przykładowy efekt działania skryptu w przypadku, kiedy do pola tekstowego formula-
rza został wprowadzony ciąg znaków test, został przedstawiony na rysunku 3.4. Jak
widać, przy prostej obsłudze formularzy różnice pomiędzy metodami GET i POST są nie-
wielkie, jednak ta druga pozwoli nam wykonywać bardziej zaawansowane zadania, jak
np. przesyłanie plików do serwera, czym zajmiemy się już w kolejnej sekcji.
Listing 3.6. Skrypt odczytujący dane przekazane z formularza za pomocą metody POST



154 Rozdział 3. f& Współpraca z przeglądarką

Wynik działania skryptu



//sposób pierwszy
$zmienna = $HTTP_POST_VARS['pole1'];
echo("1. Wartość pola pole1 to $zmienna
");
//sposób drugi
$zmienna = $_POST['pole1'];
echo("2. Wartość pola pole1 to $zmienna
");
//sposób trzeci
$zmienna = $pole1;
echo("3. Wartość pola pole1 to $zmienna");
?>




Rysunek 3.4.
Różne sposoby
odczytu przesłanych
danych dają
taki sam efekt
Wysyłanie plików do serwera
Aby wysłać plik z komputera użytkownika na serwer, trzeba przygotować odpowiedni
formularz HTML umożliwiający wybór pliku oraz skrypt PHP, który go odbierze. Rów-
nież środowisko PHP musi być odpowiednio skonfigurowane. W pliku php.ini musi być
włączona opcja file_uploads, zmienna upload_tmp_dir powinna wskazywać na katalog,
w którym będą zapisywane dane tymczasowe podczas ich pobierania, zmienna upload_
max_filesize powinna określać maksymalny rozmiar pojedynczego pliku (standardowo
2 MB). Jeżeli katalog tymczasowy nie zostanie podany, wykorzystany będzie katalog
systemowy. Należy zwrócić uwagę, aby uprawnienia dostępu do katalogu tymczasowego
były ustawione tak, aby PHP miało możliwość zapisywania w nim danych. Maksy-
malna wielkość pliku zależy również od opcji post_max_size (standardowo 8 MB) i me-
mory_limit (standardowo 8 MB). W większości przypadków ustawienia domyślne są
jednak wystarczające i w standardowych zastosowaniach nie ma potrzeby ich mody-
fikować.
Formularz HTML należy zdefiniować za pomocą znacznika
, który powinien za-
wierać następujące parametry:
Lekcja 10. Odbieranie danych z przeglądarki 155
name  określa nazwę formularza.
enctype  określa typ kodowania MIME, w tym przypadku będzie
to multipart/form-data.
action  określa adres skryptu PHP.
method  określa metodę wysyłania danych, w tym przypadku będzie
to metoda POST.
W formularzu należy umieścić dwa pola input, jedno typu file, a drugie typu submit.
Polu typu file, służącemu do wyboru pliku, nadamy nazwę (parametr name) plik1. Po-
zwoli ona na zidentyfikowanie danych z tego pola w skrypcie PHP. Kod przykładowego
formularza został zaprezentowany na listingu 3.7. Gdy zostanie wczytany do przeglą-
darki, będzie miał natomiast postać widoczną na rysunku 3.5.
Listing 3.7. Formularz HTML służący do wysyłania plików




Wysyłanie plików


enctype = "multipart/form-data"
action = "http://127.0.0.1/upload.php"
method = "POST">
Nazwa pliku:
name = "plik1"
size = "30"
value = "">
name = "wyslij"
value = "Wyślij plik">



Rysunek 3.5.
Wygląd formularza
do wysyłania plików
Plik wysłany za pomocą takiego formularza do serwera zostanie zapisany w katalogu
służącym do przechowywania plików tymczasowych. Katalog ten możemy ustalić sa-
modzielnie, ustawiając w pliku php.ini opcję konfiguracyjną upload_tmp_dir. W sys-
temie Linux będzie to np.:
156 Rozdział 3. f& Współpraca z przeglądarką
upload_tmp_dir = /var/www/upload
a w systemie Windows:
upload_tmp_dir = c:\www\upload\
Skrypt odbierający dane uzyska dostęp do globalnej tablicy $_FILES zawierającej infor-
macje niezbędne do ich dalszego przetworzenia. Jest to tablica asocjacyjna, w której plik
identyfikowany jest przez nazwę pola input (typu file) z formularza WWW. W przy-
padku formularza z listingu 3.7 ta nazwa to plik1. Pod tym indeksem znajduje się 5 in-
nych, które pozwalają na odczytanie informacji o pliku. Są to:
$_FILES['plik1']['name']  oryginalna nazwa pliku (którą miał
on na komputerze użytkownika).
$_FILES['plik1']['type']  typ MIME pliku (o ile przeglądarka
dostarczyła tę informację).
$_FILES['plik1']['size']  wielkość pliku w bajtach.
$_FILES['plik1']['tmp_name']  nazwa tymczasowa, pod jaką plik został
zapisany na serwerze.
$_FILES['plik1']['error']  status operacji, kod błędu.
Pole error (dostępne w PHP od wersji 4.2.0) może przyjmować jedną z wartości:
UPLOAD_ERR_OK  brak błędu, operacja została zakończona sukcesem.
UPLOAD_ERR_INI_SIZE  wielkość pliku przekracza wielkość maksymalną
zdefiniowaną w pliku php.ini (zmienna
upload_max_filesize).
UPLOAD_ERR_FORM_SIZE  rozmiar pliku przekracza wielkość maksymalną
zdefiniowaną w formularzu HTML.
UPLOAD_ERR_PARTIAL  została odebrana jedynie część pliku.
UPLOAD_ERR_NO_FILE  plik nie został pobrany.
Plik wysłany do serwera jest umieszczany w katalogu tymczasowym i należy go przenieść
do właściwej lokalizacji docelowej (np. katalogu, który przeznaczyliśmy do przechowywa-
nia tego typu danych). Wykorzystuje się w tym celu funkcję move_uploaded_file, która
dodatkowo ze względów bezpieczeństwa oprócz zmiany lokalizacji pliku wykonuje
sprawdzenie, czy na pewno został on wysłany do serwera za pomocą metody HTTP_POST.
Powyższe informacje w zupełności wystarczą do napisania skryptu odbierającego pliki
wysyłane z przeglądarki i zapisującego je w wybranym katalogu. Został on przedsta-
wiony na listingu 3.8 i należy go zapisać pod nazwą upload.php w katalogu głównym
serwera WWW.
Listing 3.8. Skrypt odbierający pliki wysłane do serwera



Lekcja 10. Odbieranie danych z przeglądarki 157

Wynik odbioru pliku



$uploaddir = './';
if($_FILES['plik1']['error'] == UPLOAD_ERR_OK){
$new_name = $uploaddir.$_FILES['plik1']['name'];
$temp_name = $_FILES['plik1']['tmp_name'];
if(move_uploaded_file($temp_name, $new_name)){
echo "Plik został załadowany.\n";
}
else{
echo "Nieprawidłowy plik\n";
}
}
else{
echo("Wystąpił błąd: ");
switch($_FILES['plik1']['error']){
case UPLOAD_ERR_INI_SIZE :
case UPLOAD_ERR_FORM_SIZE :
echo("Przekroczony maksymalny rozmiar pliku!\n");
break;
case UPLOAD_ERR_PARTIAL :
echo("Odebrano tylko część pliku!\n");
break;
case UPLOAD_ERR_NO_FILE :
echo("Plik nie został pobrany!\n");
break;
default :
echo("Nieznany typ błędu!\n");
}
}
?>




Katalog, w którym mają być zapisywane odbierane pliki, jest wskazywany przez zmien-
ną $uploaddir. Oczywiście musi on istnieć w systemie plików serwera. W przykładzie
został zastosowany ciąg ./, co oznacza katalog bieżący (katalog, w którym znajduje się
skrypt upload.php). Należy również pamiętać, że musi on mieć odpowiednio ustawione
prawa dostępu (aparat wykonawczy PHP musi mieć możliwość zapisu).
Pierwszą czynnością wykonywaną w skrypcie jest sprawdzenie, czy pole error tablicy
$_FILES zawiera wartość UPLOAD_ERR_OK, a zatem czy plik został odebrany bez pro-
blemów. Jeśli tak, z tablicy $_FILES jest odczytywana oryginalna nazwa pliku oraz
nazwa tymczasowa, pod którą został on zapisany na serwerze. Do nazwy oryginalnej
dołączana jest nazwa katalogu zawarta w zmiennej $uploaddir i całość jest zapisywana
w zmiennej $new_name. Nazwa tymczasowa jest z kolei zapisywana w zmiennej $temp_
name. Zmienne te (zostały one wprowadzone do skryptu w celu zwiększenia przejrzy-
stości kodu) są następnie wykorzystywane jako parametry funkcji move_uploaded_file.
Jeśli wykonanie tej funkcji zakończy się sukcesem i plik zostanie przeniesiony pod
158 Rozdział 3. f& Współpraca z przeglądarką
oryginalną nazwą do katalogu wskazywanego przez $uploaddir, funkcja zwróci wartość
true, a w przypadku przeciwnym  false. W zależności od tej wartości na ekranie
jest wyświetlany odpowiedni komunikat.
Jeżeli jednak wartość pola error tablicy $_FILES jest różna od UPLOAD_ERR_OK, wykony-
wana jest instrukcja switch pozwalająca na stwierdzenie, jakiego typu błąd wystąpił.
Badane są wszystkie pozostałe możliwości stanu pola error i wyświetlany jest odpo-
wiedni komunikat. Następnie ma miejsce sprawdzenie, czy plik w ogóle został wysłany,
czy jego wielkość nie przekroczyła maksymalnego rozmiaru oraz czy został on załado-
wany w całości. Klauzula default instrukcji switch zabezpiecza nas przed sytuacją,
kiedy w polu error znalazłby się nieznany kod błędu (np. wprowadzony w kolejnych
wersjach PHP). Dzięki niej również w takiej sytuacji zostanie wyświetlona odpo-
wiednia informacja.
Ćwiczenia do samodzielnego wykonania
Ćwiczenie 10.1. Napisz skrypt obliczający pierwiastki równania kwadratowego o pa-
rametrach wprowadzanych w formularzu HTML.
Ćwiczenie 10.2. Napisz skrypt umożliwiający wykonywanie czterech podstawowych
działań arytmetycznych na dwóch argumentach. Wartości argumentów mają być wpro-
wadzane poprzez pola tekstowe formularza, a wybór działania ma następować poprzez
pola wyboru typu radio.
Ćwiczenie 10.3. Napisz skrypt wykonujący konwersję tekstu wprowadzonego w polu
tekstowym formularza ze standardu Windows-1250 do ISO-8859-2.
Ćwiczenie 10.4. Napisz skrypt umożliwiający użytkownikowi wysłanie pliku do ser-
wera, umieszczający ten plik w wybranym katalogu i zwracający odnośnik do niego tak,
żeby było możliwe jego pobranie z poziomu przeglądarki.


Wyszukiwarka

Podobne podstrony:
Krzan Katarzyna Praktyczny kurs pisarstwa
Suworin Aleksiej Praktyczny kurs leczenia głodem
Praktyczny kurs pisarstwa
Praktyczny kurs programowania w Delphi
Praktyczny Kurs Pisarstwa
Praktyczny Kurs Pisarstwa (pisanie, twórczość, proza)
praktyczny kurs szybkiego czytania
Praktyczny kurs pisarstwa
Praktyczny kurs asemblera

więcej podobnych podstron