You are on page 1of 18

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

PHP. Programowanie.
Wydanie III
Autorzy: Leon Atkinson, Zeev Suraski
Tumaczenie: Jarosaw Dobrzaski
ISBN: 83-7361-355-2
Tytu oryginau: Core PHP Programming, 3 Edition
Format: B5, stron: 952

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Ksika PHP. Programowanie. Wydanie III to kolejne wydanie praktycznego


przewodnika dla programistw stron internetowych. Jeden z najlepszych programistw
PHP Leon Atkinson, uczy wszystkiego, co potrzebujesz, by stworzy dobr i szybk
aplikacj sieciow. Dokadnie opisuje skadni PHP i kluczowe elementy jzyka.
Atkinson przedstawia take najwaniejsze funkcje PHP, w tym funkcje wejcia-wyjcia,
przetwarzania danych, matematyczne, daty, czasu, konfiguracji, funkcje umoliwiajce
wspprac z bazami danych, funkcje graficzne i sieciowe. Prezentuje on rwnie
dziaanie PHP na przykadach realizujcych sortowanie, przeszukiwanie, analiz
acuchw i inne zadania.
Ksika skada si z czterech czci:
1. wstpu do programowania,
2. przewodnika po wszystkich funkcjach,
3. przegldu typowych problemw programistycznych
4. czci umoliwiajcej zastosowanie zdobytej wiedzy przy tworzeniu witryn.
Pierwsza cz zajmuje si kwestiami dotyczcymi wszystkich jzykw
programowania: jak wyglda skrypt PHP, jak sterowa przebiegiem programu
i jak zarzdza danymi.
Cz druga organizuje funkcje wedug ich zastosowania i zawiera przykady
ich zastosowania. PHP udostpnia bardzo duo funkcji, dlatego cz ta jest
najobszerniejsza.
Cz trzecia zajmuje si rozwizywaniem typowych problemw
programistycznych, takich jak sortowanie czy generowanie grafiki.
Ostatnia cz udziela porad dotyczcych tworzenia caych witryn sieciowych
za pomoc PHP.

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

Spis treci
Sowo wstpne............................................................................................................................................. 9
Przedmowa ..................................................................................................................................................11

Cz I Programowanie w PHP...........................................................................................13
Rozdzia 1. Wprowadzenie do PHP .............................................................................................................15
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
1.8.
1.9.
1.10.

Historia PHP ..................................................................................................... 16


Co sprawia, e PHP jest lepszy od innych jzykw? .............................................. 18
Interfejsy do systemw zewntrznych .................................................................. 20
Jak PHP wsppracuje z serwerem sieciowym?..................................................... 20
Wymagania sprztowe i programowe................................................................... 21
Jak wyglda skrypt PHP?.................................................................................... 25
Przechowywanie danych ..................................................................................... 27
Odbieranie informacji od uytkownika.................................................................. 29
Wybieranie pomidzy alternatywami .................................................................... 31
Powtarzanie sekwencji kodu ............................................................................... 32

Rozdzia 2. Zmienne, operatory i wyraenia........................................................................................... 35


2.1.
2.2.
2.3.
2.4.
2.5.
2.6.

Spojrzenie oglne.............................................................................................. 35
Typy danych ...................................................................................................... 37
Zmienne ........................................................................................................... 40
Stae ................................................................................................................ 45
Operatory.......................................................................................................... 45
Budowanie wyrae ........................................................................................... 57

Rozdzia 3. Instrukcje sterujce ...............................................................................................................61


3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.

Instrukcja if....................................................................................................... 61
Operator ? ........................................................................................................ 64
Instrukcja switch ............................................................................................... 64
Ptle ................................................................................................................ 66
Instrukcje exit, die i return ................................................................................. 72
Wyjtki ............................................................................................................. 73
Instrukcja Declare ............................................................................................. 74

Rozdzia 4. Funkcje .................................................................................................................................... 77


4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.

Deklarowanie funkcji.......................................................................................... 77
Instrukcja return................................................................................................ 78
Zakres.............................................................................................................. 79
Zmienne statyczne ............................................................................................ 81
Argumenty ........................................................................................................ 82
Rekurencja ....................................................................................................... 85
Dynamiczne wywoania funkcji ............................................................................ 86

PHP. Programowanie
Rozdzia 5. Tablice...................................................................................................................................... 87
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.

Tablice jednowymiarowe..................................................................................... 87
Indeksowanie tablic........................................................................................... 88
Inicjalizacja tablic .............................................................................................. 89
Tablice wielowymiarowe ..................................................................................... 90
Rzutowanie tablic .............................................................................................. 91
Operator + ........................................................................................................ 92
Odwoania do tablic z wntrza acucha............................................................... 93

Rozdzia 6. Klasy i obiekty......................................................................................................................... 95


6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.
6.8.
6.9.
6.10.
6.11.
6.12.
6.13.
6.14.
6.15.

