You are on page 1of 17

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

PHP5.
Praktyczny kurs
Autor: Marcin Lis
ISBN: 83-246-0307-7
Format: B5, stron: 432

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Znajomo jzyka PHP wykorzystywanego do tworzenia dynamicznych stron WWW


to dzi jedna z podstawowych umiejtnoci wymaganych od webmastera. Era
statycznych stron tworzonych za pomoc jzyka HTML przemina ju dawno,
a dynamiczne generowanie treci stao si obecnie standardem. Jzyk PHP i baza
danych MySQL stanowi platform o wielkich moliwociach, stosowan do tworzenia
zarwno wielkich portali i witryn e-commerce, jak i prostych stron prywatnych.
Ksika PHP5. Praktyczny kurs jest wprowadzeniem w tajniki nowoczesnego
tworzenia stron WWW. Przedstawia proces instalacji jzyka PHP wraz z serwerami
WWW, podstawowe konstrukcje jzyka i sposoby wykorzystania ich w procesie
budowania witryny. Opisuje takie zagadnienia, jak wsppraca z systemem plikw,
obsuga sesji, moliwoci programowania obiektowego oraz wsppraca z bazami
danych. Dowiesz si z niej take, jak za pomoc PHP generowa i przetwarza
elementy graficzne oraz wykorzystywa protokoy sieciowe.
Instalacja i konfiguracja PHP w rnych systemach operacyjnych
Zmienne, typy danych i operatory
Instrukcje sterujce
Komunikacja skryptw z przegldark
Obsuga plikw cookie i sesji
Operacje na plikach
Programowanie obiektowe w PHP
Wykorzystywanie danych zgromadzonych w bazie
Poznaj i wykorzystaj w swoich projektach moliwoci jzyka PHP

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci
Wstp .............................................................................................. 7
Rozdzia 1. Podstawy ......................................................................................... 9
Lekcja 1. Czym jest PHP? ................................................................................................ 9
Jzyk skryptowy ......................................................................................................... 9
Krtka historia PHP ................................................................................................. 10
Jak to dziaa? ............................................................................................................ 10
Lekcja 2. Instalacja i konfiguracja narzdzi ................................................................... 12
Linux ........................................................................................................................ 12
Windows .................................................................................................................. 21
Plik konfiguracyjny PHP .......................................................................................... 25
PHP w wierszu polece ............................................................................................ 26

Rozdzia 2. Elementy jzyka ............................................................................. 27


Lekcja 3. Pierwszy skrypt ............................................................................................... 27
Zaczynamy ............................................................................................................... 27
Znaczniki PHP ......................................................................................................... 30
Komentarze .............................................................................................................. 32
Wywietlanie informacji .......................................................................................... 34
Instrukcja print ......................................................................................................... 36
czenie skryptw ................................................................................................... 36
Lekcja 4. Zmienne, typy danych i operatory .................................................................. 41
Czym s zmienne? ................................................................................................... 41
Rodzaje zmiennych, czyli typy danych .................................................................... 42
Zmienne w kodzie skryptu ....................................................................................... 46
Wywietlanie wartoci zmiennych ........................................................................... 48
Operacje na zmiennych ............................................................................................ 52
Operatory ................................................................................................................. 52
Zmienne globalne (superglobalne) ........................................................................... 67
Konwersje typw ..................................................................................................... 69
wiczenia do samodzielnego wykonania ................................................................. 73
Lekcja 5. Instrukcje sterujce ......................................................................................... 73
Instrukcje warunkowe .............................................................................................. 73
Instrukcja wyboru .................................................................................................... 80
Operator warunkowy ................................................................................................ 82
Ptle ......................................................................................................................... 83
Skadnia alternatywna .............................................................................................. 93
wiczenia do samodzielnego wykonania ................................................................. 96

PHP5. Praktyczny kurs


