Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
PHP4. Od podstaw
Autorzy: Wankyu Choi, Allan Kent, Chris Lea, Ganesh
Prasad, Chris Ullman
Tumaczenie: Pawe Gonera, Piotr Rajca
ISBN: 83-7197-494-9
Tytu oryginau: Beginning PHP4
Format: B5, stron: okoo 780
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
PHP4 jest najnowszym wcieleniem PHP -- PHP Hypertext Preprocesor. Jest to jzyk
programowania przeznaczony do tworzenia dynamicznych, interaktywnych witryn
WWW, ktry zosta wymylony przez Rasmusa Lerdorfa przed rokiem 1994. Od tego
czasu zmieni si niezmiernie i jest teraz uywany przez programistw WWW na caym
wiecie. Czym wic tak naprawd jest? Mona go okreli technicznie jako przenony,
wbudowywany w HTML jzyk programowania skryptw serwera WWW. PHP4 moe
by wykorzystany w bardzo rnych rodzajach aplikacji, od uytkowych, jak edytor, do
wydajnych witryn typu sklep lub wyszukiwarka. W tek ksice sprbujemy przekaza
czytelnikowi wiedz na temat tworzenia witryn przy uyciu PHP4. Przedstawione
zostan uyteczne techniki kodowania i pomysy w jaki sposb mona ich uy we
wasnych aplikacjach. PHP moe by uyty do stworzenia witryn, ktre zna kady
uytkownik Sieci. Od witryn handlu elektronicznego do wyszukiwarek czy portali
informacyjnych. Wiele duych witryn WWW posiada niektre lub wszystkie te
mechanizmy. W tej ksice stworzymy midzy innymi:
edytor oparty na przegldarce pozwalajcy na tworzenie i edycj plikw na
serwerze przy uyciu przegldarki,
witryn dla sklepw pozwalajc na odszukanie towaru i wywietlenie graficznej
mapy odpowiedniego stoiska,
sieciow gr,
wyszukiwark WWW pozwalajc na wyszukanie witryny w katalogu lub
nawigacj przez struktur hierarchiczn,
usug list pocztowych pozwalajc uytkownikom na prenumerat listy
i pozwalajc administratorom na wysyanie poczty do subskrybentw.
"
"
"
"
"
O Autorach .......................................................................................................................................11
Wstp ..............................................................................................................................................13
Dlaczego PHP4? ...................................................................................................... 14
Znak zachty...................................................................................................... 15
Czego potrzebujesz, aby korzysta z ksiki? ............................................................. 15
Zasoby w sieci dotyczce PHP4................................................................................. 16
Konwencje .............................................................................................................. 16
PHP 4. Od podstaw
Rozdzia 4. Podejmowanie decyzji ..............................................................................................103
Wyraenia warunkowe lub rozgazianie ................................................................... 104
Przykad rozgaziania z ycia wzity ................................................................... 104
Instrukcja if...................................................................................................... 105
Wielokrotne warunki else i elseif ................................................................... 121
Instrukcja switch .............................................................................................. 130
Kontrola poprawnoci formularza ............................................................................ 134
Podsumowanie ...................................................................................................... 139
Spis tre/ci
PHP 4. Od podstaw
Kopiowanie, zmiana nazwy i usuwanie plikw...................................................... 339
Tworzenie edytora tekstu................................................................................... 342
Praca z katalogami................................................................................................. 350
Inne funkcje operujce na katalogach................................................................. 351
Przegldanie drzewa katalogw.......................................................................... 353
Tworzenie przegldarki katalogw ...................................................................... 354
Przesyanie plikw ............................................................................................ 359
czymy wszystko razem sieciowy edytor tekstu................................................... 362
Zasoby.................................................................................................................. 368
Podsumowanie ...................................................................................................... 368
Spis tre/ci
PHP 4. Od podstaw
Implementacja kodu............................................................................................... 611
Kod wsplny php_directory.inc....................................................................... 611
Skrypt uytkownika php_directory.php ............................................................ 656
Skrypt administracyjny dir_manager.php......................................................... 657
Informacje od uytkownikw.................................................................................... 680
Podsumowanie ...................................................................................................... 680
Dodatek A ODBC............................................................................................................................681
Czym jest ODBC?................................................................................................... 681
Czym ODBC nie jest? ............................................................................................. 683
PHP i ODBC........................................................................................................... 686
Nawizywanie poczenia ze rdem danych............................................................ 687
Wykonywanie polece SQL ..................................................................................... 687
Obsuga wynikw ................................................................................................... 688
Spis tre/ci
staymi,
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
35
36
PHP 4. Od podstaw
n
zmiennymi rodowiska.
36
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
37
Rysunek 2.1.
Kod bez adnego wyrnienia waciwie nie jest kodem. Jest to po prostu tekst. Nic
wicej na jego temat nie mona powiedzie.
Linie w ramce s znacznikami HTML. Znaczniki dowolnego typu s atwe do
rozpoznania, poniewa s oznaczane przez otwierajce i zamykajce nawiasy
trjktne. Nie jest to prawdziwy kod programu w tradycyjnym rozumieniu tego
okrelenia, dlatego do opisania kodu HTML uywamy sowa znacznik. Zakadamy, e
znasz HTML, wic nie bdziemy wicej mwi na ten temat.
Dodamy jeszcze, e wszystkie znaczniki HTML w tej ksice bdziemy pisa wielkimi
literami, mimo e jest to niezgodne ze standardem (standard HTML 4.0 okrela, e
wszystkie znaczniki powinny by pisane maymi literami). Robimy tak, poniewa nie
chcemy uywa cigle niewygodnego zaznaczania w caej ksice, a wszystkie
przegldarki i tak nie rozrniaj wielkoci liter w znacznikach.
Wszyscy, ktrzy znaj ju XHTML powinni wiedzie, e j*zyk ten, zgodny ze
standardem HTML 4.01 (najnowszy standard w XML), jest nietolerancyjny w wielu
aspektach, ktre przegldarki HTML najcz*ciej ignoroway. Oznacza to, e XHTML
nie pozwoli na uywanie znacznikw, ktre wyszy z uycia lub na nieprawidowe
zamykanie znacznikw. Wymaga rwnie pisania kodu HTML maymi literami. Do tej
pory nie ma popularnych przegldarek akceptujcych jedynie XHTML, wi*c nie
powinnimy obawia si* negatywnych skutkw zastosowania wielkich liter.
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
37
38
PHP 4. Od podstaw
Kod zaznaczony ciemnym tem jest skryptem PHP. Skrypt PHP jest rwnie
zaznaczony nawiasem trjktnym i znakiem zapytania. Za kadym razem, gdy
zobaczysz fragment tekstu ograniczony znacznikami i , powiniene wiedzie, e
cay tekst w rodku musi by skryptem PHP.
Jak wida na wynikowej stronie HTML, te trzy typy tekstu harmonijnie ze sob
wsppracuj, pomimo to skrypt PHP musi by przetworzony przez serwer WWW (ktry
moe by na innym komputerze ni twoja przegldarka).
na stronie bdcej wynikiem dziaania tego skryptu powiniene zobaczy napis
. Moesz zauway, e w naszym przykadzie na ekranie pojawia si data, a do
funkcji
przekazalimy jedynie funkcj
jest to druga
wykonywana czynno, ktr opiszemy za chwil.
PHP posiada ogromn bibliotek* zarezerwowanych sw zwanych funkcjami, ktre
su do realizacji wielu cz*stych zada2, takich jak zwracanie daty i czasu, wysyanie
poczty, wykonywanie wielu skomplikowanych operacji matematycznych lub
wstrzymywanie wykonania skryptu na kilka sekund. W dodatku B przedstawilimy
ca list* funkcji. Nie musisz zna ich wszystkich na pami*, ale wielu z nich
uyjemy w przykadach w tej ksice, a p5niej b*dziesz z nich stale korzysta.
Ostatnim elementem jest rednik. PHP wymaga, aby kada linia kodu (jak si
przekonamy, istniej nieliczne wyjtki od tej reguy) bya zakoczona rednikiem w
celu oznaczenia jej koca.
Zauwa, e sowo
nie byo otoczone cudzysowami. W naszym przykadzie
, otaczajc tekst do wywietlenia cudzysowami, wskazalimy PHP, e
chcemy wywietli go dokadnie w taki sposb, jak zosta napisany. W naszym
przypadku, niepodajc cudzysoww, nakazujemy PHP uycie funkcji
i
zwrcenie jej wyniku. Funkcja zwraca biecy czas w postaci czasu Greenwich.
Przedyskutujemy teraz dokadniej, jak dziaa funkcja
.
Pewnie zauwaye, e w naszym przykadzie wywietlamy dat w postaci:
38
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
39
#$$%&$$'
Jest jednak wiele innych formatw wywietlania daty. Moge, na przykad otrzyma
wynik w postaci:
#$%$$$()#$*
lub
+,#$*-.
S to prawidowe formaty dat, jednak PHP nie odrnia, ktrego formatu chcesz uywa
lub czy przypadkiem nie chcesz zastosowa cakowicie innej wersji. Musisz wic
wskaza, co ma zrobi i jest to realizowane przez sekcj zapisan w nawiasach i
cudzysowach po poleceniu . W naszym przykadzie podalimy, e na pocztku
daty ma by dzie, nastpnie miesic i rok. Wielko liter D, M i Y uytych w funkcji
jest rwnie znaczca. PHP interpretuje litery przedstawione w tabeli 2.1. w rny
sposb.
Tabela 2.1.
Znak
Wynik
Przyrostek dla liczebnikw w jzyku angielskim jako dwa znaki, na przykad , +.
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
39
40
PHP 4. Od podstaw
"
Jest to dosy obszerna lista. Nie bdziemy umieszcza takiej tabeli w tekcie za kadym
razem, gdy przedstawiamy now funkcj. Czasami bdziesz musia odszuka potrzebne
Ci informacje w dodatkach. Moemy rwnie zmieni nasz poprzedni przykad na:
40
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
41
Klient-serwer
Termin ten dobrze opisuje sposb dziaania, okrelajc zadania dystrybucji. Serwer
(serwer WWW) przechowuje, interpretuje i rozsya dane, natomiast klient (przegldarka)
czy si z serwerem w celu uzyskania danych. Od tej pory, jeeli uyjemy okrelenia
klient, bdziemy mieli na myli przegldark. Jak si okae w pniejszych rozdziaach,
termin klient-serwer jest uproszczeniem procesu to nieco abstrakcyjny opis
rzeczywistoci. Aby zrozumie szczegy, musimy krtko opisa sposb dziaania samego
Internetu.
Protokoy internetowe
Nie chcemy opisywa tu caej historii Internetu, najwaniejsze, e jest to sie poczonych
ze sob komputerw. Internet zosta zaprojektowany do przenoszenia danych z jednego
miejsca do drugiego. Do tego celu uywa zestawu protokow sieciowych (znanych jako
TCP/IP).
Protok sieciowy jest metod opisu pakietw danych przesyanych pomi*dzy
w*zami przez sie telefoniczn, kablow bd5 lini* T1.
Jedn z zalet protokou TCP/IP jest to, e mona szybko zmieni tras przesyania
danych w przypadku awarii lub spowolnienia jednego z segmentw sieci. Gdy
uytkownik zamierza pobra za pomoc przegldarki stron WWW, przegldarka
realizuje to polecenie przy uyciu protokou o nazwie Transmission Control Protocol
(TCP). TCP jest protokoem transportowym, zapewniajcym niezawodny format
transmisji dla tego typu da. Zapewnia, e cay komunikat zostanie poprawnie
przeksztacony na posta odpowiedni do transmisji ( oczywicie prawidowo
rozpakowany i poczony po dotarciu do miejsca przeznaczenia). Protok sieciowy
TCP/IP jest metod opisu pakietw danych, ktre s przesyane midzy wzami za
pomoc linii telefonicznej, kablowej lub linii T1.
Zanim dane zostan podzielone w celu wysania w sie, musz otrzyma odpowiedni
adres. Drugi z protokow sieciowych, HyperText Transfer Protocol (HTTP), nakleja
na pakiety etykietki adresowe, aby TCP/IP odpowiednio kierowa dane. HTTP jest
protokoem uywanym przez sie WWW do przesyania danych midzy komputerami.
Jeeli zobaczysz adres URL rozpoczynajcy si od http://, powiniene wiedzie, e
korzysta on z protokou HTTP. Mona rwnie porwna TCP/IP do poczty, ktra
zajmuje si przesyaniem przesyek, natomiast HTTP do znaczka i adresu na kopercie,
ktre zapewniaj, e dotrze ona do miejsca przeznaczenia.
Komunikat przesany z przegldarki do serwera WWW jest nazywany daniem HTTP.
Gdy serwer odbierze takie danie, sprawdza, czy posiada odpowiedni stron. Jeeli
znajdzie j, dzieli na fragmenty zawarty w niej kod HTML (uywajc TCP), kieruje te
fragmenty poprzez sie na adres przegldarki (za pomoc HTTP). Jeeli serwer WWW
nie znajdzie odpowiedniej strony, pobiera stron zawierajc komunikat bdu (w tym
przypadku zowrogi Error 404: Strona nie zostaa odnaleziona), dzieli j i odsya do
przegldarki. Komunikat przesany z serwera WWW do przegldarki nazywamy
odpowiedzi HTTP. Poniej mamy schemat opisanego przed chwil procesu.
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
41
42
PHP 4. Od podstaw
Rysunek 2.2.
Protok HTTP
Opucilimy sporo szczegw technicznych, wic teraz dokadniej opiszemy, jak dziaa
protok HTTP. Gdy do serwera zostanie wysane danie przesania strony WWW,
zawiera ono co wicej ni tylko interesujcy nas URL. Wraz z daniem przesyamy
sporo dodatkowych danych. Dzieje si tak rwnie w przypadku odpowiedzi serwer
wysya dodatkowe dane do przegldarki. W nastpnej czci rozdziau zajmiemy si
rnymi rodzajami dodatkowych danych przekazywanych wraz z waciwymi.
Wiele danych przesyanych w komunikacie HTTP generuje si automatycznie i
uytkownik nie ma na to bezporedniego wpywu, wic nie musisz si przejmowa ich
wysyaniem. Mimo e nie musisz ich tworzy, s one dla nas wane, poniewa skrypt
PHP moe korzysta z tych danych i dziki temu mamy bezporedni wpyw na ich
posta.
Kady komunikat HTTP ma ten sam format (niezalenie, czy jest on daniem klienta czy
odpowiedzi serwera). Moemy wyrni w nim trzy czci: linia dania/odpowiedzi,
nagwek HTTP i tre HTTP. Zawarto tych czci zaley od tego, czy komunikat
jest daniem czy odpowiedz HTTP oba te przypadki omwimy osobno.
Narysujmy teraz schemat tego procesu.
42
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
43
Rysunek 2.3.
Moemy zobaczy, e danie i odpowied HTTP maj bardzo podobn struktur i wiele
danych jest identycznych dla obu czci nagwka HTTP. Fragmenty informacji, ktre
przeznaczone s tylko dla serwera lub tylko dla przegldarki s wysyane jedynie jako
cz dania bd odpowiedzi, wic sensowne bdzie dokadne przeanalizowanie ich
czci skadowych.
danie HTTP
Przegldarka wysya do serwera WWW danie HTTP, ktre zawiera nastpujce
elementy.
Linia dania
Pierwsza linia kadego dania HTTP jest lini dania, ktra zawiera nastpujce dane:
n
Uywana metoda wskazuje serwerowi, w jaki sposb ma obsuy danie. Istniej trzy
podstawowe metody uywane w tym polu.
Tabela 2.2.
Metoda
Opis
3;
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
43
44
PHP 4. Od podstaw
czymkolwiek, od strony HTTP lub PHP do wyniku dziaania programu JavaScript
lub PerlScript czy dowolnego innego programu. Moesz wysa do serwera ograniczon
ilo danych w postaci rozszerzenia adresu URL.
;*
Jest to taka sama metoda jak 3;, poza tym, e wskazuje na danie tylko nagwek
HTTP bez doczonych danych.
/6
Istnieje wiele innych metod obsugiwanych przez HTTP , , !", "#$$"
i #%#$&. S one jednak duo rzadziej stosowane i dlatego wykraczaj poza ramy tej
ksiki. Jeeli chcesz dowiedzie si wicej na temat tych metod, przeczytaj RFC 2068
dostpne na serwerze http://www.rfc.net.
Nagwek HTTP
Nastpn czci danych jest nagwek HTTP. Zawiera on dane na temat typw
dokumentw, jakie klient akceptuje w odpowiedzi na danie, typ przegldarki
wysyajcej danie, dat i inne dane konfiguracyjne. Nagwek dania HTTP zawiera
dane, ktre mog by zakwalifikowane do jednej z trzech kategorii.
n
Oglne: zawieraj informacje na temat zarwno klienta, jak i serwera, ale nie s
specyficzne dla adnego z nich.
Jak mona zauway, nagwek HTTP skada si z kilku wierszy. Kady z wierszy zawiera
opis fragmentu danych nagwka HTTP oraz jego warto.
Istnieje wiele rnych rodzajw linii, z ktrych moe skada si nagwek HTTP,
wikszo z nich jest opcjonalna, wic HTTP musi wskazywa, kiedy koczy przesyanie
danych nagwka. Do tego celu uywana jest pusta linia. W HTTP 1.1 danie musi
zawiera lini dania i nagwek '#&.
Tre HTTP
Jeeli w linii dania HTTP zostaa uyta metoda POST, tre dania HTTP zawiera
wszystkie dane wysane do serwera, na przykad dane, ktre uytkownik wpisa do
44
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
45
Odpowied HTTP
Odpowied HTTP jest odsyana z serwera do klienta i zawiera nastpujce skadniki.
Linia odpowiedzi
Linia odpowiedzi zawiera tylko dwie dane:
n
kod dania HTTP, ktry wskazuje na udane lub nieudane wykonanie dania.
W tym przykadzie zwracany jest kod status HTTP 200, ktry jest odpowiednikiem
komunikatu #(. Oznacza on, e danie zostao prawidowo przetworzone i odpowied
zawiera odpowiedni stron lub dane z serwera. Przypomnij sobie, e kilka stron wstecz
wspominalimy o kodzie statusu 404 linia odpowiedzi zawiera kod 404, jeeli serwer
nie znajdzie danego zasobu. Istnieje pi klas odpowiedzi, wymienionych w tabeli 2.3.
Nagwek HTTP
Nagwek odpowiedzi HTTP jest podobny do opisanego przed chwil nagwka dania.
W przypadku odpowiedzi HTTP dane zawarte w nagwku s trzech rodzajw.
Tabela 2.3.
Klasa kodw
Opis
100 199
200 299
300 399
400 499
500 599
Oglne: zawieraj informacje na temat zarwno klienta, jak i serwera, ale nie s
specyficzne dla adnego z nich.
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
45
46
PHP 4. Od podstaw
n
Tak jak poprzednio nagwek skada si z kilku linii i korzysta z pustej linii oznaczajcej
koniec danych nagwka. Poniej zamieszczamy przykad nagwka, a po prawej stronie
kadej linii znajduje si jej nazwa:
/'<'&$$@
=+,'5KA'(((,'9='&=
linia statusu
nagwek oglny
nagwek odpowiedzi
nagwek jednostki
Na temat pierwszej linii ju pisalimy, na temat drugiej nie mamy nic do powiedzenia.
W linii trzeciej, &)*), okrelamy typ uruchomionego serwera WWW. Czwarta zawiera
dat ostatniej modyfikacji strony, ktr wanie cigamy.
Nagwek moe zawiera wiele wi*cej danych ni przytoczone tutaj, w zalenoci od
rodzaju danych danych. Jeeli chcesz dowiedzie si* wi*cej na temat wszystkich
typw informacji, jakie mog znajdowa si* w trzech cz*ciach nagwka,
znajdziesz je w dokumencie RFC 2068 (Cz*ci 4.5, 7.1 i 7.2).
Tre HTTP
Jeeli udaa si realizacja dania, tre odpowiedzi HTTP zawiera kod HTML (wraz
z wszystkimi skryptami, jakie bdzie moga wykona przegldarka), ktry bdzie
interpretowany przez przegldark.
Teraz wiemy ju, w jaki sposb przegldarka wysya dania i jak serwer WWW odsya
strony do przegldarki. Podsumujmy 6-stopniowy proces dostarczenia strony WWW.
46
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
47
Rysunek 2.4.
Serwer WWW odszukuje dan stron WWW (krok 3.) i, jeeli jest to strona PHP, musi
przetworzy kod PHP w celu wygenerowania HTML, ktry nastpnie jest przesyany do
przegldarki (krok 4.). Jeeli nazwa strony jest zakoczona .php, serwer przesya j
w celu przetworzenia do maszyny skryptowej PHP (podczonej do serwera).
Do tej pory przestudiowalimy wiele niezbdnych aspektw otaczajcych PHP, ale nasza
wiedza na temat samego dziaania PHP jest raczej oglnikowa. Dla uproszczenia
traktowalimy PHP jak maszyn do produkcji parwek serwer WWW napycha j z
jednej strony surowym kodem PHP, a z drugiej strony wychodzia adnie zapakowana
strona HTML czas odtajni ten proces.
Jak ju wspominalimy, strony PHP skadaj si z tekstu, znacznikw HTML i skryptw
PHP. Programy, ktre wpisujesz na strony HTML, nazywane s skryptami. Sam HTML
nie moe by nazwany jzykiem programowania poniewa, oprcz wywietlania
statycznego tekstu i obrazkw, posiada bardzo ograniczone moliwoci, dlatego
niezbdne stao si pisanie kodu w innych jzykach, pozwalajcych zrealizowa
dodatkowe funkcje, nazywanych jzykami skryptowymi. Istnieje wiele jzykw
skryptowych i by moe znasz ju kilka, na przykad JavaScript. Jednak tym, co
odrnia PHP od JavaScript czy prostego kodu HTML jest to, e jest wykonywany na
serwerze, a nie w przegldarce.
HTML pozwala na doczanie skryptw w (prawie) dowolnym miejscu kodu HTML
robi to, dostarczajc standardowych sposobw doczania skryptw, o czym za chwil.
Gdy serwer otrzyma danie wysania strony i generowany bdzie kod HTML, kady
skrypt na stronie jest przesyany do maszyny skryptowej w celu interpretacji i
wygenerowania odpowiedniego kodu HTML.
Skrypty s podstaw PHP! Uywamy ich do napisania instrukcji pozwalajcych na
dynamiczne tworzenie stron. Istnieje wiele zalet dynamicznego tworzenia stron, mona
prezentowa informacje wygenerowane w oparciu o dane przekazane w formularzu,
mona zmienia posta stron dla rnych przegldarek, mona personalizowa strony i
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
47
48
PHP 4. Od podstaw
korzysta z ustawie uytkownika oraz wiele, wiele innych. Wszystko jest oparte na tym,
e skrypt musi zosta zinterpretowany w czasie, gdy zostanie wywoany.
Skrypty serwera
W jaki sposb zmienia si sposb przetwarzania strony na serwerze po wprowadzeniu
skryptw? W wikszej czci naszego modelu wedug ktrego przegldarka czy si do
serwera WWW, wysyania dania, uzyskuje odpowied i interpretuje otrzymany HTML
tak, aby uzyska wynikow stron, nie zachodz adne zmiany.
Jedyna zmiana zachodzi w czasie przygotowania strony wysyanej do przegldarki, gdy
serwer napotka na skrypt. Pierwszym zadaniem serwera jest identyfikacja maszyny
odpowiedzialnej za interpretacj tego skryptu. Jest to wany punkt, poniewa w czasie
pisania skryptu wybieramy, czy zostanie on wykonany na serwerze lub w przegldarce.
Sprecyzujmy te rnice.
n
Strona HTML jest interpretowana przez przegldark. HTML nie jest przetwarzany
przez serwer WWW. Jest wysyany do przegldarki (jako cz odpowiedzi HTTP)
i tam interpretowany. Wyniki interpretacji widzimy w oknie przegldarki.
48
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
49
Wszystko, co jest zawarte pomidzy a , jest traktowane jako kod PHP i wysyane
do maszyny skryptowej PHP w celu przetworzenia. Po interpretacji do przegldarki
zwracany jest HTML i, jeeli skorzystasz z opcji przegldarki rdo, powiniene
zobaczy, e nasz program zwrci czysty kod HTML:
LF2-F2+MN
&9#+
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
49
50
PHP 4. Od podstaw
W przypadku uywania PHP na serwerze do przetwarzania stron, istnienie pamici
podrcznej staje si znaczce. Jeeli wykorzystasz zapamitan stron z poprzedniego
wykonania, nie skorzystasz z dynamicznego kodu HTML i zwracane dane mog by
nieprawidowe. Moesz to zauway, jeeli uyjesz przycisku przegldarki Wstecz,
przechodzc przez kilka stron PHP. Czasami nie pomaga nawet naciskanie przycisku
Odwie, bufor nie jest odwieany i strona wywietla si nieprawidowo, poniewa
przegldarka nie ma informacji o zmianach. W takim przypadku naley wymusi
odwieenie strony. W Internet Explorer 5 naley nacisn klawisze Ctrl+F5, natomiast
w Netscape Navigator nacisn Shift i klikn przycisk Reload.
Jest to wane, poniewa w przypadku uruchamiania przykadw moesz otrzymywa te
same wyniki, pochodzce z poprzedniego uruchomienia skryptu, ktre przegldarka moe
pobra z bufora. Jeeli dostajesz niezrozumiae wyniki upewnij si, e przegldarka pobiera
now stron. Mona to zrobi, wymuszajc odwieenie lub zmieniajc ustawienia
przegldarki.
Istniej nagwki HTTP uywane do zabezpieczania strony przed przechowywaniem
w pami*ci podr*cznej. Ponisze 3 linie kodu PHP (jeeli uyjesz ich na pocztku
skryptu) zabezpieczaj przed zapami*taniem strony przez Internet Explorer lub
Netscape Navigator. Mona posuy si* tym sposobem, aby zabezpieczy si* przed
nieprzewidzianymi wynikami lub w przypadku, gdy jeste zm*czony wielokrotnym
odwieaniem dokumentu.
-?)?+-.=+),25)-A.
-/-=+)
-;B-5=+,&912.'((H$4=$$=$$3
50
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
51
Mamy tutaj zoon nazw zmiennej .
13456)447417
, ale oprcz tego nie
rni si ona zbytnio od poprzedniego przypisania. Jedyn rnic jest to, e zmienne
numeryczne nie s objte cudzysowami. Wskazuje to PHP, e maj by traktowane jako
warto numeryczna. Nie ma adnych innych wymaga, aby PHP traktowao warto
jako liczb.
Po utworzeniu zmiennej moesz jej dowolnie uywa w programie. W celu wywietlenia
wartoci na ekranie moesz uy naszej znajomej funkcji
w nastpujcy sposb:
O2-
Powysze dwie linie tworz dwie rne zmienne, jedn o nazwie .0) i drug o nazwie
.!0). Te dwie zmienne maj dwie rne wartoci i s tak samo rne jak te, ktrych
uyjemy w poniszym kodzie:
O5."+P2-P+.5FG ..6F5-
O5."+P2-P-.+FG151
Dosy czsto zdarza si, e przy wypisywaniu wartoci zmiennej na stronie przypadkowo
uyjemy pierwszej wielkiej litery tam, gdzie jej nie powinno by. Jeeli masz zamiar
skorzysta z jednej tylko zmiennej, powiniene uy nastpujcego kodu:
O2-G ..6F5-
O2-G151
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
51
52
PHP 4. Od podstaw
Pierwsza linia ustawia warto zmiennej .0) na
11
&23), natomiast
druga zmienia cakowicie zawarto .0) na -3-5. W tym przykadzie kodu
utworzona i uywana jest tylko jedna zmienna.
Teraz zajmiemy si maym przykadem, w ktrym tworzymy zmienn i wywietlamy jej
warto na stronie WWW.
Jak to dziaa?
Waciwy kod skada si jedynie z dwch linii. W pierwszej
O-G-.+-+
Jak wida, wysyajc zawarto zmiennej .) na stron WWW, nie uywalimy
cudzysoww. Jeeli jednak uyjemy takiej linii:
52
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
53
O-
na ekranie nadal bdziemy widzieli napis <)17 ,)7. Aby PHP nie podstawiao
wartoci zmiennych, musisz zamiast cudzysoww skorzysta ze znakw apostrofu.
Majc dowiadczenie tylko z Windows, poczujesz si* nieco zagubiony. Moesz
spodziewa si*, e powysza linia wywietli tekst .). Autorzy, piszc PHP,
zapoyczyli niektre elementy Perla i skryptw powoki Unix, a w tych skryptach
uycie znaku dolara nadpisuje znaki cudzysoww. Aby wywietli znak dolara z
nast*pujc po nim liter (lub literami), musisz stosowa inne metody, ktrymi
zajmiemy si* w kolejnych rozdziaach.
Typy danych
Jak wspominalimy wczeniej, skupimy si na dwch typach zmiennych, zawierajcych
wartoci numeryczne i cigi znakw. Istnieje jeszcze kilka innych typw zmiennych
uywanych przez PHP, nazywanych typami danych, takich jak tablice, obiekty, jednak
ich szczegowy opis znajdzie si w pniejszych rozdziaach. Pena lista typw danych
w PHP jest nastpujca:
n 3)
7
(tekst),
n
7)
n 0=1
n ))5
(liczby),
(liczby),
(tablice),
n =,
n
typ nieokrelony.
Typy danych nie s ustawiane przez programist, to PHP decyduje za ciebie, w trakcie
interpretacji strony, jaki powinien by typ zmiennej i odpowiednio go ustawia. Te typy
danych, uywane przez PHP, oznaczaj rne rodzaje przechowywanych danych i
definiuj rne zestawy operacji, jakie mona na tych danych wykona.
Nie ma znaczenia, e druga z wartoci jest czysto numeryczna, jeeli zostaa podana
w cudzysowach, automatycznie staje si cigiem. Jeeli jaka warto zostanie zapisana
w postaci cigu, a nastpnie wykonasz na niej operacje matematyczne, PHP dokona
konwersji typu zmiennej na typ numeryczny. W wyniku tego dodawanie cigw, ktre
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
53
54
PHP 4. Od podstaw
maj warto numeryczn, moe doprowadzi do nieoczekiwanych wynikw. Cigi maj
wasn operacj dodawania, jest nazywana czeniem (konkatenacj).
czenie cigw
czenie cigw to proces dodawania jednego cigu do drugiego, to znaczy doczania
jednego cigu na kocu drugiego. Do tego celu uywa si operatora zczenia + (kropka).
Wynikiem dziaania poniszej linii jest cig "
11>+?, zakadajc wartoci
zmiennych, takie jak w poprzednim przykadzie.
O?-GO?-<O;++6
W naszym przykadzie nie ma odstpu pomidzy czonymi cigami, co moe nie podoba
si projektantom. Utwrzmy wic zmienn, ktra bdzie przechowywaa znak spacji.
O6G
Powiniene zauway, e rni si ona nieco od pustego cigu. Pusty cig nie zawiera nic,
natomiast cig ze spacj zawiera jeden znak. Spacje mog by oczywicie czone z
innymi cigami w taki sam sposb, jak inne teksty.
O?-GO?-<O6<O;++6
Na ekranie otrzymamy "
11. Daje to moliwo uywania nazw zmiennych razem
z tekstem, aby w wyniku otrzyma poczenie tych tekstw.
O?-*+-!
Linia ta spowoduje wypisanie cigu "
11 !7)A. Istniej jednak puapki, o
ktrych naley pamita. Po pierwsze, znakw sterujcych mona uywa pomidzy
54
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
55
To moe by dla ciebie oczywiste chcesz uy zmiennej ."), a nie .")3, jednak
w jaki sposb zasygnalizowa to PHP? Tak naprawd PHP bdzie szukao zmiennej
.")31. Aby uzyska interesujce nas dziaanie, naley uj nazw zmiennej w nawiasy
klamrowe.
@.F+!2E-!
QOR?-S5.
Wynik to odpowiednio 22 i 2.2! Troch oszukiwalimy, poniewa adna z cyfr nie bya
umieszczona w apostrofach, wic nie s to tak naprawd cigi. Jednak problem nadal
wystpuje, poniewa liczba 2 zostaa potraktowana przez operator zczenia jak cig
znakw. Aby PHP potraktowao liczb jak cig, wystarczy doda odstp pomidzy t
liczb a operatorem zczenia. Naley zapamita, e w niektrych przypadkach sposb
umieszczania odstpw w kodzie moe wpyn na wygld tworzonej strony.
Czas zobaczy w dziaaniu niektre z omwionych moliwoci PHP. Utwrzmy kilka
cigw wraz z ich wartociami i przy uyciu funkcji
wywietlmy je na stronie
WWW.
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
55
56
PHP 4. Od podstaw
Rysunek 2.6.
Jak to dziaa?
Zajmowalimy si ju podobnym fragmentem kodu. Pierwsze trzy linie tworz trzy
zmienne .")5, .7
7&
A oraz .& i przypisywane s im rne wartoci.
O?-G/+
O;++6G#<$
O6G
Skutkiem tego wynik jest dwukrotnie powtrzony, ale nie ma odstpu pomidzy dwoma
zmiennymi ."). Wyglda to niezbyt adnie, ale chcielimy w ten sposb pokaza, e jest
moliwe czenie zmiennej z sam sob.
To nie dziaa!
Jeeli zobaczysz tekst podobny do Parse error in C:\Program Files\Apache Group\
Apache\htdocs\string.php on line n, prawdopodobnie zapomniae umieci rednik na
kocu linii. Jeeli widzisz jedynie cz wyniku pokazanego na rysunku, prawdopodobnie
pomylie si w nazwie zmiennej lub zmienie wielko jednej z liter nazwy zmiennej.
Upewnij si, e nazwy i wielkoci liter s poprawne dla wszystkich zmiennych uytych
w tym przykadzie. Jeeli tak si stao, przypadkowo utworzye now pust zmienn.
56
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
57
Powiniene wydedukowa z powyszych linii, e kada liczba cakowita staje si automatycznie liczb
7), natomiast liczby z uamkami s zapamitywane jako typ 0=1.
Te dwa typy danych maj rwnie rne zakresy wartoci, ktre zale jednak od
systemu operacyjnego i platformy, na ktrej dziaa PHP, na przykad PHP na Windows
98 moe przechowywa liczby
7) od 32768 do 32767. Typ 0=1 na tej samej
maszynie ma zakres od 1.79769313486232E308 do 4.940656458412E-324 (dla
liczb ujemnych) i 4.940656458412E-324 do 1.79769313486232E308 (dla liczb
dodatnich) oraz warto zero.
Notacja E (wykadnicza) przytoczona tutaj jest metod, ktrej PHP i praktycznie
kady inny j*zyk programowania uywa do zapisu bardzo maych i bardzo duych
liczb. Liczba jest zapisywana jako liczba bazowa pomnoona przez dziesi*
podniesione do pot*gi okrelonej drug liczb. Na przykad 2.5E3 to zapis 2.5*103
lub 2500.
To, co rni PHP od innych jzykw programowania, to o wiele mniejsza ilo typw
danych. Istniej tylko dwa typy numeryczne. Upraszcza to tworzenie programw i zwykle
atwo jest okreli, kiedy potrzebujemy liczb cakowitych, a kiedy liczb z przecinkiem.
Dziaanie
Operator dodawania.
Operator mnoenia.
Operator dzielenia.
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
57
58
PHP 4. Od podstaw
Ich uycie jest cakowicie intuicyjne. Dla przykadu uyjemy operatora dodawania do
podliczenia wartoci paragonu w sklepie.
O?.EG'<4
O.FG$<7
O62GO?.ETO.F
Warto zakupw jest sum wartoci zmiennej ."1= i .<12. Po wykonaniu operacji
zmienna .&0 ma warto >+E. Inne operatory dziaaj w ten sam sposb. Jeeli
chciaby kupi dwa bochenki chleba, kod obliczajcy warto zakupw jest
nastpujcy:
O?.EG'<4
O62GO?.E>&
Nie oznacza to, e .&0 jest rwna .&0 8 ."1=, z czego wynika, e ."1= jest
rwny @. Znak rwnoci w tym przypadku jest operatorem przypisania, a wyraenie to
oznacza, e do zmiennej .&0 jest przypisywana STARA warto .&0 powikszona
o warto zmiennej ."1=. Ponisza linia
O62GO62T'
powoduje powikszenie o jeden wartoci zmiennej .&0. Istnieje rwnie skrcony zapis
operacji zwikszenia o jeden.
O62TT
Efekt dziaania tej linii jest identyczny jak poprzedniej. Innym skrconym operatorem
jest:
O62TG&
58
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
59
Priorytety
Proste operacje matematyczne rzdz si tymi samymi zasadami kolejnoci wykonywania
dziaa, jakich uywamy w matematyce. Ponisze wyraenie moe da rne wyniki
w zalenoci od kolejnoci wykonywania operacji.
O62G4T#>9
Jeeli obliczymy je w takiej kolejnoci, w jakiej jest zapisane, otrzymamy wynik 48.
Jednak, stosujc matematyczn kolejno wykonywania operacji, w ktrej mnoenie
wykonywane jest przed dodawaniem, otrzymasz 23. Jasne jest, e musisz mie dostp do
metody pozwalajcej okreli kolejno wykonywania operacji.
Tak jak w matematyce, PHP uywa nawiasw do wymuszenia kolejnoci wykonywania
operacji. Jeeli chcesz si upewni, e w ostatnim przykadzie dodawanie bdzie
wykonane przed mnoeniem, musisz doda nawiasy:
O62G4T#>9
Typy numeryczne
1. Otwrz edytor i wpisz nastpujcy kod strony:
O6.-G'4$$$
OBCG&$
O/+5+G#
OD-/+5+J+GO6.-)O6.-'$$>OBC
O*D-/+5+J+GOD-/+5+J+)
OD-/+5+J+'$$>O/+5+
/--L++D2+25-.+=OD-/+5+J+C
/-L+2+D2+25-.+=O*D-/+5+J+
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
59
60
PHP 4. Od podstaw
Jak to dziaa?
Kod jest dosy prosty. W pierwszej linii tworzymy zmienn z pensj i ustawiamy j na
F@@@:
O6.-G'4$$$
W drugiej linii tworzymy zmienn .G i nadajemy jej warto >@:
OBCG&$
60
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
61
Naley rwnie pamita o umieszczaniu rednikw na kocu kadej linii. Bez nich
program spowoduje wygenerowanie komunikatu bdu.
Stae
Do tej pory zajmowalimy si obiektami, ktre moglimy zmieni po przypisaniu wartoci.
W poprzednich przykadach utworzylimy zmienn .!0) zainicjowan wartoci
11
&23), ktra moga by zmieniana w dowolnym momencie, na przykad
na ')7<1*
11.
O*2-G ..6F5-
O*2-
O*2-G-+.A..
O*2-
Co zrobi, jeeli nie chcemy, aby moliwa bya zmiana wartoci? Niektre wartoci nie
wymagaj modyfikacji.
O-2-:-+G$
O +K..5G%.
O/-"5/-+G3- 5++
Moesz chcie rwnie zdefiniowa wartoci, ktre nie s bezwzgldnie niezmienne, ale
nie chcemy ich zmienia.
O8.2E+ -2+K0G;.5
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
61
62
PHP 4. Od podstaw
W tym przypadku nie chcesz, aby kto inny zmienia wartoci w kodzie, powodujc
powstawanie bdw. PHP posiada specjalne udogodnienie, ktre pozwala na tworzenie
identyfikatorw, ktrych wartoci nie mog by zmieniane. Identyfikatory te nazywaj
si staymi. Pozwalaj tworzy zmienne i przypisywa do nich wartoci, ktrych nie
mona zmieni. Sposb tworzenia staych jest nieco inny od normalnego tworzenia
zmiennych.
Przyjte jest, aby nazwy staych zapisywane byy wielkimi literami. Pierwsza warto
jest nazw staej, natomiast druga, wartoci staej. Aby utworzy stae zawierajce
wartoci tekstowe, naley umieci warto staej w cudzysowach.
D+ :J;KKJ;/ ;36?J,%.
D+/J;C 6:
/C;:
;K,3- 5++
Stae mog by uywane w identyczny sposb jak zmienne. Moemy wic wywietli
jej warto na stronie WWW za pomoc funkcji
.
U+.N
!5< :J;KKJ;/ ;36?J
Moemy dodawa stae do tekstu, uywajc operatora zczenia. Jednak istnieje jedna
rnica wynikajca z tego, e stae nie s poprzedzone znakiem dolara. PHP nie moe
odrni ich od zwykego tekstu w procesie zamiany nazw zmiennych na ich wartoci.
U+.N
!5 :J;KKJ;/ ;36?J
Inicjalizacja
Kady, kto zna inne jzyki programowania poza PHP, powinien w tym miejscu poczu
si nieco zdezorientowany. Omwilimy ju przecie zmienne, a w wikszoci jzykw
programowania, w przypadku zmiennych, na pocztku przeprowadza si proces zwany
62
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
63
Powyszy kod nie jest kodem PHP i b*dzie dziaa jedynie w Visual Basic.
W PHP nie musimy tego robi. Nie jest to wymagane, bo w rzeczywistoci pierwsze
uycie zmiennej powoduje jej automatyczne utworzenie.
O+":++G?
Q
Powyszy kod nie jest kodem PHP i b*dzie dziaa jedynie w Visual Basic.
W PHP nie mona wykona takiej operacji. Moe to prowadzi czasami do problemw
co bdzie, jeeli PHP nada zmiennej typ danych, ktrego nie chcesz? Co stanie si,
jeeli bdziesz chcia zmieni typ danych w trakcie oblicze? Na przykad moesz
pobiera od uytkownika jakie dane w rodzaju marki i wielkoci silnika jego
samochodu, zamy, e jest to Volkswagen Golf 2.0CL. Powinny by one traktowane
jak tekst. Nastpnie chcemy wyci z tego napisu wielko silnika i uy jej jako liczby
w obliczeniach matematycznych. Moesz wymyli wiele takich przypadkw.
W podobnych sytuacjach musisz umie konwertowa typy danych zmiennej.
Konwersje
PHP posiada spory zestaw wbudowanych funkcji pozwalajcych na konwersje typw
danych oraz funkcji, ktre pozwalaj zorientowa si, jaki typ zosta nadany zmiennej.
Tak naprawd PHP oszczdza wiele pracy, poniewa wikszo niezbdnych konwersji
przeprowadza za Ciebie. Jest to kolejne miejsce, gdzie PHP rni si cakowicie od
wikszoci jzykw programowania, ktre zwykle pozwalaj na przeprowadzanie operacji
jedynie na zmiennych o tych samych typach. W PHP moesz wykona nastpujc
operacj:
O;++G&<$
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
63
64
PHP 4. Od podstaw
OBCG#
OB/GO;++>OBC
Nie zmienia to zawartoci adnej ze zmiennych. Aby przekona si, e wszystko jest
w porzdku, uruchom ten przykad.
Niejawne konwersje
1. Otwrz edytor i wpisz nastpujcy kod:
O;++G&<$
OBCG#
OB/GO;++>OBC
5.+F=O;++C
6F2=OBCC
-
QF2=OB/
Jak to dziaa?
Jest to przykad bardzo podobny do poprzedniego pokazujcego operacje matematyczne.
W pierwszych trzech liniach tworzone s trzy zmienne. Pierwsza z nich, .7
75 jest
cigiem:
O;++G&<$
64
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
65
OBCG#
W trzeciej linii przeprowadzamy nasze obliczenia, mnoc zmienn .7
75 i .G
, a wynik zapisujc do zmiennej .G
:
OB/GO;++>OBC
Rzutowanie typw
Do tej pory PHP sam przeprowadza konwersje typw, ale gdy chcesz okreli typ
zmiennej w czasie jej tworzenia, rwnie moesz to zrobi. Zrealizujesz to przez
przypisanie do zmiennej wasnej wartoci i okrelenie danego typu poprzez podanie
jego nazwy w nawiasach przed drugim wystpieniem nazwy zmiennej. Operacja taka
nazywana jest rzutowaniem.
OK":++G'#
OK":++G5-+OK":++
gettype i settype
Wspominalimy o funkcjach PHP pozwalajcych sprawdzi biecy typ danych zmiennej.
Funkcja taka nazywa si 5
.
Jako argument funkcji podajemy nazw zmiennej do sprawdzenia.
O+2-
Aby wywietli typ zmiennej, przekaemy wynik dziaania tej funkcji do funkcji
.
O+2-G4
O+2-
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
65
66
PHP 4. Od podstaw
pozwala na okrelenie typu zmiennej. Wymaga ona dwch argumentw: zmiennej,
ktrej typ ustawiamy i nazwy typu, na ktry zmieniamy zmienn. Dziaa ona
nastpujco:
O+2-G'$
5O+2-,5-+
Aby pokaza, e typ zmiennej uleg zmianie, moesz wywietli na ekranie warto
zwracan przez 5
.
O+2-
Przed jej uyciem upewnij si, czy wiesz co robisz, poniewa funkcja ta usuwa zarwno
nazw zmiennej, jak i jej warto.
Ostatni z trzech przedstawianych funkcji jest 5
, logiczna odwrotno funkcji
33
. Uywa si jej identycznie jak
33
. Zwraca 1, jeeli zmienna nie istnieje lub
ma warto 0 albo "" (pusty cig). Funkcja nie zwraca adnej wartoci, jeeli zmienna
istnieje.
O+2-
Zmienne rodowiska
Zmienne rodowiska (nazywane rwnie zmiennymi PHP) to takie, ktrych warto
ustawiana jest poza skryptem PHP, ale s w nim dostpne. Dostarczaj zwykle danych
na temat komunikacji klient-serwer, ktr opisywalimy we wczeniejszej czci tego
rozdziau.
66
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
67
Mog to by dane na temat dania lub odpowiedzi HTTP. Maj taki sam format, jak
zmienne tworzone przez Ciebie, zawieraj na pocztku znak dolara. Jedyn rnic jest
to, e s utworzone przed rozpoczciem wykonywania skryptu bez adnej interwencji ze
strony uytkownika. Moesz obejrze te zmienne w wyniku dziaania funkcji
76
,
uytej w pierwszym rozdziale.
Moesz rwnie odwoywa si do nich za pomoc, na przykad funkcji
:
O/P?@J;P **
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc
67
68
PHP 4. Od podstaw
si z niektrymi narzdziami PHP pozwalajcymi wykona podstawowe manipulacje
tymi informacjami. Na koniec krtko opisalimy zmienne rodowiska.
68
C:\Andrzej\PDF\PHP4. Od podstaw\r02.doc