Programowanie obiektowe.................................................................................. 96
Model obiektowy w PHP 5 .................................................................................. 97
Definiowanie klasy............................................................................................. 98
Konstruktory i destruktory ................................................................................ 100
Klonowanie ..................................................................................................... 102
Dostp do metod i waciwoci ........................................................................ 103
Statyczne skadniki klas................................................................................... 106
Typy dostpnoci............................................................................................. 107
Wizanie......................................................................................................... 111
Metody i klasy abstrakcyjne ............................................................................. 114
Przecianie z poziomu uytkownika.................................................................. 117
Automatyczne adowanie klas........................................................................... 118
Serializacja obiektw ....................................................................................... 119
Przestrzenie nazw............................................................................................ 120
Ewolucja moduu Zend ..................................................................................... 122

Rozdzia 7. Operacje wejcia-wyjcia i dostp do dysku......................................................................129


7.1.
7.2.
7.3.
7.4.
7.5.
7.6.
7.7.
7.8.
7.9.
7.10.
7.11.
7.12.

Poczenia HTTP.............................................................................................. 130


Wysyanie treci do przegldarki ....................................................................... 131
Buforowanie treci........................................................................................... 132
Zmienne rodowiskowe.................................................................................... 133
Pobieranie danych z formularzy......................................................................... 133
Przesyanie tablic w formularzach...................................................................... 134
Cookies .......................................................................................................... 135
Pobieranie plikw od uytkownika ..................................................................... 136
Zapis do plikw i ich odczytywanie .................................................................... 138
Sesje ............................................................................................................. 140
Funkcje include i require .................................................................................. 142
Nie ufaj danym uytkownika ............................................................................. 144

Cz II Funkcje PHP ..........................................................................................................145


Rozdzia 8. Komunikacja z przegldark................................................................................................147
8.1.
8.2.
8.3.
8.4.
8.5.
8.6.

Zmienne generowane przez modu PHP ............................................................. 147


Stae generowane przez modu PHP .................................................................. 152
Przesyanie tekstu do przegldarki .................................................................... 156
Buforowanie wyjcia ........................................................................................ 159
Obsuga sesji .................................................................................................. 162
Nagwki HTTP ................................................................................................ 169

Spis treci

Rozdzia 9. System operacyjny ...............................................................................................................173


9.1.
9.2.
9.3.
9.4.
9.5.
9.6.
9.7.

Pliki................................................................................................................ 173
Pliki skompresowane ....................................................................................... 217
Direct I/O ....................................................................................................... 224
Diagnostyka.................................................................................................... 227
POSIX............................................................................................................. 252
Polecenia interpretera...................................................................................... 257
Sterowanie procesami ..................................................................................... 262

Rozdzia 10. Funkcje sieciowe.................................................................................................................267


10.1.
10.2.
10.3.
10.4.
10.5.

Oglne funkcje sieciowe................................................................................... 267


Gniazda .......................................................................................................... 274
FTP ................................................................................................................ 289
Curl................................................................................................................ 300
SNMP............................................................................................................. 311

Rozdzia 11. Funkcje przetwarzania danych ...........................................................................................315


11.1.
11.2.
11.3.
11.4.

Typy danych, stae i zmienne ............................................................................ 315


Tablice ........................................................................................................... 326
Obiekty i klasy................................................................................................. 357
Funkcje definiowane przez uytkownika ............................................................. 361

Rozdzia 12. Kodowanie i dekodowanie...................................................................................................367


12.1.
12.2.
12.3.
12.4.
12.5.
12.6.
12.7.
12.8.
12.9.

acuchy ........................................................................................................ 367


Porwnywanie acuchw ................................................................................. 376
Kodowanie i dekodowanie................................................................................ 378
Kompresja ...................................................................................................... 401
Szyfrowanie .................................................................................................... 403
Mieszanie ....................................................................................................... 411
Sprawdzanie pisowni ....................................................................................... 416
Wyraenia regularne ........................................................................................ 420
Kodowanie zestaww znakw ........................................................................... 427

Rozdzia 13. Funkcje matematyczne .......................................................................................................437


13.1. Operacje matematyczne................................................................................... 437
13.2. Liczby losowe.................................................................................................. 447
13.3. Liczby dowolnej precyzji.................................................................................... 449

Rozdzia 14. Funkcje daty i czasu............................................................................................................453


14.1. Data i czas ..................................................................................................... 453
14.2. Niestandardowe kalendarze ............................................................................. 462

Rozdzia 15. Konfiguracja PHP.................................................................................................................467


15.1. Dyrektywy konfiguracyjne.................................................................................. 467
15.2. Konfiguracja.................................................................................................... 499

Rozdzia 16. Funkcje graficzne................................................................................................................509


16.1. Analizowanie obrazw ...................................................................................... 510
16.2. Tworzenie obrazkw......................................................................................... 513

PHP. Programowanie
Rozdzia 17. Bazy danych.........................................................................................................................557
17.1.
17.2.
17.3.
17.4.
17.5.
17.6.
17.7.
17.8.