Lekcja 6. Funkcje ........................................................................................................... 97
Definiowanie funkcji ................................................................................................ 97
Argumenty funkcji ................................................................................................... 98
Zwracanie wartoci przez funkcje ............................................................................ 99
Zasig zmiennych .................................................................................................. 101
Sposoby przekazywania argumentw .................................................................... 104
Domylne argumenty funkcji ................................................................................. 106
wiczenia do samodzielnego wykonania ............................................................... 107
Lekcja 7. Obsuga daty i czasu ..................................................................................... 107
Wywietlanie daty i czasu ...................................................................................... 107
Tworzenie znacznika czasu .................................................................................... 115
Pozostae funkcje ................................................................................................... 118
wiczenia do samodzielnego wykonania ............................................................... 120
Lekcja 8. Cigi znakw ................................................................................................ 121
Rodzaje cigw znakw ......................................................................................... 121
Formatowanie cigw ............................................................................................ 123
Przetwarzanie cigw znakw ............................................................................... 128
Porwnania ............................................................................................................ 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. Wsppraca z przegldark ............................................................ 147


Lekcja 10. Odbieranie danych z przegldarki .............................................................. 147
Formularze HTML ................................................................................................. 147
Wysyanie metod GET ......................................................................................... 148
Metoda POST ......................................................................................................... 152
Wysyanie plikw do serwera ................................................................................ 154
wiczenia do samodzielnego wykonania ............................................................... 158
Lekcja 11. Wysyanie danych do przegldarki ............................................................. 158
Sposoby wysyania danych .................................................................................... 158
Wysyanie zawartoci plikw ................................................................................. 159
Sposoby pobierania plikw z serwisu .................................................................... 162
wiczenia do samodzielnego wykonania ............................................................... 175
Lekcja 12. Obsuga cookies .......................................................................................... 175
Krtko o cookies .................................................................................................... 175
Obsuga cookies w PHP ......................................................................................... 176
Wykorzystanie cookies .......................................................................................... 180
wiczenia do samodzielnego wykonania ............................................................... 184
Lekcja 13. Sesje ............................................................................................................ 184
Wstp do sesji ........................................................................................................ 184
Identyfikator sesji ................................................................................................... 184
Rozpoczynanie sesji ............................................................................................... 185
Koczenie sesji ...................................................................................................... 185
Zmienne sesji ......................................................................................................... 186
Konfiguracja sesji .................................................................................................. 187
Implementacja sesji ................................................................................................ 189
ledzenie zachowa uytkownika .......................................................................... 192
Kontrola dostpu z wykorzystaniem sesji .............................................................. 194
wiczenia do samodzielnego wykonania ............................................................... 199

Spis treci

Rozdzia 4. Wsppraca z systemem plikw ..................................................... 201


Lekcja 14. Operacje na strukturze systemu plikw ...................................................... 201
Odczyt zawartoci katalogu ................................................................................... 201
Operacje na katalogach .......................................................................................... 206
Operacje na plikach ................................................................................................ 207
Miejsce na dysku .................................................................................................... 210
Rekurencyjne usuwanie zawartoci katalogu ......................................................... 211
Nawigacja po katalogach ....................................................................................... 212
wiczenia do samodzielnego wykonania ............................................................... 214
Lekcja 15. Operacje na plikach .................................................................................... 215
Tworzenie i otwieranie plikw ............................................................................... 215
Zamykanie plikw .................................................................................................. 217
Odczyt danych ....................................................................................................... 217
Zapis danych .......................................................................................................... 224
Inne operacje .......................................................................................................... 228
wiczenia do samodzielnego wykonania ............................................................... 231
Lekcja 16. Praktyczne wykorzystanie plikw .............................................................. 231
Tekstowy licznik odwiedzin ................................................................................... 232
Licznik wykorzystujcy grafik ............................................................................. 233
Kontrola dostpu .................................................................................................... 235
Lista odnonikw ................................................................................................... 239
Lista odwiedzin ...................................................................................................... 240
wiczenia do samodzielnego wykonania ............................................................... 243

Rozdzia 5. Obiektowy PHP ............................................................................. 245


Lekcja 17. Podstawy obiektowoci .............................................................................. 245
Czym jest obiekt? ................................................................................................... 245
Definicja klasy ....................................................................................................... 246
Tworzenie obiektw ............................................................................................... 249
Konstruktory i destruktory ..................................................................................... 250
Obiektowa lista odwiedzin ..................................................................................... 254
wiczenia do samodzielnego wykonania ............................................................... 257
Lekcja 18. Wicej o programowaniu obiektowym ....................................................... 257
Dziedziczenie ......................................................................................................... 257
Przesanianie skadowych ...................................................................................... 260
Klasy i skadowe finalne ........................................................................................ 262
Konstruktory i destruktory klas bazowych ............................................................. 263
Specyfikatory dostpu ............................................................................................ 265
Skadowe statyczne ................................................................................................ 267
wiczenia do samodzielnego wykonania ............................................................... 270
Lekcja 19. Wyjtki ....................................................................................................... 270
Instrukcja throw ..................................................................................................... 271
Klasa Exception i pochodne ................................................................................... 271
Blok try...catch ....................................................................................................... 272
Przechwytywanie wielu wyjtkw ......................................................................... 278
Wasne wyjtki ....................................................................................................... 280
wiczenia do samodzielnego wykonania ............................................................... 281

Rozdzia 6. Grafika i obrazy ............................................................................ 283


Lekcja 20. Obsuga grafiki ........................................................................................... 283
Biblioteka graficzna ............................................................................................... 283
Jak stworzy galeri obrazw? ............................................................................... 284
Przetwarzanie grafiki ............................................................................................. 293
wiczenia do samodzielnego wykonania ............................................................... 305

PHP5. Praktyczny kurs

Rozdzia 7. Obsuga sieci ................................................................................ 307


Lekcja 21. Poczenia, poczta i FTP ............................................................................. 307
Tablica $_SERVER ............................................................................................... 307
Adresy IP ............................................................................................................... 310
Jak rozpozna przegldark? .................................................................................. 313
Poczenie FTP ...................................................................................................... 315
Wysyanie poczty ................................................................................................... 317
wiczenia do samodzielnego wykonania ............................................................... 320

Rozdzia 8. Wsppraca 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
Obsuga serwera MySQL ....................................................................................... 333
Lekcja 23. Podstawy SQL ............................................................................................ 339
Czym jest SQL? ..................................................................................................... 339
Obsuga 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. Podejcie 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 osb na stronie ............................................................................................ 403
wiczenia do samodzielnego wykonania ............................................................... 406

Skorowidz ..................................................................................... 407

Rozdzia 3.

Wsppraca
z przegldark
Lekcja 10. Odbieranie danych
z przegldarki
Formularze HTML
Skrypty PHP bardzo czsto s wykorzystywane do odbierania i przetwarzania danych
pochodzcych z przegldarki uytkownika. Najczciej polega to na tym, e osoba przegldajca stron WWW wprowadza rne informacje do formularza HTML, ktre nastpnie, zazwyczaj po klikniciu przycisku, s wysyane do serwera, gdzie zajmuje si
nimi kod PHP. Aby taka procedura moga zosta wykonana, formularz musi zawiera
parametry action oraz method, zatem jego oglna posta bdzie nastpujca:
<form

name = "nazwa"
target = "okno"
action = "url"
method = "metoda"
enctype = "typ kodowania">
<!--tu definicja obiektw skadowych-->
</form>

Parametr method wskazuje metod, ktra zostanie uyta do przesania danych do serwera, moe to by GET lub POST. Natomiast action okrela adres skryptu, ktry bdzie
odbiera dane. Moe on by adresem bezwzgldnym, np. http://www.mojadomena.com/
skrypt.php, lub wzgldnym, np. /skrypty/skrypt.php. W pierwszym przypadku dane zostan dostarczone do skryptu skrypt.php znajdujcego si w gwnym katalogu serwera
o adresie http://www.mojadomena.com, natomiast w drugim do skryptu o nazwie
skrypt.php znajdujcego si w podkatalogu skrypty na serwerze ze stron WWW zawierajc formularz.

Rozdzia 3. Wsppraca z przegldark

148

Elementami skadowymi 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.

Kady z tych elementw powinien mie okrelony parametr name, dziki ktremu bdzie
moliwa jego identyfikacja w skrypcie PHP.

Wysyanie metod GET


Metoda GET suy do przesyania stosunkowo niewielkich iloci danych, np. krtkich formularzy tekstowych. Wynika to z faktu, e s one przesyane w adresie URL, ktry bdzie mia wtedy schematyczn posta:
http://adres.serwera/skrypt.php?parametr1=warto1&parametr2=warto2

Jeli wemiemy pod uwag, e adres URL ma zwykle ograniczon dugo (zaley to
od przegldarki oraz serwera), a take e moe zawiera jedynie znaki alfanumeryczne,
jasnym jest, dlaczego ta metoda jest wykorzystywana jedynie do wymiany prostych
danych tekstowych.
Aby zobaczy, jak to dziaa w praktyce, napiszmy kod prostego formularza zawierajcego jedno pole tekstowe, ktry bdzie wysya dane do skryptu o nazwie skrypt.php
umieszczonego w katalogu gwnym naszego serwera WWW. Kod HTML zawierajcy
taki formularz jest widoczny na listingu 3.1.
Listing 3.1. Kod przykadowego formularza HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Przykadowa strona</title>
</head>
<body>
<form method="GET"
action="http://127.0.0.1/skrypt.php">
<input type="text" name="pole1">