Abstrakcyjna baza danych typu DBM ................................................................. 558


DBX ............................................................................................................... 562
LDAP .............................................................................................................. 566
MySQL ........................................................................................................... 578
ODBC ............................................................................................................. 591
Oracle ............................................................................................................ 606
Postgres......................................................................................................... 620
Sybase ........................................................................................................... 637

Rozdzia 18. Warstwy obiektowe............................................................................................................647


18.1. COM............................................................................................................... 647
18.2. CORBA ........................................................................................................... 652
18.3. Java ............................................................................................................... 654

Rozdzia 19. Inne funkcje .........................................................................................................................657


19.1.
19.2.
19.3.
19.4.
19.5.
19.6.
19.7.

Apache ........................................................................................................... 657


IMAP .............................................................................................................. 660
MnoGoSearch ................................................................................................. 681
OpenSSL ........................................................................................................ 686
Komunikaty systemu System V......................................................................... 696
Semafory systemu System V ............................................................................ 700
Pami wsplna systemu System V .................................................................. 702

Rozdzia 20. XML......................................................................................................................................707


20.1. DOM XML ....................................................................................................... 709
20.2. Expat XML ...................................................................................................... 722
20.3. WDDX............................................................................................................. 733

Cz III Algorytmy...........................................................................................................737
Rozdzia 21. Sortowanie, wyszukiwanie i liczby losowe ......................................................................739
21.1.
21.2.
21.3.
21.4.
21.5.
21.6.
21.7.
21.8.

Sortowanie ..................................................................................................... 740


Wbudowane funkcje sortujce .......................................................................... 740
Sortowanie z funkcj porwnujc .................................................................... 744
Wyszukiwanie.................................................................................................. 746
Indeksowanie.................................................................................................. 748
Liczby losowe.................................................................................................. 749
Identyfikatory losowe ....................................................................................... 751
Losowanie banera reklamowego ....................................................................... 752

Rozdzia 22. Analiza skadni i acuchw...............................................................................................755


22.1.
22.2.
22.3.
22.4.

Podzia acuchw na elementy ........................................................................ 755


Wyraenia regularne ........................................................................................ 757
Definiowanie wyrae regularnych ..................................................................... 758
Stosowanie wyrae regularnych w skryptach PHP.............................................. 759

Rozdzia 23. Integracja z bazami danych ..............................................................................................767


23.1.
23.2.
23.3.
23.4.

Tworzenie tabel HTML z rezultatami zapyta SQL ............................................... 767


ledzenie odwiedzajcych za pomoc identyfikatorw sesji................................. 772
Przechowywanie danych w bazie ....................................................................... 780
Warstwy abstrakcyjne baz danych ..................................................................... 786

Spis treci

Rozdzia 24. Sie ......................................................................................................................................787


24.1.
24.2.
24.3.
24.4.
24.5.
24.6.

Uwierzytelnianie w HTTP................................................................................... 787


Sterowanie buforem przegldarki ...................................................................... 790
Ustawianie typu dokumentu ............................................................................. 791
E-mail z zacznikami ....................................................................................... 792
Wiadomoci pocztowe HTML ............................................................................ 795
Weryfikacja adresu skrzynki pocztowej .............................................................. 798

Rozdzia 25. Generowanie grafiki ..........................................................................................................803


25.1.
25.2.
25.3.
25.4.
25.5.

Przyciski dynamiczne ....................................................................................... 803


Generowanie grafiki w locie........................................................................... 808
Wykresy supkowe ........................................................................................... 808
Wykresy koowe............................................................................................... 811
Rozciganie pojedynczych pikseli ...................................................................... 813

Cz IV Inynieria oprogramowania..............................................................................815
Rozdzia 26. Integracja z HTML-em .........................................................................................................817
26.1.
26.2.
26.3.
26.4.

Umieszczanie fragmentw kodu PHP w dokumencie HTML.................................. 817


Uywanie PHP do generowania caych dokumentw HTML................................... 823
Separowanie HTML-a od PHP ........................................................................... 824
Generowanie kodu HTML za pomoc PHP.......................................................... 826

Rozdzia 27. Projektowanie ....................................................................................................................829


27.1.
27.2.
27.3.
27.4.
27.5.
27.6.
27.7.
27.8.
27.9.

Tworzenie specyfikacji wymaga ....................................................................... 830


Tworzenie dokumentw projektowych ................................................................ 833
Zarzdzanie zmianami ..................................................................................... 834
Modularyzacja za pomoc include ..................................................................... 839
FreeEnergy...................................................................................................... 840
Szablony......................................................................................................... 842
Szkielety aplikacji ............................................................................................ 846
PEAR .............................................................................................................. 847
Adresy przyjazne wyszukiwarkom ...................................................................... 848

Rozdzia 28. Efektywno i diagnostyka.................................................................................................851


28.1.
28.2.
28.3.
28.4.
28.5.
28.6.
28.7.
28.8.
28.9.
28.10.
28.11.
28.12.
28.13.