Lekcja 10. Odbieranie danych z przegldarki

149

<input type="submit">
</form>
</body>
</html>

Formularz (widoczny na rysunku 3.1) zawiera jedno pole tekstowe o nazwie pole1 oraz
przycisk typu Submit, ktrego kliknicie powoduje przesanie danych do serwera. Warto parametru method to get, a zatem dane zostan przesane do serwera za pomoc
metody GET. Nazw skryptu oraz adres serwera wskazuje parametr action, wywoany
zostanie wic skrypt o nazwie skrypt.php znajdujcy si na serwerze o lokalnym adresie 127.0.0.1 (prawidowe byoby rwnie uycie adresu http://localhost/skrypt.php).
Poniewa zarwno kod HTML, jak i kod skryptu bd si znajdoway na tym samym
serwerze w tym samym katalogu, mona rwnie pomin w parametrze action dane
dotyczce serwera. Tym samym mgby mie on posta:
action="skrypt.php"

Rysunek 3.1.
Formularz generowany
przez kod z listingu 3.1

Jeli do pola tekstowego wprowadzimy przykadowy cig znakw, np. test, oraz klikniemy przycisk Wylij zapytanie (napis na przycisku moe by rny w zalenoci od zastosowanej przegldarki), to powstanie URL w postaci http://127.0.0.1/skrypt.php?pole1=test,
tak jak na rysunku 3.2. Przetworzony zostanie zatem skrypt znajdujcy si na serwerze lokalnym 127.0.0.1, w pliku skrypt.php i zostan mu przekazane wartoci znajdujce si za znakiem ? odnonika. W skrypcie moemy te wartoci odczyta i wykorzysta do wasnych celw. Dowiedzmy si zatem, jak to zrobi.
Rysunek 3.2.
Odnonik generowany
w metodzie GET

Dostp do danych z formularza jest moliwy na trzy sposoby. Sposobem najstarszym


i obecnie niezalecanym jest wykorzystanie globalnej tablicy $HTTP_GET_VARS. Jako indeks
tablicy naley poda nazw pola formularza, z ktrego chcemy odczyta dane. Schematycznie taka konstrukcja bdzie miaa posta:
$zmienna = $HTTP_GET_VARS['nazwa_pola'];

Tego typu odwoanie naley stosowa jedynie wtedy, gdy konieczna jest kompatybilno ze starszymi wersjami PHP (PHP3), zazwyczaj jednak nie ma takiej potrzeby. Aby
skorzysta z tego typu odwoa w PHP5, naley w pliku konfiguracyjnym php.ini wczy
domylnie wyczon opcj register_long_arrays (register_long_arrays = On).

Rozdzia 3. Wsppraca z przegldark

150

Drugim sposobem dostpu do danych z formularza jest wykorzystanie globalnej tablicy


$_GET. Jako indeks tablicy naley zastosowa, podobnie jak w poprzednim przypadku,
nazw pola, z ktrego dane chcemy odczyta. Jest to te zalecany sposb odczytu i bdziemy go stosowa w dalszej czci ksiki. Schematycznie konstrukcja taka ma posta:
$zmienna = $_GET ['nazwa_pola'];

Sposb trzeci to dostp bezporedni. Jeeli w pliku konfiguracyjnym php.ini wczymy


opcj register_globals1, dostp do pl formularza bdzie odbywa si tak samo jak
do zwykych zmiennych. Oznacza to, e jeli w formularzu bdzie wystpowao pole
o nazwie pole1, to w skrypcie bdzie mona si odwoa do niego tak, jak do zmiennej
$pole1. Ten sposb, cho wydaje si najwygodniejszy, moe jednak prowadzi do powstawania bdw w skryptach, gdy zmienne zwizane z formularzem nie odrniaj
si od zmiennych lokalnych skryptu. Stosujmy ten sposb jedynie wtedy, gdy jest to
naprawd potrzebne i dokadnie wiemy, jakie mog by konsekwencje.
Na listingu 3.2 zosta przedstawiony skrypt odczytujcy warto pola tekstowego z formularza z listingu 3.1 z wykorzystaniem wszystkich trzech sposobw.
Listing 3.2. Rne sposoby odczytu danych z formularza
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Przykadowa strona</title>
</head>
<body>
<p> Dane wprowadzone do formularza: </p>
<?php
//sposb pierwszy
$zmienna = $HTTP_GET_VARS['pole1'];
echo("1. Warto pola pole1 to $zmienna <br />");
//sposb drugi
$zmienna = $_GET['pole1'];
echo("2. Warto pola pole1 to $zmienna <br />");
//sposb trzeci
$zmienna = $pole1;
echo("3. Warto pola pole1 to $zmienna");
?>
</body>
</html>

Przy przetwarzaniu formularzy bardzo przydaje si funkcja isSet, ktra pozwala stwierdzi, czy dane pole formularza zostao ustawione, innymi sowy czy zostaa przekazana
do skryptu warto odpowiadajca temu polu. Aby pokaza sposb wykorzystania tej
funkcji, utwrzmy formularz skadajcy si z trzech pl wyboru typu radio. Odpowiedni
kod HTML zosta zaprezentowany na listingu 3.3, a jego wygld widoczny jest na ry1

Poczwszy od PHP w wersji 4.2.0, a wic take we wszystkich wersjach PHP5, opcja ta jest domylnie
wyczona.

Lekcja 10. Odbieranie danych z przegldarki

151

sunku 3.3. Kade z pl ma tak sam warto parametru name, a zatem tworz one
jedn grup. Dziki temu na raz moe by zaznaczone tylko jedno pole, s to wic
opcje wykluczajce. Kade pole ma jednak inn warto parametru value, dziki czemu
w skrypcie bdziemy je mogli atwo zidentyfikowa. Parametr action formularza wskazuje, podobnie jak we wczeniejszych przykadach, na skrypt znajdujcy si w pliku
skrypt.php na serwerze lokalnym o adresie 127.0.0.1.
Listing 3.3. Formularz zawierajcy elementy typu radio
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Przykadowa strona</title>
</head>
<body>
<P>Prosz zaznaczy jedn z opcji.</P>
<form method="get"
action="http://127.0.0.1/skrypt.php">
<input type="radio" name="radio1" value="opcja1">
Opcja1
<br />
<input type="radio" name="radio1" value="opcja2">
Opcja2
<br />
<input type="radio" name="radio1" value="opcja3">
Opcja3
<br /><br />
<input type="submit">
</form>
</body>
</html>

Rysunek 3.3.
Wygld formularza
generowanego
przez kod
z listingu 3.3

Napiszmy wic teraz skrypt skrypt.php. Pozwoli nam on stwierdzi, czy zostaa zaznaczona jaka opcja i ewentualnie ktra. W wykonaniu tego zadania bardzo nam pomoe
wspomniana przed chwil funkcja isSet. Spjrzmy na kod widoczny na listingu 3.4
isSet jest tu uywana do stwierdzenia, czy w tablicy $_GET jest ustawiony klucz o nazwie

Rozdzia 3. Wsppraca z przegldark

152

radio1, a tym samym czy do skryptu zostaa przekazana warto pola radio o nazwie
radio1. Jeli tak, funkcja zwraca warto true, jeli nie warto false. Takie zachowanie pozwala na uycie instrukcji warunkowej if do wywietlenia waciwego

komunikatu na ekranie.
Listing 3.4. Obsuga pl typu radio
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Wynik dziaania skryptu</title>
</head>
<body>
<p>
<?php
if(!isSet($_GET['radio1'])){
echo("Prosz zaznaczy jedn z opcji!");
}
else{
echo("Zaznaczona opcja to {$_GET['radio1']}.");
}
?>
</p>
</body>
</html>

Metoda POST
Metoda POST to drugi sposb przesyania danych do serwera. Gwne rnice dla uytkownika to moliwo przesania duo wikszej iloci danych (np. plikw binarnych)
oraz to, e nie mona ich zobaczy w polu adresu przegldarki (co wydaje si cakiem
logiczne). Maksymalna ilo danych, jakie mog by przesane za pomoc tej metody,
jest ograniczona przez znajdujc si w pliku php.ini opcj konfiguracyjn post_max_
size2. Domylnie jest to 8 MB. Prosty formularz wykorzystujcy przesyanie danych
metod POST zosta przedstawiony na listingu 3.5. Jak wida, jedyn rnic w stosunku
do metody GET (formularz z listingu 3.1) jest zmiana wartoci parametru method znacznika
form. Rwnie i w tym przypadku parametr action mgby mie posta:
action="http://localhost/skrypt.php"

lub po prostu:
action="skrypt.php"

Listing 3.5. Kod formularza HTML wysyajcego dane metod POST


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
2

Na maksymaln ilo odbieranych danych mog rwnie mie wpyw ustawienia serwera WWW.

Lekcja 10. Odbieranie danych z przegldarki

153

<title>Przykadowa strona</title>
</head>
<body>
<form method="post"
action="http://127.0.0.1/skrypt.php">
<input type="text" name="pole1">
<input type="submit">
</form>
</body>
</html>

W skrypcie PHP wartoci przesane z formularza mona odczyta, podobnie jak miao
to miejsce w przypadku metody GET, na trzy sposoby. Sposobem pierwszym (obecnie
niezalecanym; niezbdne jest wczenie opcji konfiguracyjnej register_long_arrays)
jest wykorzystanie globalnej tablicy $HTTP_POST_VARS. Jako indeks tablicy naley poda
nazw pola formularza, z ktrego chcemy odczyta dane. Schematycznie taka konstrukcja ma posta:
$zmienna = $HTTP_POST_VARS['nazwa_pola'];

Naley jej uy, jeli niezbdne jest zachowanie kompatybilnoci z wersj 3 PHP.
Drugim sposobem dostpu jest wykorzystanie globalnej tablicy $_POST. Jako indeks tablicy
naley zastosowa rwnie nazw pola formularza, z ktrego chcemy odczyta dane.
Jest to polecany sposb odwoywania si do danych i bdzie on stosowany w dalszej
czci ksiki, o ile zaistnieje potrzeba zastosowania metody POST. Schematycznie konstrukcja taka ma posta:
$zmienna = $_POST['nazwa_pola'];

Sposb trzeci to dostp bezporedni, niezbdne jest w tym przypadku wczenie w pliku
konfiguracyjnym php.ini opcji register_globals. Dostp do pl formularza moe si
wtedy odbywa tak samo, jak w przypadku zwykych zmiennych. Oznacza to, e jeli
w formularzu bdzie wystpowao pole o nazwie pole1, to w skrypcie bdzie mona
si odwoa do niego tak, jak do zmiennej $pole1. Jak ju wiemy, ta metoda te nie jest
polecana, gdy nie pozwala na odrnienie zwykych zmiennych od tych powstaych
ze wzgldu na otrzymanie danych z formularza, co moe powodowa trudne do wykrycia bdy.
Na listingu 3.6 zosta przedstawiony skrypt odczytujcy warto pola tekstowego z formularza z listingu 3.5 z wykorzystaniem wszystkich trzech wymienionych sposobw.
Przykadowy efekt dziaania skryptu w przypadku, kiedy do pola tekstowego formularza zosta wprowadzony cig znakw test, zosta przedstawiony na rysunku 3.4. Jak
wida, przy prostej obsudze formularzy rnice pomidzy metodami GET i POST s niewielkie, jednak ta druga pozwoli nam wykonywa bardziej zaawansowane zadania, jak
np. przesyanie plikw do serwera, czym zajmiemy si ju w kolejnej sekcji.
Listing 3.6. Skrypt odczytujcy dane przekazane z formularza za pomoc metody POST
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

Rozdzia 3. Wsppraca z przegldark

154

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">


<title>Wynik dziaania skryptu</title>
</head>
<body>
<p>
<?php
//sposb pierwszy
$zmienna = $HTTP_POST_VARS['pole1'];
echo("1. Warto pola pole1 to $zmienna <br />");
//sposb drugi
$zmienna = $_POST['pole1'];
echo("2. Warto pola pole1 to $zmienna <br />");
//sposb trzeci
$zmienna = $pole1;
echo("3. Warto pola pole1 to $zmienna");
?>
</p>
</body>
</html>

Rysunek 3.4.
Rne sposoby
odczytu przesanych
danych daj
taki sam efekt

Wysyanie plikw do serwera


Aby wysa plik z komputera uytkownika na serwer, trzeba przygotowa odpowiedni
formularz HTML umoliwiajcy wybr pliku oraz skrypt PHP, ktry go odbierze. Rwnie rodowisko PHP musi by odpowiednio skonfigurowane. W pliku php.ini musi by
wczona opcja file_uploads, zmienna upload_tmp_dir powinna wskazywa na katalog,
w ktrym bd zapisywane dane tymczasowe podczas ich pobierania, zmienna upload_
max_filesize powinna okrela maksymalny rozmiar pojedynczego pliku (standardowo
2 MB). Jeeli katalog tymczasowy nie zostanie podany, wykorzystany bdzie katalog
systemowy. Naley zwrci uwag, aby uprawnienia dostpu do katalogu tymczasowego
byy ustawione tak, aby PHP miao moliwo zapisywania w nim danych. Maksymalna wielko pliku zaley rwnie od opcji post_max_size (standardowo 8 MB) i memory_limit (standardowo 8 MB). W wikszoci przypadkw ustawienia domylne s
jednak wystarczajce i w standardowych zastosowaniach nie ma potrzeby ich modyfikowa.
Formularz HTML naley zdefiniowa za pomoc znacznika <form>, ktry powinien zawiera nastpujce parametry:

Lekcja 10. Odbieranie danych z przegldarki


name

enctype

155

okrela nazw formularza.


okrela typ kodowania MIME, w tym przypadku bdzie
to multipart/form-data.

action

okrela adres skryptu PHP.

method

okrela metod wysyania danych, w tym przypadku bdzie


to metoda POST.

W formularzu naley umieci dwa pola input, jedno typu file, a drugie typu submit.
Polu typu file, sucemu do wyboru pliku, nadamy nazw (parametr name) plik1. Pozwoli ona na zidentyfikowanie danych z tego pola w skrypcie PHP. Kod przykadowego
formularza zosta zaprezentowany na listingu 3.7. Gdy zostanie wczytany do przegldarki, bdzie mia natomiast posta widoczn na rysunku 3.5.
Listing 3.7. Formularz HTML sucy do wysyania plikw
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Wysyanie plikw</title>
</head>
<body>
<form name
= "formularz1"
enctype = "multipart/form-data"
action = "http://127.0.0.1/upload.php"
method = "POST">
Nazwa pliku:
<input type = "file"
name = "plik1"
size = "30"
value = "">
<input type = "submit"
name = "wyslij"
value = "Wylij plik">
</form>
</body>
</html>

Rysunek 3.5.
Wygld formularza
do wysyania plikw

Plik wysany za pomoc takiego formularza do serwera zostanie zapisany w katalogu


sucym do przechowywania plikw tymczasowych. Katalog ten moemy ustali samodzielnie, ustawiajc w pliku php.ini opcj konfiguracyjn upload_tmp_dir. W systemie Linux bdzie to np.:

Rozdzia 3. Wsppraca z przegldark

156
upload_tmp_dir = /var/www/upload

a w systemie Windows:
upload_tmp_dir = c:\www\upload\

Skrypt odbierajcy dane uzyska dostp do globalnej tablicy $_FILES zawierajcej informacje niezbdne do ich dalszego przetworzenia. Jest to tablica asocjacyjna, w ktrej plik
identyfikowany jest przez nazw pola input (typu file) z formularza WWW. W przypadku formularza z listingu 3.7 ta nazwa to plik1. Pod tym indeksem znajduje si 5 innych, ktre pozwalaj na odczytanie informacji o pliku. S to:
$_FILES['plik1']['name']

oryginalna nazwa pliku (ktr mia


on na komputerze uytkownika).

$_FILES['plik1']['type']

typ MIME pliku (o ile przegldarka


dostarczya 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 bdu.

Pole error (dostpne w PHP od wersji 4.2.0) moe przyjmowa jedn z wartoci:
UPLOAD_ERR_OK

brak bdu, operacja zostaa zakoczona 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

zostaa odebrana jedynie cz pliku.

UPLOAD_ERR_NO_FILE

plik nie zosta pobrany.

Plik wysany do serwera jest umieszczany w katalogu tymczasowym i naley go przenie


do waciwej lokalizacji docelowej (np. katalogu, ktry przeznaczylimy do przechowywania tego typu danych). Wykorzystuje si w tym celu funkcj move_uploaded_file, ktra
dodatkowo ze wzgldw bezpieczestwa oprcz zmiany lokalizacji pliku wykonuje
sprawdzenie, czy na pewno zosta on wysany do serwera za pomoc metody HTTP_POST.
Powysze informacje w zupenoci wystarcz do napisania skryptu odbierajcego pliki
wysyane z przegldarki i zapisujcego je w wybranym katalogu. Zosta on przedstawiony na listingu 3.8 i naley go zapisa pod nazw upload.php w katalogu gwnym
serwera WWW.
Listing 3.8. Skrypt odbierajcy pliki wysane do serwera
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

Lekcja 10. Odbieranie danych z przegldarki

157

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">


<title>Wynik odbioru pliku</title>
</head>
<body>
<p>
<?php
$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 zaadowany.\n";
}
else{
echo "Nieprawidowy plik\n";
}
}
else{
echo("Wystpi bd: ");
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 bdu!\n");
}
}
?>
</p>
</body>
</html>

Katalog, w ktrym maj by zapisywane odbierane pliki, jest wskazywany przez zmienn $uploaddir. Oczywicie musi on istnie w systemie plikw serwera. W przykadzie
zosta zastosowany cig ./, co oznacza katalog biecy (katalog, w ktrym znajduje si
skrypt upload.php). Naley rwnie pamita, e musi on mie odpowiednio ustawione
prawa dostpu (aparat wykonawczy PHP musi mie moliwo zapisu).
Pierwsz czynnoci wykonywan w skrypcie jest sprawdzenie, czy pole error tablicy
$_FILES zawiera warto UPLOAD_ERR_OK, a zatem czy plik zosta odebrany bez problemw. Jeli tak, z tablicy $_FILES jest odczytywana oryginalna nazwa pliku oraz
nazwa tymczasowa, pod ktr zosta on zapisany na serwerze. Do nazwy oryginalnej
doczana jest nazwa katalogu zawarta w zmiennej $uploaddir i cao jest zapisywana
w zmiennej $new_name. Nazwa tymczasowa jest z kolei zapisywana w zmiennej $temp_
name. Zmienne te (zostay one wprowadzone do skryptu w celu zwikszenia przejrzystoci kodu) s nastpnie wykorzystywane jako parametry funkcji move_uploaded_file.
Jeli wykonanie tej funkcji zakoczy si sukcesem i plik zostanie przeniesiony pod