Optymalizacja.................................................................................................. 852
Mierzenie wydajnoci ....................................................................................... 853
Optymalizacja najwolniej wykonywanych fragmentw........................................... 857
Kiedy przechowywa tre w bazie .................................................................... 859
Strategie diagnostyczne ................................................................................... 859
Symulowanie pocze HTTP ............................................................................ 860
Buforowanie treci strony................................................................................. 861
Kompresja generowanej treci.......................................................................... 862
Unikanie eval .................................................................................................. 863
Unikanie dynamicznego adowania rozszerze.................................................... 865
Zwikszanie szybkoci realizacji zapyta MySQL ................................................ 866
Optymalizacja sesji zapisujcych dane na dysku ................................................ 867
Unikanie przekazywania argumentw przez odwoania
(czyli dlaczego nie ufa instynktowi) .................................................................. 868
28.14. Unikanie konkatenacji duych acuchw........................................................... 870
28.15. Unikanie umieszczania duych plikw na serwerze Apache z uaktywnionym PHP ... 871

PHP. Programowanie
28.16.
28.17.
28.18.
28.19.
28.20.
28.21.

Rola trwaych pocze z baz danych ............................................................... 871


Unikanie w miar moliwoci korzystania z exec, operatorw ` i system............... 872
Zastosowanie php.ini-recommended ................................................................. 873
Stosowanie wyrae regularnych tylko tam, gdzie s niezbdne........................... 873
Optymalizacja ptli .......................................................................................... 873
Konfiguracja serwera IIS .................................................................................. 874

Rozdzia 29. Wzorce projektowe ...........................................................................................................875


29.1.
29.2.
29.3.
29.4.
29.5.

Definicja wzorcw ............................................................................................ 875


Singleton ........................................................................................................ 877
Fabryka .......................................................................................................... 880
Obserwator ..................................................................................................... 882
Strategia ........................................................................................................ 885

Dodatki...............................................................................................................................889
Dodatek A Kody z ukonikiem ..................................................................................................................891
Dodatek B Kody ASCII...............................................................................................................................893
Dodatek C Operatory ...............................................................................................................................899
Dodatek D Znaczniki PHP ..........................................................................................................................901
Dodatek E Konfiguracja PHP w czasie kompilacji..................................................................................903
Dodatek F Zasoby internetowe ...............................................................................................................907
Dodatek G Przewodnik po stylach PHP...................................................................................................909
Skorowidz .................................................................................................................................................913

Analiza skadni i acuchw


W tym rozdziale:
n

Podzia acuchw na elementy.

Wyraenia regularne.

Definiowanie wyrae regularnych.

Stosowanie wyrae regularnych w skryptach PHP.

Analiza skadni polega na podziale caoci na elementy skadowe, zwykle dotyczy to podziau
zdania na poszczeglne wyrazy. PHP musi zanalizowa napisany przez nas kod w pierwszym kroku procesu przeksztacania go w dokument HTML. Czasami staniemy rwnie
przed problemem pobierania i weryfikacji danych zawartych w acuchach tekstowych. Moe
to by np. prosta lista oddzielona tabulatorami lub skomplikowany acuch, jakiego przegldarka uywa do swojej identyfikacji w obliczu serwera sieciowego. Mona wwczas podzieli acuch na poszczeglne elementy lub zastosowa wyraenie regularne. W rozdziale
tym opisane zostay funkcje analizujce skadni oraz tre acuchw.

22.1. Podzia acuchw na elementy


PHP udostpnia prosty model dzielenia acuchw. Wybrane przez nas znaki s uznawane
za separatory, a fragmenty acucha, znajdujce si midzy separatorami, s uznawane za
pojedyncze elementy. Z kadym pobranym elementem mona zmienia zestaw znakw separujcych, co jest wygodne w przypadku nieregularnych acuchw to znaczy tych, ktre
nie s prostymi listami oddzielonymi przecinkami.
Listing 22.1 pobiera zdanie i dzieli je na poszczeglne sowa za pomoc funkcji ,
opisanej w rozdziale 12. W przypadku skryptu sowa s otoczone spacjami, znakami przestankowymi lub koca zdania. Cudzysowy i apostrofy s uznawane za cz wyrazu. Efekt
dziaania przykadowego skryptu jest widoczny na rysunku 22.1.

756

Cz III n Algorytmy

Listing 22.1. Podzia acucha na elementy





      

    !"#!$%&'  ( ')**
+
 ,-.
 /012   301/*.
 /+ !"#!$%&'  ( ')40 150 15/*.
  6   7( 6   8 9((
   ,/:;/.
0  <  8 
  ,  !"#!$%&'  ( ')   *.
 :,,=>?$!.
 ,    **
+
8   8 
  :,//*
+
 (<7  
 < 6<
 :  < (&  <  *)**
+
< (&  <  *),@.
4
 
+
< (&  <  *)AA.
4
 AA.
4
4
< <  B(   < C 86<
 < (*.
C   < C 8(CB( <C< 
  < (*.
 /01D   6<015/*.
 / 15/*.
 (< ( ,1E  *
+
 / 1 E  * 15/*.
4
 / 15/*.
4
 / 8( ,5/+$! F! &'2G2$!?=')45//;
/8 ,5/5/15/*.
 / 8 ,5/  ( 5/  ,5/H-5/15/*.
 /  ,5/08 5/E  ,5/> 5/15/*.
 / 815/*.
1

Rozdzia 22. n Analiza skadni i acuchw

757

Rysunek 22.1.
Efekt dziaania skryptu
z listingu 22.1

Warto zwrci uwag na rol ptli  w powyszym przykadzie. Zamiast inkrementacji
wartoci cakowitej pobiera ona kolejne elementy acucha. Kiedy funkcja  trafi na
koniec danych wejciowych, zwrci 
. Pierwsz myl moe by sprawdzanie w ptli
wystpienia wartoci 
za pomoc operatora . Naley pamita, e pusty acuch ma
warto logiczn 
. Jeeli dwa separatory nastpuj po sobie, , jak mona si
spodziewa, zwrci pusty acuch. Poniewa nie chcemy, aby operacja dzielenia acucha
zostaa przerwana na pierwszym powtrzonym separatorze, konieczne jest sprawdzenie wystpienia rzeczywistej wartoci 
za pomoc operatora .
Funkcja  jest uyteczna tylko w najprostszych i najbardziej uporzdkowanych przypadkach. Przykadem moe by odczyt pliku tekstowego, separowanego tabulatorami. Algorytm polega moe wwczas na odczycie wiersza z pliku, podziale wiersza na elementy,
stosujc tabulator w roli separatora i przejciu do odczytu kolejnego wiersza z pliku.

22.2. Wyraenia regularne


Na szczcie PHP udostpnia rwnie o wiele doskonalsze narzdzie ni funkcja 
wyraenia regularne. Uywaj one wasnego jzyka do opisu wzorcw, ktre s porwnywane z acuchami. Kod rdowy PHP zawiera implementacj wyrae regularnych
zgodnych z norm POSIX 1003.2. Norma ta umoliwia stosowanie wyrae starszego typu,
ale sugeruje korzystanie z nowego typu, ktry zostanie tu opisany. Wszystkie funkcje zwizane z wyraeniami regularnymi s opisane w rozdziale 12.
W 1999 r. Andrei Zmievski wzbogaci PHP o wspprac z wyraeniami regularnymi, stosowanymi w jzyku Perl. Maj one dwie zalety w stosunku do wbudowanych wyrae regularnych PHP: uatwiaj kopiowanie wyrae ze skryptw Perl i wykonuj si szybciej.
Dokadny opis wyrae regularnych wykracza poza ramy tego tekstu. Jest to zagadnienie
godne nastpnej ksiki. Zostan tu objanione podstawy oraz pokazane rne funkcje
PHP, ktre uywaj wyrae regularnych. wietnym rdem informacji o wyraeniach regu-

758

Cz III n Algorytmy
larnych jest rozdzia 2. ksiki Ellie Quigley, UNIX Shells by Example. Wyraenia regularne
stosowane w Perlu s opisane w oficjalnej dokumentacji Perla pod adresem http://www.perldoc.
com/perl5.8.0/pod/perlre.html. Nastpnie naley przeczyta w dokumentacji na stronie PHP
o rnicach midzy implementacj tych wyrae w Perlu a w PHP: http://www.php.net/manual/
pcre.pattern.syntax.php.

22.3. Definiowanie wyrae regularnych


Na najwyszym poziomie wyraenia regularne skadaj si z jednej lub wicej gazi, oddzielonych znakiem pionowej kreski (). Znak ten ma waciwoci operatora logicznego .
Kada z gazi moe odpowiada testowanemu acuchowi. Kilka przykadw znajduje si
w tabeli 22.1.
Tabela 22.1. Warianty w wyraeniach regularnych
Prbka

Opis

0

Odpowiada sowu jabko.

0I 

Odpowiada sowu jabko lub pika.

(7 I (I  <

Odpowiada sowom pocztek, koniec lub przerwa.

Kady z wariantw zawiera jeden lub wicej atomw. Po atomach mog wystpowa znaki
modyfikujce moliw liczb kolejnych trafie dla danego atomu. Gwiazdka () oznacza,
e atom moe wystpowa dowoln liczb razy. Symbol dodawania () oznacza, e atom
musi wystpowa przynajmniej raz. Znak zapytania () oznacza, e atom moe wystpowa raz lub ani razu.
Alternatywnie atom moe by zwizany, co oznacza, e nastpuj po nim nawiasy klamrowe
(), ktre zawieraj liczby cakowite. Jeeli nawiasy klamrowe zawieraj pojedyncz liczb,
wwczas atom musi wystpowa dokadnie t liczb razy. Jeeli w nawiasach znajduje si
pojedyncza liczba, po ktrej nastpuje przecinek, atom musi wystpowa tyle lub wicej
razy. Jeeli klamry zawieraj dwie liczby oddzielone przecinkiem, atom musi wystpowa
liczb razy zawart w przedziale midzy tymi liczbami. W tabeli 22.2 przedstawione s
przykady repetycji.
Tabela 22.2. Wzorce z repetycj w wyraeniach regularnych
Prbka

Opis

0*

Odpowiada , 0, 00, znak  plus dowolna liczba znakw 0;

0A*

Odpowiada 0, 00, 000, znak  plus jeden lub wicej znakw 0;

0*

Odpowiada  lub 0 znak , po ktrym moe wystpi znak 0;

0+J4*

Odpowiada tylko 000;

0+K4*

Odpowiada 00, 000, 0000, znak , po ktrym nastpuje jeden lub wicej znakw 0;

0+KH4*

Odpowiada 00, 000, 0000 znak , po ktrym nastpuj dwa, trzy lub cztery znaki 0;

Rozdzia 22. n Analiza skadni i acuchw

759

Atom jest szeregiem znakw, z ktrych niektre maj specjalne znaczenie, a inne oznaczaj
po prostu znak, ktry ma wystpowa w acuchu. Kropka () zastpuje dowolny pojedynczy
znak. Karetka () zastpuje pocztek acucha. Symbol dolara () zastpuje koniec acucha.
Jeeli w acuchu ma wystpowa jeden ze znakw specjalnych (),
naley je poprzedzi znakiem . Tak naprawd kady znak poprzedzony znakiem  bdzie
traktowany dosownie, nawet jeeli nie ma on specjalnego znaczenia. Kady znak nieposiadajcy specjalnego znaczenia zostanie uznany po prostu za znak, ktry ma wystpowa
w acuchu. Mona rwnie grupowa atomy za pomoc nawiasw, aby byy traktowane
jako jeden atom.
Nawiasy kwadratowe () su do okrelania moliwego zakresu wartoci. Moe on mie
form listy dozwolonych znakw lub zakresu okrelonego za pomoc mylnika ( ). Jeeli
lista lub zakres s poprzedzone karetk (), oznacza to wszystkie znaki spoza okrelonego
zakresu. Naley zwrci uwag na to podwjne znaczenie znaku .
Oprcz list i zakresw nawiasy kwadratowe mog zawiera klasy znakw. Nazwy tych klas
s dodatkowo otoczone dwukropkami, aby odpowiada wszystkim znakom nalecym do
alfabetu !"#$%"!. Dostpne klasy to: "#&'(, "#$%", )#"&, *&#, +,-,, -"$%, #./,
$,&, $'&*, $"*/, '$$/ i 0+,-,. Opisy tych klas znajduj si w dokumentacji *1$/.
Oprcz tego, dwa dodatkowe kody w nawiasach kwadratowych okrelaj pocztek lub koniec
wyrazu. S to odpowiednio !2! i !!. Wyraz oznacza w tym przypadku kad sekwencj
znakw alfanumerycznych i znakw podkrelenia. Tabela 22.3 zawiera przykady uycia
nawiasw kwadratowych.
Tabela 22.3. Nawiasy kwadratowe w wyraeniach regularnych
Prbka

Opis

;(

Odpowiada (, 0(, ((, kady trzyliterowy acuch zaczynajcy si na , a koczcy na (;

L;

Odpowiada kademu acuchowi rozpoczynajcemu si na liter ;

&M()N

Odpowiada N, N, 0N, 0N, 0(N dowolny cig zoony z pierwszych trzech liter alfabetu,
po ktrych nastpuje N;

0&)

Odpowiada wyrazom 0 lub 0;

&LO)+P4

Odpowiada kademu acuchowi o dugoci 5 znakw, ktry nie zawiera maego lub duego ;

&&3  3))

Odpowiada kadej cyfrze, rwnowanik wyraenia &-MQ);

&&33));

Odpowiada kademu wyrazowi, ktry zaczyna si na ;

22.4. Stosowanie wyrae regularnych


w skryptach PHP
Podstawow funkcj do wykonywania wyrae regularnych jest //-. Funkcja ta testuje
acuch na danym wyraeniu regularnym, zwracajc 34 , jeeli wzorzec opisany w wyraeniu regularnym wystpuje w testowanym acuchu. W ten sposb mona sprawdzi, czy

760

Cz III n Algorytmy
acuch posiada okrelon form. Przykadem moe by kontrola poprawnoci formatu kodu
pocztowego, skadajcego si z dwch cyfr, po ktrych nastpuj mylnik i trzy cyfry. Pokazuje
to listing 22.2. Efekt dziania przykadowego skryptu wida na rysunku 22.2.

Listing 22.2. Sprawdzanie kodu pocztowego




$ < <BR 8(< 
   <(( 7  8(<8
6 < 7< ( 6 (8
< R C7( 
    ( ;



     

    !"#!$%&'')**
+
  /L&-MQ)+K4*M&-MQ)+J4*/ !"#!$%&'')**
+
 /+ !"#!$%&'')4 <(<;0 15/*.
4
 
+
 /+ !"#!$%&'')401 01/;
/  <8 8(<8;0 15/*.
4
4
<  8  
 / 8( ,5/+$! F! &'2G2$!?=')45/15/*.
 /  ,5/ N5/8 ,5/5/15/*.
 /  ,5/08 5/E  ,5/$ <S5/15/*.
 / 815/*.
1

Rysunek 22.2.
Efekt dziaania skryptu
z listingu 22.2

Skrypt udostpnia formularz do wprowadzania kodu pocztowego. Musi on skada si z dwch


cyfr, po ktrych nastpuj mylnik i kolejne trzy cyfry. Dziaanie tego skryptu opiera si na
nastpujcym wyraeniu regularnym:
L&-MQ+K4*M&-MQ)+J4*

Do niego porwnywane s informacje wprowadzone przez uytkownika. Pomocna bdzie tu


dokadna analiza wyraenia.

Rozdzia 22. n Analiza skadni i acuchw

761

Rozpoczyna si ono od karetki. Powoduje to szukanie trafie tylko od pocztku acucha.


Jeeli karetka zostaaby pominita, kod pocztowy mgby rozpoczyna si dowoln liczb
znakw, np. ")*56 789 i wci by zgodny z wyraeniem regularnym. W podobny sposb
znak dolara na kocu wyraenia powoduje szukanie trafie od koca acucha. Zapobiega to
trafieniom, takim jak 75 :;:")*+. Kombinacja karetki i znaku dolara umoliwia wybieranie
acuchw zawierajcych tylko wymagane znaki.
Pierwsze podwyraenie to ; <6. Zakres w nawiasach kwadratowych pozwala na stosowanie tylko cyfr z zakresu od 0 do 9. Zawarto nawiasw klamrowych informuje, e cyfry musz by dokadnie dwie.
Drugie podwyraenie to  ; <=. W podobny sposb, jak w pierwszym wyraeniu,
okrelona zostaa tu liczba cyfr na 3. Mylnik ma tu znaczenie dosowne i musi poprzedza
3 kolejne cyfry. Znak zapytania informuje, e cae podwyraenie musi wystpowa tylko
raz lub w ogle, co czyni podanie kolejnych trzech cyfr opcjonalnym.
W prosty sposb mona przebudowa takie wyraenie, aby sprawdzao numery telefonw
i daty. Wyraenia regularne zapewniaj wietny sposb kontroli wartoci zmiennych zwracanych poprzez formularze. Zastpuj one zagniedone instrukcje , i przeszukiwanie
acuchw funkcj $.
Mona rwnie sprawi, aby trafienia dotyczce poszczeglnych podwyrae zostay zwrcone
w tabeli. Jest to uyteczne w sytuacjach, kiedy trzeba podzieli acuch na czci. Dobrym
przykadem dla tej metody jest acuch, ktrym identyfikuje si przegldarka. W acuchu
tym zakodowane s: nazwa przegldarki, wersja i typ komputera, na ktrym zostaa uruchomiona. Pobranie tych informacji do oddzielnych zmiennych umoliwi dostosowanie
strony do moliwoci danej przegldarki.
Listing 22.3 przedstawia skrypt, tworzcy zestaw zmiennych, ktre pomagaj ukry stron
dla okrelonego typu przegldarki. Dla przykadu uzalenimy zawarto hipercza od typu
przegldarki. Jeeli uytkownik korzysta z Netscape Navigatora, cze bdzie wskazywao
na stron, z ktrej mona pobra Microsoft Explorera. W innym wypadku cze bdzie
wskazywao stron, z ktrej mona pobra Netscape Navigatora. Jest to przykad dostosowywania zawartoci strony. T sam metod mona decydowa rwnie o uyciu zaawansowanych moliwoci strony.
Listing 22.3. Sprawdzanie http_user_agent

 <    7   
< 
;T H;-(8 0 .T$U!V;-.W <X%P;@."J@KHV@*
 /L&&3 3))A*&&3  3)5;)A*;*/
$! F! &'G%%2#$! >Y!X%')8(*.
0 < X8 ,8(&@).
0 < F  ,8(&K).
0 < Z (  ,8(&J).
<6<
   7 T$U!
   /8 /0 < Z (  **
+
( B< 3
(8 0 .T$U!V;-.W <X%P;@."J@KHV@*
  /T$U!&&3  3)5;)A*./

762

Cz III n Algorytmy
0 < Z (  8(*.
0 < X8 ,/T$U!/.
0 < F  ,8(&@).
4
 /[    7  0 < X8 /;
/< 0 < F  :0 15/;
/T
 60<R 6<
 R   7  3/*.
   /8 /0 < X8 **
+
 / ,5//;
/3<<<;8 ( ;(8 <   ;5/1/*.
 /U  !N  /*.
 /1/*.
4
 
+
 / ,5//;
/3<<<; ( ;(8(8 <   N;8 /;/5/1/*.
 /XE  /*.
 /1/*.
4
 /  6< ;0 15/*.
1

Gwna funkcja //- w skrypcie jest uyta bez warunku ,. Zakada ona, e przegldarka
dokona swojej identyfikacji co najmniej w postaci podania nazwy, ukonika i numeru wersji.
Tablicy ("*% zostaj przyporzdkowane czci rozpatrywanego acucha, ktre odpowiadaj
czciom wyraenia regularnego. Wyraenie to skada si z trzech podwyrae, odpowiadajcych nazwie, wersji i wszystkim pozostaym charakterystykom. Forma ta jest stosowana
przez wikszo przegldarek, w tym Navigatora i Internet Explorera. Jako e Internet Explorer
zawsze identyfikuje si jako przegldarka Mozilla (Netscape), naley wykona dodatkowe
kroki, aby okreli, czy przegldarka jest rzeczywicie produktem Netscape, czy go tylko
udaje. Odpowiada za to wywoanie //-,.
Dlaczego element zerowy tablicy jest pomijany? Ot przechowuje on podcig, ktry zosta
trafiony przez cae wyraenie regularne. W omawianej sytuacji trafienia takie nie maj znaczenia. Zwykle element zerowy okazuje si przydatny, gdy poszukujemy okrelonego acucha,
zawartego w ramach szerszego kontekstu. Przykadem moe by przeszukiwanie treci strony
w poszukiwaniu URL-u. Listing 22.4 pobiera stron domow PHP i tworzy list wszystkich
czy znajdujcych si na tej stronie. Efekt dziaania jest widoczny na rysunku 22.3.
Listing 22.4. Poszukiwanie adresw URL na stronie

 # ?0   6<
# ?,/3<<<;; /.
<  
 , # ?/ /*.
 /?    # ?0 15/*.
 / 15/*.

Rozdzia 22. n Analiza skadni i acuchw


Rysunek 22.3.
Efekt dziaania skryptu
z listingu 22.4

< :  **


+
0 < 
  ,  @-KH*.
< C  0 ( 7 (  B 
<   / ,5/&L5/)5//  8(**
+
<B<   # ?
 / 1+8(&-)4 15/*.
< # ?< 
  ( ,   ( /5//5/8(&-)*.
  ,   (   ( //  *.
4
4
 / 15/*.
(   *.
1

763

764

Cz III n Algorytmy
Gwna ptla skryptu pobiera wiersze tekstu ze strumienia pliku i szuka waciwoci %/.
Jeeli waciwo taka zostanie znaleziona w wierszu, jest on umieszczany w zerowym elemencie tablicy ("*%. Nastpnie skrypt wywietla zawarto tego elementu i usuwa go z wiersza
za pomoc funkcji //->/$#"*/. Funkcja ta zamienia tekst pasujcy do wyraenia regularnego na dany acuch. W tym przypadku waciwo ?4  zostaje zastpiona acuchem
pustym. Powodem usunicia cza po jego odnalezieniu jest moliwo znalezienia dwch
czy w jednym wierszu kodu HTML. Funkcja //- trafi wwczas tylko pierwszy podcig.
Rozwizaniem jest odnalezienie i usunicie wszystkich czy.
Jak wida, w chwili usuwania cza tworzona jest zmienna /$#"*/. Niektre cza mog
zawiera znak zapytania dopuszczalny znak w URL-u, ktry oddziela nazw pliku od
zmiennych formularza. Jako e znak ten ma specjalne znaczenie w wyraeniach regularnych,
skrypt umieszcza przed nim znak , aby umoliwi jego dosown interpretacj.
Czsto uywam funkcji //->/$#"*/ do konwersji treci na potrzeby nowego kontekstu.
Mona na przykad zastosowa //->/$#"*/ do zastpienia kilku spacji jedn. Pokazuje to
listing 22.5. Efekt dziaania skryptu z listingu wida na rysunku 22.4.

Listing 22.5. Zamiana powielonych spacji





    

    !"#!$%&' N')**
+
 /01X   <010 15/;
/ 1+ !"#!$%&' N')4 1/;
/0 15/*.
 !"#!$%&' N'),   ( /&&3( 3))A/
// !"#!$%&' N')*.
 /01=  <010 15/;
/ 1+ !"#!$%&' N')4 1/;
/0 15/*.
4
 
+
 !"#!$%&' N'),//.
4
<  8  
 / 8( ,5/+$! F! &'2G2$!?=')45/15/;
/ N 8 ,5/ N5/( ,5/H-5/ <,5/@-5/1/;
/+ !"#!$%&' N')4 N 10 15/;
/  ,5/08 5/E  ,5/WB 5/15/;
/ 815/*.
1

Rozdzia 22. n Analiza skadni i acuchw


Rysunek 22.4.
Efekt dziaania skryptu
z listingu 22.5

765

You might also like