158

Rozdzia 3. Wsppraca z przegldark

oryginaln nazw do katalogu wskazywanego przez $uploaddir, funkcja zwrci warto


true, a w przypadku przeciwnym false. W zalenoci od tej wartoci na ekranie
jest wywietlany odpowiedni komunikat.
Jeeli jednak warto pola error tablicy $_FILES jest rna od UPLOAD_ERR_OK, wykonywana jest instrukcja switch pozwalajca na stwierdzenie, jakiego typu bd wystpi.
Badane s wszystkie pozostae moliwoci stanu pola error i wywietlany jest odpowiedni komunikat. Nastpnie ma miejsce sprawdzenie, czy plik w ogle zosta wysany,
czy jego wielko nie przekroczya maksymalnego rozmiaru oraz czy zosta on zaadowany w caoci. Klauzula default instrukcji switch zabezpiecza nas przed sytuacj,
kiedy w polu error znalazby si nieznany kod bdu (np. wprowadzony w kolejnych
wersjach PHP). Dziki niej rwnie w takiej sytuacji zostanie wywietlona odpowiednia informacja.

wiczenia do samodzielnego wykonania


wiczenie 10.1. Napisz skrypt obliczajcy pierwiastki rwnania kwadratowego o parametrach wprowadzanych w formularzu HTML.
wiczenie 10.2. Napisz skrypt umoliwiajcy wykonywanie czterech podstawowych
dziaa arytmetycznych na dwch argumentach. Wartoci argumentw maj by wprowadzane poprzez pola tekstowe formularza, a wybr dziaania ma nastpowa poprzez
pola wyboru typu radio.
wiczenie 10.3. Napisz skrypt wykonujcy konwersj tekstu wprowadzonego w polu
tekstowym formularza ze standardu Windows-1250 do ISO-8859-2.
wiczenie 10.4. Napisz skrypt umoliwiajcy uytkownikowi wysanie pliku do serwera, umieszczajcy ten plik w wybranym katalogu i zwracajcy odnonik do niego tak,
eby byo moliwe jego pobranie z poziomu przegldarki.

You might also like