SlideShare a Scribd company logo
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   PHP. Programowanie.
                                         Wydanie III
           KATALOG KSI¥¯EK
                                         Autorzy: Leon Atkinson, Zeev Suraski
                      KATALOG ONLINE     T³umaczenie: Jaros³aw Dobrzañski
                                         ISBN: 83-7361-355-2
       ZAMÓW DRUKOWANY KATALOG           Tytu³ orygina³u: Core PHP Programming, 3 Edition
                                         Format: B5, stron: 952

              TWÓJ KOSZYK
                                         Ksi¹¿ka „PHP. Programowanie. Wydanie III” to kolejne wydanie praktycznego
                    DODAJ DO KOSZYKA     przewodnika dla programistów stron internetowych. Jeden z najlepszych programistów
                                         PHP — Leon Atkinson, uczy wszystkiego, co potrzebujesz, by stworzyæ dobr¹ i szybk¹
                                         aplikacjê sieciow¹. Dok³adnie opisuje sk³adniê PHP i kluczowe elementy jêzyka.
         CENNIK I INFORMACJE             Atkinson przedstawia tak¿e najwa¿niejsze funkcje PHP, w tym funkcje wej cia-wyj cia,
                                         przetwarzania danych, matematyczne, daty, czasu, konfiguracji, funkcje umo¿liwiaj¹ce
                   ZAMÓW INFORMACJE      wspó³pracê z bazami danych, funkcje graficzne i sieciowe. Prezentuje on równie¿
                     O NOWO CIACH        dzia³anie PHP na przyk³adach realizuj¹cych sortowanie, przeszukiwanie, analizê
                                         ³añcuchów i inne zadania.
                       ZAMÓW CENNIK      Ksi¹¿ka sk³ada siê z czterech czê ci:
                                            1. wstêpu do programowania,
                 CZYTELNIA                  2. przewodnika po wszystkich funkcjach,
                                            3. przegl¹du typowych problemów programistycznych
          FRAGMENTY KSI¥¯EK ONLINE          4. czê ci umo¿liwiaj¹cej zastosowanie zdobytej wiedzy przy tworzeniu witryn.
                                         Pierwsza czê æ zajmuje siê kwestiami dotycz¹cymi wszystkich jêzyków
                                         programowania: jak wygl¹da skrypt PHP, jak sterowaæ przebiegiem programu
                                         i jak zarz¹dzaæ danymi.
                                         Czê æ druga organizuje funkcje wed³ug ich zastosowania i zawiera przyk³ady
                                         ich zastosowania. PHP udostêpnia bardzo du¿o funkcji, dlatego czê æ ta jest
                                         najobszerniejsza.
                                         Czê æ trzecia zajmuje siê rozwi¹zywaniem typowych problemów
                                         programistycznych, takich jak sortowanie czy generowanie grafiki.
                                         Ostatnia czê æ udziela porad dotycz¹cych tworzenia ca³ych witryn sieciowych
                                         za pomoc¹ PHP.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
    Słowo wstępne............................................................................................................................................. 9

    Przedmowa ..................................................................................................................................................11

Część I Programowanie w PHP...........................................................................................13
    Rozdział 1. Wprowadzenie do PHP .............................................................................................................15
             1.1.     Historia PHP ..................................................................................................... 16
             1.2.     Co sprawia, że PHP jest lepszy od innych języków? .............................................. 18
             1.3.     Interfejsy do systemów zewnętrznych .................................................................. 20
             1.4.     Jak PHP współpracuje z serwerem sieciowym?..................................................... 20
             1.5.     Wymagania sprzętowe i programowe................................................................... 21
             1.6.     Jak wygląda skrypt PHP?.................................................................................... 25
             1.7.     Przechowywanie danych ..................................................................................... 27
             1.8.     Odbieranie informacji od użytkownika.................................................................. 29
             1.9.     Wybieranie pomiędzy alternatywami .................................................................... 31
            1.10.     Powtarzanie sekwencji kodu ............................................................................... 32
    Rozdział 2. Zmienne, operatory i wyra enia........................................................................................... 35
              2.1.    Spojrzenie ogólne.............................................................................................. 35
              2.2.    Typy danych ...................................................................................................... 37
              2.3.    Zmienne ........................................................................................................... 40
              2.4.    Stałe ................................................................................................................ 45
              2.5.    Operatory.......................................................................................................... 45
              2.6.    Budowanie wyrażeń ........................................................................................... 57
    Rozdział 3. Instrukcje sterujące ...............................................................................................................61
              3.1.    Instrukcja if....................................................................................................... 61
              3.2.    Operator ? ........................................................................................................ 64
              3.3.    Instrukcja switch ............................................................................................... 64
              3.4.    Pętle ................................................................................................................ 66
              3.5.    Instrukcje exit, die i return ................................................................................. 72
              3.6.    Wyjątki ............................................................................................................. 73
              3.7.    Instrukcja Declare ............................................................................................. 74
    Rozdział 4. Funkcje .................................................................................................................................... 77
              4.1.    Deklarowanie funkcji.......................................................................................... 77
              4.2.    Instrukcja return................................................................................................ 78
              4.3.    Zakres.............................................................................................................. 79
              4.4.    Zmienne statyczne ............................................................................................ 81
              4.5.    Argumenty ........................................................................................................ 82
              4.6.    Rekurencja ....................................................................................................... 85
              4.7.    Dynamiczne wywołania funkcji ............................................................................ 86
4        PHP. Programowanie


    Rozdział 5. Tablice...................................................................................................................................... 87
              5.1.    Tablice jednowymiarowe..................................................................................... 87
              5.2.    Indeksowanie tablic........................................................................................... 88
              5.3.    Inicjalizacja tablic .............................................................................................. 89
              5.4.    Tablice wielowymiarowe ..................................................................................... 90
              5.5.    Rzutowanie tablic .............................................................................................. 91
              5.6.    Operator + ........................................................................................................ 92
              5.7.    Odwołania do tablic z wnętrza łańcucha............................................................... 93

    Rozdział 6. Klasy i obiekty......................................................................................................................... 95
             6.1.     Programowanie obiektowe.................................................................................. 96
             6.2.     Model obiektowy w PHP 5 .................................................................................. 97
             6.3.     Definiowanie klasy............................................................................................. 98
             6.4.     Konstruktory i destruktory ................................................................................ 100
             6.5.     Klonowanie ..................................................................................................... 102
             6.6.     Dostęp do metod i właściwości ........................................................................ 103
             6.7.     Statyczne składniki klas................................................................................... 106
             6.8.     Typy dostępności............................................................................................. 107
             6.9.     Wiązanie......................................................................................................... 111
            6.10.     Metody i klasy abstrakcyjne ............................................................................. 114
            6.11.     Przeciążanie z poziomu użytkownika.................................................................. 117
            6.12.     Automatyczne ładowanie klas........................................................................... 118
            6.13.     Serializacja obiektów ....................................................................................... 119
            6.14.     Przestrzenie nazw............................................................................................ 120
            6.15.     Ewolucja modułu Zend ..................................................................................... 122

    Rozdział 7. Operacje wejścia-wyjścia i dostęp do dysku......................................................................129
             7.1.     Połączenia HTTP.............................................................................................. 130
             7.2.     Wysyłanie treści do przeglądarki ....................................................................... 131
             7.3.     Buforowanie treści........................................................................................... 132
             7.4.     Zmienne środowiskowe.................................................................................... 133
             7.5.     Pobieranie danych z formularzy......................................................................... 133
             7.6.     Przesyłanie tablic w formularzach...................................................................... 134
             7.7.     Cookies .......................................................................................................... 135
             7.8.     Pobieranie plików od użytkownika ..................................................................... 136
             7.9.     Zapis do plików i ich odczytywanie .................................................................... 138
            7.10.     Sesje ............................................................................................................. 140
            7.11.     Funkcje include i require .................................................................................. 142
            7.12.     Nie ufaj danym użytkownika ............................................................................. 144


Część II Funkcje PHP ..........................................................................................................145
    Rozdział 8. Komunikacja z przeglądarką................................................................................................147
              8.1.    Zmienne generowane przez moduł PHP ............................................................. 147
              8.2.    Stałe generowane przez moduł PHP .................................................................. 152
              8.3.    Przesyłanie tekstu do przeglądarki .................................................................... 156
              8.4.    Buforowanie wyjścia ........................................................................................ 159
              8.5.    Obsługa sesji .................................................................................................. 162
              8.6.    Nagłówki HTTP ................................................................................................ 169
Spis treści              5


Rozdział 9. System operacyjny ...............................................................................................................173
         9.1.    Pliki................................................................................................................ 173
         9.2.    Pliki skompresowane ....................................................................................... 217
         9.3.    Direct I/O ....................................................................................................... 224
         9.4.    Diagnostyka.................................................................................................... 227
         9.5.    POSIX............................................................................................................. 252
         9.6.    Polecenia interpretera...................................................................................... 257
         9.7.    Sterowanie procesami ..................................................................................... 262

Rozdział 10. Funkcje sieciowe.................................................................................................................267
       10.1.     Ogólne funkcje sieciowe................................................................................... 267
       10.2.     Gniazda .......................................................................................................... 274
       10.3.     FTP ................................................................................................................ 289
       10.4.     Curl................................................................................................................ 300
       10.5.     SNMP............................................................................................................. 311

Rozdział 11. Funkcje przetwarzania danych ...........................................................................................315
       11.1.     Typy danych, stałe i zmienne ............................................................................ 315
       11.2.     Tablice ........................................................................................................... 326
       11.3.     Obiekty i klasy................................................................................................. 357
       11.4.     Funkcje definiowane przez użytkownika ............................................................. 361

Rozdział 12. Kodowanie i dekodowanie...................................................................................................367
       12.1.     Łańcuchy ........................................................................................................ 367
       12.2.     Porównywanie łańcuchów ................................................................................. 376
       12.3.     Kodowanie i dekodowanie................................................................................ 378
       12.4.     Kompresja ...................................................................................................... 401
       12.5.     Szyfrowanie .................................................................................................... 403
       12.6.     Mieszanie ....................................................................................................... 411
       12.7.     Sprawdzanie pisowni ....................................................................................... 416
       12.8.     Wyrażenia regularne ........................................................................................ 420
       12.9.     Kodowanie zestawów znaków ........................................................................... 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 obrazów ...................................................................................... 510
       16.2. Tworzenie obrazków......................................................................................... 513
6        PHP. Programowanie


    Rozdział 17. Bazy danych.........................................................................................................................557
            17.1.     Abstrakcyjna baza danych typu DBM ................................................................. 558
            17.2.     DBX ............................................................................................................... 562
            17.3.     LDAP .............................................................................................................. 566
            17.4.     MySQL ........................................................................................................... 578
            17.5.     ODBC ............................................................................................................. 591
            17.6.     Oracle ............................................................................................................ 606
            17.7.     Postgres......................................................................................................... 620
            17.8.     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.     Apache ........................................................................................................... 657
            19.2.     IMAP .............................................................................................................. 660
            19.3.     MnoGoSearch ................................................................................................. 681
            19.4.     OpenSSL ........................................................................................................ 686
            19.5.     Komunikaty systemu System V......................................................................... 696
            19.6.     Semafory systemu System V ............................................................................ 700
            19.7.     Pamięć wspólna 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.     Sortowanie ..................................................................................................... 740
            21.2.     Wbudowane funkcje sortujące .......................................................................... 740
            21.3.     Sortowanie z funkcją porównującą .................................................................... 744
            21.4.     Wyszukiwanie.................................................................................................. 746
            21.5.     Indeksowanie.................................................................................................. 748
            21.6.     Liczby losowe.................................................................................................. 749
            21.7.     Identyfikatory losowe ....................................................................................... 751
            21.8.     Losowanie banera reklamowego ....................................................................... 752
    Rozdział 22. Analiza składni i łańcuchów...............................................................................................755
            22.1.     Podział łańcuchów na elementy ........................................................................ 755
            22.2.     Wyrażenia regularne ........................................................................................ 757
            22.3.     Definiowanie wyrażeń regularnych ..................................................................... 758
            22.4.     Stosowanie wyrażeń regularnych w skryptach PHP.............................................. 759
    Rozdział 23. Integracja z bazami danych ..............................................................................................767
            23.1.     Tworzenie tabel HTML z rezultatami zapytań SQL ............................................... 767
            23.2.     Śledzenie odwiedzających za pomocą identyfikatorów sesji................................. 772
            23.3.     Przechowywanie danych w bazie ....................................................................... 780
            23.4.     Warstwy abstrakcyjne baz danych ..................................................................... 786
Spis treści               7


    Rozdział 24. Sieć ......................................................................................................................................787
            24.1.     Uwierzytelnianie w HTTP................................................................................... 787
            24.2.     Sterowanie buforem przeglądarki ...................................................................... 790
            24.3.     Ustawianie typu dokumentu ............................................................................. 791
            24.4.     E-mail z załącznikami ....................................................................................... 792
            24.5.     Wiadomości pocztowe HTML ............................................................................ 795
            24.6.     Weryfikacja adresu skrzynki pocztowej .............................................................. 798

    Rozdział 25. Generowanie grafiki ..........................................................................................................803
            25.1.     Przyciski dynamiczne ....................................................................................... 803
            25.2.     Generowanie grafiki „w locie”........................................................................... 808
            25.3.     Wykresy słupkowe ........................................................................................... 808
            25.4.     Wykresy kołowe............................................................................................... 811
            25.5.     Rozciąganie pojedynczych pikseli ...................................................................... 813


Część IV In ynieria oprogramowania..............................................................................815
    Rozdział 26. Integracja z HTML-em .........................................................................................................817
            26.1.     Umieszczanie fragmentów kodu PHP w dokumencie HTML.................................. 817
            26.2.     Używanie PHP do generowania całych dokumentów HTML................................... 823
            26.3.     Separowanie HTML-a od PHP ........................................................................... 824
            26.4.     Generowanie kodu HTML za pomocą PHP.......................................................... 826

    Rozdział 27. Projektowanie ....................................................................................................................829
            27.1.     Tworzenie specyfikacji wymagań ....................................................................... 830
            27.2.     Tworzenie dokumentów projektowych ................................................................ 833
            27.3.     Zarządzanie zmianami ..................................................................................... 834
            27.4.     Modularyzacja za pomocą include ..................................................................... 839
            27.5.     FreeEnergy...................................................................................................... 840
            27.6.     Szablony......................................................................................................... 842
            27.7.     Szkielety aplikacji ............................................................................................ 846
            27.8.     PEAR .............................................................................................................. 847
            27.9.     Adresy przyjazne wyszukiwarkom ...................................................................... 848

    Rozdział 28. Efektywność i diagnostyka.................................................................................................851
           28.1. Optymalizacja.................................................................................................. 852
           28.2. Mierzenie wydajności ....................................................................................... 853
           28.3. Optymalizacja najwolniej wykonywanych fragmentów........................................... 857
           28.4. Kiedy przechowywać treść w bazie .................................................................... 859
           28.5. Strategie diagnostyczne ................................................................................... 859
           28.6. Symulowanie połączeń HTTP ............................................................................ 860
           28.7. Buforowanie treści strony................................................................................. 861
           28.8. Kompresja generowanej treści.......................................................................... 862
           28.9. Unikanie eval .................................................................................................. 863
          28.10. Unikanie dynamicznego ładowania rozszerzeń.................................................... 865
          28.11. Zwiększanie szybkości realizacji zapytań MySQL ................................................ 866
          28.12. Optymalizacja sesji zapisujących dane na dysku ................................................ 867
          28.13. Unikanie przekazywania argumentów przez odwołania
                 (czyli dlaczego nie ufać instynktowi) .................................................................. 868
          28.14. Unikanie konkatenacji dużych łańcuchów........................................................... 870
          28.15. Unikanie umieszczania dużych plików na serwerze Apache z uaktywnionym PHP ... 871
8        PHP. Programowanie

          28.16.      Rola trwałych połączeń z bazą danych ............................................................... 871
          28.17.      Unikanie w miarę możliwości korzystania z exec, operatorów ` i system............... 872
          28.18.      Zastosowanie php.ini-recommended ................................................................. 873
          28.19.      Stosowanie wyrażeń regularnych tylko tam, gdzie są niezbędne........................... 873
          28.20.      Optymalizacja pętli .......................................................................................... 873
          28.21.      Konfiguracja serwera IIS .................................................................................. 874

    Rozdział 29. Wzorce projektowe ...........................................................................................................875
            29.1.     Definicja wzorców ............................................................................................ 875
            29.2.     Singleton ........................................................................................................ 877
            29.3.     Fabryka .......................................................................................................... 880
            29.4.     Obserwator ..................................................................................................... 882
            29.5.     Strategia ........................................................................................................ 885


Dodatki...............................................................................................................................889
    Dodatek A Kody z ukośnikiem ..................................................................................................................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 składni i łańcuchów
   W tym rozdziale:
     n   Podział łańcuchów na elementy.
     n   Wyra enia regularne.
     n   Definiowanie wyra eń regularnych.
     n   Stosowanie wyra eń regularnych w skryptach PHP.

   Analiza składni polega na podziale całości na elementy składowe, zwykle dotyczy to podziału
   zdania na poszczególne wyrazy. PHP musi zanalizować napisany przez nas kod w pierw-
   szym kroku procesu przekształcania go w dokument HTML. Czasami staniemy równie
   przed problemem pobierania i weryfikacji danych zawartych w łańcuchach tekstowych. Mo e
   to być np. prosta lista oddzielona tabulatorami lub skomplikowany łańcuch, jakiego przeglą-
   darka u ywa do swojej identyfikacji w obliczu serwera sieciowego. Mo na wówczas podzie-
   lić łańcuch na poszczególne elementy lub zastosować wyra enie regularne. W rozdziale
   tym opisane zostały funkcje analizujące składnię oraz treść łańcuchów.



22.1. Podział łańcuchów na elementy
   PHP udostępnia prosty model dzielenia łańcuchów. Wybrane przez nas znaki są uznawane
   za separatory, a fragmenty łańcucha, znajdujące się między separatorami, są uznawane za
   pojedyncze elementy. Z ka dym pobranym elementem mo na zmieniać zestaw znaków sepa-
   rujących, co jest wygodne w przypadku nieregularnych łańcuchów — to znaczy tych, które
   nie są prostymi listami oddzielonymi przecinkami.

   Listing 22.1 pobiera zdanie i dzieli je na poszczególne słowa za pomocą funkcji UVTVQM,
   opisanej w rozdziale 12. W przypadku skryptu słowa są otoczone spacjami, znakami prze-
   stankowymi lub końca zdania. Cudzysłowy i apostrofy są uznawane za część wyrazu. Efekt
   działania przykładowego skryptu jest widoczny na rysunku 22.1.
756    Część III n Algorytmy

Listing 22.1. Podział łańcucha na elementy
          !RJR
PHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie III
,G GNK RTGU CPQ FCPKG FQMQPWLG LGIQ CPCNK[
KH
KUUGV
 A4'37'56= UGPVGPEG ?
              ]
                   VQVCN

                  RTKPV
 D 2TGU CP[ VGMUVD 
                  RTKPV
 ] A4'37'56= UGPVGPEG ?_DT PDT P 

                  WUVCNC PCMK MVÎTG UGRCTWLæ RQUEGIÎNPG GNGOGPV[ C EWEJC
                   UGRCTCVQTU   ! 

                  RQDKGTC MQNGLPQ YU[UVMKG GNGOGPV[
                  HQT
 VQMGP  UVTVQM
 A4'37'56= UGPVGPEG ? UGRCTCVQTU
                       VQMGP  (#.5'
                        VQMGP  UVTVQM
 UGRCTCVQTU
                  ]
                      RQOKLC RWUVG GNGOGPV[
                      KH
 VQMGP  
                      ]
                            NKE[ Y[UVæRKGPKC MC FGIQ  Y[TCÎY
                           KH
 KUUGV
 YQTFAEQWPV=UVTVQNQYGT
 VQMGP?
                           ]
                                 YQTFAEQWPV=UVTVQNQYGT
 VQMGP?
                           _
                           GNUG
                           ]
                                 YQTFAEQWPV=UVTVQNQYGT
 VQMGP?


                           _
                             VQVCN


                      _
                  _

                  Y RKGTYUGL MQNGLPQ EK UQTVWLG YINúFGO U ÎY
                  MUQTV
 YQTFAEQWPV

                  PCUVúRPKG UQTVWLG YINúFGO EúUVQ EK Y[UVúRQYCPKC
                  CTUQTV
 YQTFAEQWPV

                  RTKPV
 D 1FPCNGKQPQ VQVCN U ÎYD P 
                  RTKPV
 WN P 
                  HQTGCEJ
 YQTFAEQWPV CU MG[ XCNWG
                  ]
                      RTKPV
 NK MG[ 
 XCNWGNK P 
                  _
                  RTKPV
 WN P 
              _

              RTKPV
 HQTO CEVKQP ] A5'48'4= 2*2A5'.( ?_  
                   OGVJQF RQUV P 
              RTKPV
 KPRWV PCOG UGPVGPEG UKG  P 
              RTKPV
 KPRWV V[RG UWDOKV XCNWG #PCNKWL P 
              RTKPV
 HQTO P 
          !
Rozdział 22. n Analiza składni i łańcuchów   757

Rysunek 22.1.
Efekt działania skryptu
z listingu 22.1




       Warto zwrócić uwagę na rolę pętli HQT w powy szym przykładzie. Zamiast inkrementacji
       wartości całkowitej pobiera ona kolejne elementy łańcucha. Kiedy funkcja UVTVQM trafi na
       koniec danych wejściowych, zwróci (#.5'. Pierwszą myślą mo e być sprawdzanie w pętli
       wystąpienia wartości (#.5' za pomocą operatora . Nale y pamiętać, e pusty łańcuch ma
       wartość logiczną (#.5'. Je eli dwa separatory następują po sobie, UVTVQM, jak mo na się
       spodziewać, zwróci pusty łańcuch. Poniewa nie chcemy, aby operacja dzielenia łańcucha
       została przerwana na pierwszym powtórzonym separatorze, konieczne jest sprawdzenie wy-
       stąpienia rzeczywistej wartości (#.5' za pomocą operatora .

       Funkcja UVTVQM jest u yteczna tylko w najprostszych i najbardziej uporządkowanych przypad-
       kach. Przykładem mo e być odczyt pliku tekstowego, separowanego tabulatorami. Algo-
       rytm polegać mo e wówczas na odczycie wiersza z pliku, podziale wiersza na elementy,
       stosując tabulator w roli separatora i przejściu do odczytu kolejnego wiersza z pliku.



22.2. Wyra enia regularne
       Na szczęście PHP udostępnia równie o wiele doskonalsze narzędzie ni funkcja UVTVQM
       — wyra enia regularne. U ywają one własnego języka do opisu wzorców, które są porów-
       nywane z łańcuchami. Kod źródłowy PHP zawiera implementację wyra eń regularnych
       zgodnych z normą POSIX 1003.2. Norma ta umo liwia stosowanie wyra eń starszego typu,
       ale sugeruje korzystanie z nowego typu, który zostanie tu opisany. Wszystkie funkcje zwią-
       zane z wyra eniami regularnymi są opisane w rozdziale 12.

       W 1999 r. Andrei Zmievski wzbogacił PHP o współpracę z wyra eniami regularnymi, stoso-
       wanymi w języku Perl. Mają one dwie zalety w stosunku do wbudowanych wyra eń regu-
       larnych PHP: ułatwiają kopiowanie wyra eń ze skryptów Perl i wykonują się szybciej.

       Dokładny opis wyra eń regularnych wykracza poza ramy tego tekstu. Jest to zagadnienie
       godne następnej ksią ki. Zostaną tu objaśnione podstawy oraz pokazane ró ne funkcje
       PHP, które u ywają wyra eń regularnych. Świetnym źródłem informacji o wyra eniach regu-
758       Część III n Algorytmy

          larnych jest rozdział 2. ksią ki Ellie Quigley, UNIX Shells by Example. Wyra enia regularne
          stosowane w Perlu są opisane w oficjalnej dokumentacji Perla pod adresem http://www.perldoc.
          com/perl5.8.0/pod/perlre.html. Następnie nale y przeczytać w dokumentacji na stronie PHP
          o ró nicach między implementacją tych wyra eń w Perlu a w PHP: http://www.php.net/manual/
          åpcre.pattern.syntax.php.



22.3. Definiowanie wyra eń regularnych
          Na najwy szym poziomie wyra enia regularne składają się z jednej lub więcej gałęzi, oddzielo-
          nych znakiem pionowej kreski (^). Znak ten ma właściwości operatora logicznego .7$.
          Ka da z gałęzi mo e odpowiadać testowanemu łańcuchowi. Kilka przykładów znajduje się
          w tabeli 22.1.

Tabela 22.1. Warianty w wyrażeniach regularnych

  Próbka                          Opis
  LCD MQ                          Odpowiada słowu „jabłko”.
  LCD MQ^RK MC                    Odpowiada słowu „jabłko” lub „piłka”.
  RQEæVGM^MQPKGE^RTGTYC         Odpowiada słowom „początek”, „koniec” lub „przerwa”.

          Ka dy z wariantów zawiera jeden lub więcej atomów. Po atomach mogą występować znaki
          modyfikujące mo liwą liczbę kolejnych trafień dla danego atomu. Gwiazdka (
) oznacza,
           e atom mo e występować dowolną liczbę razy. Symbol dodawania (
) oznacza, e atom
          musi występować przynajmniej raz. Znak zapytania (!) oznacza, e atom mo e występo-
          wać raz lub ani razu.

          Alternatywnie atom mo e być związany, co oznacza, e następują po nim nawiasy klamrowe
          (]_), które zawierają liczby całkowite. Je eli nawiasy klamrowe zawierają pojedynczą liczbę,
          wówczas atom musi występować dokładnie tę liczbę razy. Je eli w nawiasach znajduje się
          pojedyncza liczba, po której następuje przecinek, atom musi występować tyle lub więcej
          razy. Je eli klamry zawierają dwie liczby oddzielone przecinkiem, atom musi występować
          liczbę razy zawartą w przedziale między tymi liczbami. W tabeli 22.2 przedstawione są
          przykłady repetycji.

Tabela 22.2. Wzorce z repetycją w wyrażeniach regularnych

  Próbka          Opis
  C
D
Odpowiada C, CD, CDD, … — znak C plus dowolna liczba znaków D
  C
D
           Odpowiada CD, CDD, CDDD, … — znak C plus jeden lub więcej znaków D
  C
D!           Odpowiada C lub CD — znak C, po którym mo e wystąpić znak D
  C
D]_         Odpowiada tylko CDDD
  C
D]_        Odpowiada CDD, CDDD, CDDDD, … — znak C, po którym następuje jeden lub więcej znaków D
  C
D]_       Odpowiada CDD, CDDD, CDDDD — znak C, po którym następują dwa, trzy lub cztery znaki D
Rozdział 22. n Analiza składni i łańcuchów           759

        Atom jest szeregiem znaków, z których niektóre mają specjalne znaczenie, a inne oznaczają
        po prostu znak, który ma występować w łańcuchu. Kropka () zastępuje dowolny pojedynczy
        znak. Karetka (@) zastępuje początek łańcucha. Symbol dolara ( ) zastępuje koniec łańcucha.
        Je eli w łańcuchu ma występować jeden ze znaków specjalnych (@ = ? 
  ^

More Related Content

PDF
PHP. Programowanie
PDF
Po prostu PHP. Techniki zaawansowane
PDF
PHP5. Praktyczny kurs
PDF
Programowanie w języku C. Szybki start
PDF
Pajączek 5 NxG
PDF
Aplikacje w Delphi. Przykłady. Wydanie II
PDF
Po prostu Pajączek 5 NxG
PDF
PHP5. Profesjonalne tworzenie oprogramowania
PHP. Programowanie
Po prostu PHP. Techniki zaawansowane
PHP5. Praktyczny kurs
Programowanie w języku C. Szybki start
Pajączek 5 NxG
Aplikacje w Delphi. Przykłady. Wydanie II
Po prostu Pajączek 5 NxG
PHP5. Profesjonalne tworzenie oprogramowania

What's hot (20)

PDF
Profesjonalne programowanie. Część 1. Zrozumieć komputer
PDF
Efektywne programowanie w języku Java
PDF
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
PDF
C. Leksykon kieszonkowy
PDF
C#. Ćwiczenia
PDF
Pajączek 5 NxG. Ćwiczenia praktyczne
PDF
PHP w mgnieniu oka
PDF
C# i ASP.NET. Szybki start
PDF
Prolog. Programowanie
PDF
Win32ASM. Asembler w Windows
PDF
Flash i PHP5. Podstawy
PDF
Asembler. Podręcznik programisty
PDF
PHP5. Zaawansowane programowanie
PDF
ActionScript. Receptury
PDF
Praktyczny kurs asemblera
PDF
PHP5. Tajniki programowania
PDF
Uczta programistów
PDF
122 sposoby na OpenOffice.ux.pl 2.0
PDF
Struktura organizacyjna i architektura systemów komputerowych
PDF
C++. Styl i technika zaawansowanego programowania
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Efektywne programowanie w języku Java
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
C. Leksykon kieszonkowy
C#. Ćwiczenia
Pajączek 5 NxG. Ćwiczenia praktyczne
PHP w mgnieniu oka
C# i ASP.NET. Szybki start
Prolog. Programowanie
Win32ASM. Asembler w Windows
Flash i PHP5. Podstawy
Asembler. Podręcznik programisty
PHP5. Zaawansowane programowanie
ActionScript. Receptury
Praktyczny kurs asemblera
PHP5. Tajniki programowania
Uczta programistów
122 sposoby na OpenOffice.ux.pl 2.0
Struktura organizacyjna i architektura systemów komputerowych
C++. Styl i technika zaawansowanego programowania
Ad

Viewers also liked (11)

PDF
C++. Kruczki i fortele w programowaniu
PDF
多愁善感而初次回憶的青春:縱論羅大佑(上)
PDF
Narrative learning to ride
PDF
Adobe Photoshop 7. Wystarczy jedno kliknięcie!
PDF
Narrative learning to ride 2
PPT
Eitc Slideshow
PDF
Sztuka wojny
PDF
Thinking in Photoshop
PPTX
Office 365-single-sign-on-with-adfs
PDF
Les professionnels de l'immobilier et les réseaux sociaux - Etude #DigImmo
PPTX
Introduction to Agile & Agile MindSet
C++. Kruczki i fortele w programowaniu
多愁善感而初次回憶的青春:縱論羅大佑(上)
Narrative learning to ride
Adobe Photoshop 7. Wystarczy jedno kliknięcie!
Narrative learning to ride 2
Eitc Slideshow
Sztuka wojny
Thinking in Photoshop
Office 365-single-sign-on-with-adfs
Les professionnels de l'immobilier et les réseaux sociaux - Etude #DigImmo
Introduction to Agile & Agile MindSet
Ad

Similar to PHP. Programowanie. Wydanie III (20)

PDF
PHP5. Radocha z programowania
PDF
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PDF
PHP5. Księga eksperta
PDF
PHP4. Zaawansowane programowanie
PDF
PHP5. Obiekty, wzorce, narzędzia
PDF
PHP. Praktyczne wprowadzenie
PDF
PHP i MySQL. Dynamiczne strony WWW. Szybki start
DOC
Helion.2005.php.i.my sql.tworzenie.stron.www.vademecum.profesjonalisty.wyd3
PDF
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PDF
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PDF
PHP5 i MySQL. Biblia
PDF
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PDF
PHP, MySQL i Apache dla każdego. Wydanie II
PDF
PHP. 101 praktycznych skryptów. Wydanie II
PDF
PHP. Rozmówki
PDF
Python. Od podstaw
PDF
Język C++. Szkoła programowania. Wydanie V
PDF
PHP i MySQL. Aplikacje bazodanowe
PDF
PHP i MySQL. Wprowadzenie. Wydanie II
PDF
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP5. Radocha z programowania
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP5. Księga eksperta
PHP4. Zaawansowane programowanie
PHP5. Obiekty, wzorce, narzędzia
PHP. Praktyczne wprowadzenie
PHP i MySQL. Dynamiczne strony WWW. Szybki start
Helion.2005.php.i.my sql.tworzenie.stron.www.vademecum.profesjonalisty.wyd3
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP5 i MySQL. Biblia
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP, MySQL i Apache dla każdego. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie II
PHP. Rozmówki
Python. Od podstaw
Język C++. Szkoła programowania. Wydanie V
PHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II

More from Wydawnictwo Helion (20)

PDF
Tworzenie filmów w Windows XP. Projekty
PDF
Blog, więcej niż internetowy pamiętnik
PDF
Access w biurze i nie tylko
PDF
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
PDF
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
PDF
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
PDF
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
PDF
Makrofotografia. Magia szczegółu
PDF
Windows PowerShell. Podstawy
PDF
Java. Efektywne programowanie. Wydanie II
PDF
JavaScript. Pierwsze starcie
PDF
Ajax, JavaScript i PHP. Intensywny trening
PDF
PowerPoint 2007 PL. Seria praktyk
PDF
Excel 2007 PL. Seria praktyk
PDF
Access 2007 PL. Seria praktyk
PDF
Word 2007 PL. Seria praktyk
PDF
Serwisy społecznościowe. Budowa, administracja i moderacja
PDF
AutoCAD 2008 i 2008 PL
PDF
Bazy danych. Pierwsze starcie
PDF
Inventor. Pierwsze kroki
Tworzenie filmów w Windows XP. Projekty
Blog, więcej niż internetowy pamiętnik
Access w biurze i nie tylko
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Makrofotografia. Magia szczegółu
Windows PowerShell. Podstawy
Java. Efektywne programowanie. Wydanie II
JavaScript. Pierwsze starcie
Ajax, JavaScript i PHP. Intensywny trening
PowerPoint 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
Serwisy społecznościowe. Budowa, administracja i moderacja
AutoCAD 2008 i 2008 PL
Bazy danych. Pierwsze starcie
Inventor. Pierwsze kroki

PHP. Programowanie. Wydanie III

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI PHP. Programowanie. Wydanie III KATALOG KSI¥¯EK Autorzy: Leon Atkinson, Zeev Suraski KATALOG ONLINE T³umaczenie: Jaros³aw Dobrzañski ISBN: 83-7361-355-2 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: Core PHP Programming, 3 Edition Format: B5, stron: 952 TWÓJ KOSZYK Ksi¹¿ka „PHP. Programowanie. Wydanie III” to kolejne wydanie praktycznego DODAJ DO KOSZYKA przewodnika dla programistów stron internetowych. Jeden z najlepszych programistów PHP — Leon Atkinson, uczy wszystkiego, co potrzebujesz, by stworzyæ dobr¹ i szybk¹ aplikacjê sieciow¹. Dok³adnie opisuje sk³adniê PHP i kluczowe elementy jêzyka. CENNIK I INFORMACJE Atkinson przedstawia tak¿e najwa¿niejsze funkcje PHP, w tym funkcje wej cia-wyj cia, przetwarzania danych, matematyczne, daty, czasu, konfiguracji, funkcje umo¿liwiaj¹ce ZAMÓW INFORMACJE wspó³pracê z bazami danych, funkcje graficzne i sieciowe. Prezentuje on równie¿ O NOWO CIACH dzia³anie PHP na przyk³adach realizuj¹cych sortowanie, przeszukiwanie, analizê ³añcuchów i inne zadania. ZAMÓW CENNIK Ksi¹¿ka sk³ada siê z czterech czê ci: 1. wstêpu do programowania, CZYTELNIA 2. przewodnika po wszystkich funkcjach, 3. przegl¹du typowych problemów programistycznych FRAGMENTY KSI¥¯EK ONLINE 4. czê ci umo¿liwiaj¹cej zastosowanie zdobytej wiedzy przy tworzeniu witryn. Pierwsza czê æ zajmuje siê kwestiami dotycz¹cymi wszystkich jêzyków programowania: jak wygl¹da skrypt PHP, jak sterowaæ przebiegiem programu i jak zarz¹dzaæ danymi. Czê æ druga organizuje funkcje wed³ug ich zastosowania i zawiera przyk³ady ich zastosowania. PHP udostêpnia bardzo du¿o funkcji, dlatego czê æ ta jest najobszerniejsza. Czê æ trzecia zajmuje siê rozwi¹zywaniem typowych problemów programistycznych, takich jak sortowanie czy generowanie grafiki. Ostatnia czê æ udziela porad dotycz¹cych tworzenia ca³ych witryn sieciowych za pomoc¹ PHP. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Słowo wstępne............................................................................................................................................. 9 Przedmowa ..................................................................................................................................................11 Część I Programowanie w PHP...........................................................................................13 Rozdział 1. Wprowadzenie do PHP .............................................................................................................15 1.1. Historia PHP ..................................................................................................... 16 1.2. Co sprawia, że PHP jest lepszy od innych języków? .............................................. 18 1.3. Interfejsy do systemów zewnętrznych .................................................................. 20 1.4. Jak PHP współpracuje z serwerem sieciowym?..................................................... 20 1.5. Wymagania sprzętowe i programowe................................................................... 21 1.6. Jak wygląda skrypt PHP?.................................................................................... 25 1.7. Przechowywanie danych ..................................................................................... 27 1.8. Odbieranie informacji od użytkownika.................................................................. 29 1.9. Wybieranie pomiędzy alternatywami .................................................................... 31 1.10. Powtarzanie sekwencji kodu ............................................................................... 32 Rozdział 2. Zmienne, operatory i wyra enia........................................................................................... 35 2.1. Spojrzenie ogólne.............................................................................................. 35 2.2. Typy danych ...................................................................................................... 37 2.3. Zmienne ........................................................................................................... 40 2.4. Stałe ................................................................................................................ 45 2.5. Operatory.......................................................................................................... 45 2.6. Budowanie wyrażeń ........................................................................................... 57 Rozdział 3. Instrukcje sterujące ...............................................................................................................61 3.1. Instrukcja if....................................................................................................... 61 3.2. Operator ? ........................................................................................................ 64 3.3. Instrukcja switch ............................................................................................... 64 3.4. Pętle ................................................................................................................ 66 3.5. Instrukcje exit, die i return ................................................................................. 72 3.6. Wyjątki ............................................................................................................. 73 3.7. Instrukcja Declare ............................................................................................. 74 Rozdział 4. Funkcje .................................................................................................................................... 77 4.1. Deklarowanie funkcji.......................................................................................... 77 4.2. Instrukcja return................................................................................................ 78 4.3. Zakres.............................................................................................................. 79 4.4. Zmienne statyczne ............................................................................................ 81 4.5. Argumenty ........................................................................................................ 82 4.6. Rekurencja ....................................................................................................... 85 4.7. Dynamiczne wywołania funkcji ............................................................................ 86
  • 3. 4 PHP. Programowanie Rozdział 5. Tablice...................................................................................................................................... 87 5.1. Tablice jednowymiarowe..................................................................................... 87 5.2. Indeksowanie tablic........................................................................................... 88 5.3. Inicjalizacja tablic .............................................................................................. 89 5.4. Tablice wielowymiarowe ..................................................................................... 90 5.5. Rzutowanie tablic .............................................................................................. 91 5.6. Operator + ........................................................................................................ 92 5.7. Odwołania do tablic z wnętrza łańcucha............................................................... 93 Rozdział 6. Klasy i obiekty......................................................................................................................... 95 6.1. Programowanie obiektowe.................................................................................. 96 6.2. Model obiektowy w PHP 5 .................................................................................. 97 6.3. Definiowanie klasy............................................................................................. 98 6.4. Konstruktory i destruktory ................................................................................ 100 6.5. Klonowanie ..................................................................................................... 102 6.6. Dostęp do metod i właściwości ........................................................................ 103 6.7. Statyczne składniki klas................................................................................... 106 6.8. Typy dostępności............................................................................................. 107 6.9. Wiązanie......................................................................................................... 111 6.10. Metody i klasy abstrakcyjne ............................................................................. 114 6.11. Przeciążanie z poziomu użytkownika.................................................................. 117 6.12. Automatyczne ładowanie klas........................................................................... 118 6.13. Serializacja obiektów ....................................................................................... 119 6.14. Przestrzenie nazw............................................................................................ 120 6.15. Ewolucja modułu Zend ..................................................................................... 122 Rozdział 7. Operacje wejścia-wyjścia i dostęp do dysku......................................................................129 7.1. Połączenia HTTP.............................................................................................. 130 7.2. Wysyłanie treści do przeglądarki ....................................................................... 131 7.3. Buforowanie treści........................................................................................... 132 7.4. Zmienne środowiskowe.................................................................................... 133 7.5. Pobieranie danych z formularzy......................................................................... 133 7.6. Przesyłanie tablic w formularzach...................................................................... 134 7.7. Cookies .......................................................................................................... 135 7.8. Pobieranie plików od użytkownika ..................................................................... 136 7.9. Zapis do plików i ich odczytywanie .................................................................... 138 7.10. Sesje ............................................................................................................. 140 7.11. Funkcje include i require .................................................................................. 142 7.12. Nie ufaj danym użytkownika ............................................................................. 144 Część II Funkcje PHP ..........................................................................................................145 Rozdział 8. Komunikacja z przeglądarką................................................................................................147 8.1. Zmienne generowane przez moduł PHP ............................................................. 147 8.2. Stałe generowane przez moduł PHP .................................................................. 152 8.3. Przesyłanie tekstu do przeglądarki .................................................................... 156 8.4. Buforowanie wyjścia ........................................................................................ 159 8.5. Obsługa sesji .................................................................................................. 162 8.6. Nagłówki HTTP ................................................................................................ 169
  • 4. Spis treści 5 Rozdział 9. System operacyjny ...............................................................................................................173 9.1. Pliki................................................................................................................ 173 9.2. Pliki skompresowane ....................................................................................... 217 9.3. Direct I/O ....................................................................................................... 224 9.4. Diagnostyka.................................................................................................... 227 9.5. POSIX............................................................................................................. 252 9.6. Polecenia interpretera...................................................................................... 257 9.7. Sterowanie procesami ..................................................................................... 262 Rozdział 10. Funkcje sieciowe.................................................................................................................267 10.1. Ogólne funkcje sieciowe................................................................................... 267 10.2. Gniazda .......................................................................................................... 274 10.3. FTP ................................................................................................................ 289 10.4. Curl................................................................................................................ 300 10.5. SNMP............................................................................................................. 311 Rozdział 11. Funkcje przetwarzania danych ...........................................................................................315 11.1. Typy danych, stałe i zmienne ............................................................................ 315 11.2. Tablice ........................................................................................................... 326 11.3. Obiekty i klasy................................................................................................. 357 11.4. Funkcje definiowane przez użytkownika ............................................................. 361 Rozdział 12. Kodowanie i dekodowanie...................................................................................................367 12.1. Łańcuchy ........................................................................................................ 367 12.2. Porównywanie łańcuchów ................................................................................. 376 12.3. Kodowanie i dekodowanie................................................................................ 378 12.4. Kompresja ...................................................................................................... 401 12.5. Szyfrowanie .................................................................................................... 403 12.6. Mieszanie ....................................................................................................... 411 12.7. Sprawdzanie pisowni ....................................................................................... 416 12.8. Wyrażenia regularne ........................................................................................ 420 12.9. Kodowanie zestawów znaków ........................................................................... 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 obrazów ...................................................................................... 510 16.2. Tworzenie obrazków......................................................................................... 513
  • 5. 6 PHP. Programowanie Rozdział 17. Bazy danych.........................................................................................................................557 17.1. Abstrakcyjna baza danych typu DBM ................................................................. 558 17.2. DBX ............................................................................................................... 562 17.3. LDAP .............................................................................................................. 566 17.4. MySQL ........................................................................................................... 578 17.5. ODBC ............................................................................................................. 591 17.6. Oracle ............................................................................................................ 606 17.7. Postgres......................................................................................................... 620 17.8. 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. Apache ........................................................................................................... 657 19.2. IMAP .............................................................................................................. 660 19.3. MnoGoSearch ................................................................................................. 681 19.4. OpenSSL ........................................................................................................ 686 19.5. Komunikaty systemu System V......................................................................... 696 19.6. Semafory systemu System V ............................................................................ 700 19.7. Pamięć wspólna 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. Sortowanie ..................................................................................................... 740 21.2. Wbudowane funkcje sortujące .......................................................................... 740 21.3. Sortowanie z funkcją porównującą .................................................................... 744 21.4. Wyszukiwanie.................................................................................................. 746 21.5. Indeksowanie.................................................................................................. 748 21.6. Liczby losowe.................................................................................................. 749 21.7. Identyfikatory losowe ....................................................................................... 751 21.8. Losowanie banera reklamowego ....................................................................... 752 Rozdział 22. Analiza składni i łańcuchów...............................................................................................755 22.1. Podział łańcuchów na elementy ........................................................................ 755 22.2. Wyrażenia regularne ........................................................................................ 757 22.3. Definiowanie wyrażeń regularnych ..................................................................... 758 22.4. Stosowanie wyrażeń regularnych w skryptach PHP.............................................. 759 Rozdział 23. Integracja z bazami danych ..............................................................................................767 23.1. Tworzenie tabel HTML z rezultatami zapytań SQL ............................................... 767 23.2. Śledzenie odwiedzających za pomocą identyfikatorów sesji................................. 772 23.3. Przechowywanie danych w bazie ....................................................................... 780 23.4. Warstwy abstrakcyjne baz danych ..................................................................... 786
  • 6. Spis treści 7 Rozdział 24. Sieć ......................................................................................................................................787 24.1. Uwierzytelnianie w HTTP................................................................................... 787 24.2. Sterowanie buforem przeglądarki ...................................................................... 790 24.3. Ustawianie typu dokumentu ............................................................................. 791 24.4. E-mail z załącznikami ....................................................................................... 792 24.5. Wiadomości pocztowe HTML ............................................................................ 795 24.6. Weryfikacja adresu skrzynki pocztowej .............................................................. 798 Rozdział 25. Generowanie grafiki ..........................................................................................................803 25.1. Przyciski dynamiczne ....................................................................................... 803 25.2. Generowanie grafiki „w locie”........................................................................... 808 25.3. Wykresy słupkowe ........................................................................................... 808 25.4. Wykresy kołowe............................................................................................... 811 25.5. Rozciąganie pojedynczych pikseli ...................................................................... 813 Część IV In ynieria oprogramowania..............................................................................815 Rozdział 26. Integracja z HTML-em .........................................................................................................817 26.1. Umieszczanie fragmentów kodu PHP w dokumencie HTML.................................. 817 26.2. Używanie PHP do generowania całych dokumentów HTML................................... 823 26.3. Separowanie HTML-a od PHP ........................................................................... 824 26.4. Generowanie kodu HTML za pomocą PHP.......................................................... 826 Rozdział 27. Projektowanie ....................................................................................................................829 27.1. Tworzenie specyfikacji wymagań ....................................................................... 830 27.2. Tworzenie dokumentów projektowych ................................................................ 833 27.3. Zarządzanie zmianami ..................................................................................... 834 27.4. Modularyzacja za pomocą include ..................................................................... 839 27.5. FreeEnergy...................................................................................................... 840 27.6. Szablony......................................................................................................... 842 27.7. Szkielety aplikacji ............................................................................................ 846 27.8. PEAR .............................................................................................................. 847 27.9. Adresy przyjazne wyszukiwarkom ...................................................................... 848 Rozdział 28. Efektywność i diagnostyka.................................................................................................851 28.1. Optymalizacja.................................................................................................. 852 28.2. Mierzenie wydajności ....................................................................................... 853 28.3. Optymalizacja najwolniej wykonywanych fragmentów........................................... 857 28.4. Kiedy przechowywać treść w bazie .................................................................... 859 28.5. Strategie diagnostyczne ................................................................................... 859 28.6. Symulowanie połączeń HTTP ............................................................................ 860 28.7. Buforowanie treści strony................................................................................. 861 28.8. Kompresja generowanej treści.......................................................................... 862 28.9. Unikanie eval .................................................................................................. 863 28.10. Unikanie dynamicznego ładowania rozszerzeń.................................................... 865 28.11. Zwiększanie szybkości realizacji zapytań MySQL ................................................ 866 28.12. Optymalizacja sesji zapisujących dane na dysku ................................................ 867 28.13. Unikanie przekazywania argumentów przez odwołania (czyli dlaczego nie ufać instynktowi) .................................................................. 868 28.14. Unikanie konkatenacji dużych łańcuchów........................................................... 870 28.15. Unikanie umieszczania dużych plików na serwerze Apache z uaktywnionym PHP ... 871
  • 7. 8 PHP. Programowanie 28.16. Rola trwałych połączeń z bazą danych ............................................................... 871 28.17. Unikanie w miarę możliwości korzystania z exec, operatorów ` i system............... 872 28.18. Zastosowanie php.ini-recommended ................................................................. 873 28.19. Stosowanie wyrażeń regularnych tylko tam, gdzie są niezbędne........................... 873 28.20. Optymalizacja pętli .......................................................................................... 873 28.21. Konfiguracja serwera IIS .................................................................................. 874 Rozdział 29. Wzorce projektowe ...........................................................................................................875 29.1. Definicja wzorców ............................................................................................ 875 29.2. Singleton ........................................................................................................ 877 29.3. Fabryka .......................................................................................................... 880 29.4. Obserwator ..................................................................................................... 882 29.5. Strategia ........................................................................................................ 885 Dodatki...............................................................................................................................889 Dodatek A Kody z ukośnikiem ..................................................................................................................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
  • 8. Analiza składni i łańcuchów W tym rozdziale: n Podział łańcuchów na elementy. n Wyra enia regularne. n Definiowanie wyra eń regularnych. n Stosowanie wyra eń regularnych w skryptach PHP. Analiza składni polega na podziale całości na elementy składowe, zwykle dotyczy to podziału zdania na poszczególne wyrazy. PHP musi zanalizować napisany przez nas kod w pierw- szym kroku procesu przekształcania go w dokument HTML. Czasami staniemy równie przed problemem pobierania i weryfikacji danych zawartych w łańcuchach tekstowych. Mo e to być np. prosta lista oddzielona tabulatorami lub skomplikowany łańcuch, jakiego przeglą- darka u ywa do swojej identyfikacji w obliczu serwera sieciowego. Mo na wówczas podzie- lić łańcuch na poszczególne elementy lub zastosować wyra enie regularne. W rozdziale tym opisane zostały funkcje analizujące składnię oraz treść łańcuchów. 22.1. Podział łańcuchów na elementy PHP udostępnia prosty model dzielenia łańcuchów. Wybrane przez nas znaki są uznawane za separatory, a fragmenty łańcucha, znajdujące się między separatorami, są uznawane za pojedyncze elementy. Z ka dym pobranym elementem mo na zmieniać zestaw znaków sepa- rujących, co jest wygodne w przypadku nieregularnych łańcuchów — to znaczy tych, które nie są prostymi listami oddzielonymi przecinkami. Listing 22.1 pobiera zdanie i dzieli je na poszczególne słowa za pomocą funkcji UVTVQM, opisanej w rozdziale 12. W przypadku skryptu słowa są otoczone spacjami, znakami prze- stankowymi lub końca zdania. Cudzysłowy i apostrofy są uznawane za część wyrazu. Efekt działania przykładowego skryptu jest widoczny na rysunku 22.1.
  • 9. 756 Część III n Algorytmy Listing 22.1. Podział łańcucha na elementy !RJR
  • 12. ,G GNK RTGU CPQ FCPKG FQMQPWLG LGIQ CPCNK[
  • 13. KH KUUGV A4'37'56= UGPVGPEG ? ] VQVCN RTKPV D 2TGU CP[ VGMUVD RTKPV ] A4'37'56= UGPVGPEG ?_DT PDT P WUVCNC PCMK MVÎTG UGRCTWLæ RQUEGIÎNPG GNGOGPV[ C EWEJC UGRCTCVQTU ! RQDKGTC MQNGLPQ YU[UVMKG GNGOGPV[ HQT VQMGP UVTVQM A4'37'56= UGPVGPEG ? UGRCTCVQTU VQMGP (#.5' VQMGP UVTVQM UGRCTCVQTU ] RQOKLC RWUVG GNGOGPV[ KH VQMGP ] NKE[ Y[UVæRKGPKC MC FGIQ Y[TCÎY KH KUUGV YQTFAEQWPV=UVTVQNQYGT VQMGP? ] YQTFAEQWPV=UVTVQNQYGT VQMGP? _ GNUG ] YQTFAEQWPV=UVTVQNQYGT VQMGP? _ VQVCN _ _ Y RKGTYUGL MQNGLPQ EK UQTVWLG YINúFGO U ÎY MUQTV YQTFAEQWPV PCUVúRPKG UQTVWLG YINúFGO EúUVQ EK Y[UVúRQYCPKC CTUQTV YQTFAEQWPV RTKPV D 1FPCNGKQPQ VQVCN U ÎYD P RTKPV WN P HQTGCEJ YQTFAEQWPV CU MG[ XCNWG ] RTKPV NK MG[ XCNWGNK P _ RTKPV WN P _ RTKPV HQTO CEVKQP ] A5'48'4= 2*2A5'.( ?_ OGVJQF RQUV P RTKPV KPRWV PCOG UGPVGPEG UKG P RTKPV KPRWV V[RG UWDOKV XCNWG #PCNKWL P RTKPV HQTO P !
  • 14. Rozdział 22. n Analiza składni i łańcuchów 757 Rysunek 22.1. Efekt działania skryptu z listingu 22.1 Warto zwrócić uwagę na rolę pętli HQT w powy szym przykładzie. Zamiast inkrementacji wartości całkowitej pobiera ona kolejne elementy łańcucha. Kiedy funkcja UVTVQM trafi na koniec danych wejściowych, zwróci (#.5'. Pierwszą myślą mo e być sprawdzanie w pętli wystąpienia wartości (#.5' za pomocą operatora . Nale y pamiętać, e pusty łańcuch ma wartość logiczną (#.5'. Je eli dwa separatory następują po sobie, UVTVQM, jak mo na się spodziewać, zwróci pusty łańcuch. Poniewa nie chcemy, aby operacja dzielenia łańcucha została przerwana na pierwszym powtórzonym separatorze, konieczne jest sprawdzenie wy- stąpienia rzeczywistej wartości (#.5' za pomocą operatora . Funkcja UVTVQM jest u yteczna tylko w najprostszych i najbardziej uporządkowanych przypad- kach. Przykładem mo e być odczyt pliku tekstowego, separowanego tabulatorami. Algo- rytm polegać mo e wówczas na odczycie wiersza z pliku, podziale wiersza na elementy, stosując tabulator w roli separatora i przejściu do odczytu kolejnego wiersza z pliku. 22.2. Wyra enia regularne Na szczęście PHP udostępnia równie o wiele doskonalsze narzędzie ni funkcja UVTVQM — wyra enia regularne. U ywają one własnego języka do opisu wzorców, które są porów- nywane z łańcuchami. Kod źródłowy PHP zawiera implementację wyra eń regularnych zgodnych z normą POSIX 1003.2. Norma ta umo liwia stosowanie wyra eń starszego typu, ale sugeruje korzystanie z nowego typu, który zostanie tu opisany. Wszystkie funkcje zwią- zane z wyra eniami regularnymi są opisane w rozdziale 12. W 1999 r. Andrei Zmievski wzbogacił PHP o współpracę z wyra eniami regularnymi, stoso- wanymi w języku Perl. Mają one dwie zalety w stosunku do wbudowanych wyra eń regu- larnych PHP: ułatwiają kopiowanie wyra eń ze skryptów Perl i wykonują się szybciej. Dokładny opis wyra eń regularnych wykracza poza ramy tego tekstu. Jest to zagadnienie godne następnej ksią ki. Zostaną tu objaśnione podstawy oraz pokazane ró ne funkcje PHP, które u ywają wyra eń regularnych. Świetnym źródłem informacji o wyra eniach regu-
  • 15. 758 Część III n Algorytmy larnych jest rozdział 2. ksią ki Ellie Quigley, UNIX Shells by Example. Wyra enia regularne stosowane w Perlu są opisane w oficjalnej dokumentacji Perla pod adresem http://www.perldoc. com/perl5.8.0/pod/perlre.html. Następnie nale y przeczytać w dokumentacji na stronie PHP o ró nicach między implementacją tych wyra eń w Perlu a w PHP: http://www.php.net/manual/ åpcre.pattern.syntax.php. 22.3. Definiowanie wyra eń regularnych Na najwy szym poziomie wyra enia regularne składają się z jednej lub więcej gałęzi, oddzielo- nych znakiem pionowej kreski (^). Znak ten ma właściwości operatora logicznego .7$. Ka da z gałęzi mo e odpowiadać testowanemu łańcuchowi. Kilka przykładów znajduje się w tabeli 22.1. Tabela 22.1. Warianty w wyrażeniach regularnych Próbka Opis LCD MQ Odpowiada słowu „jabłko”. LCD MQ^RK MC Odpowiada słowu „jabłko” lub „piłka”. RQEæVGM^MQPKGE^RTGTYC Odpowiada słowom „początek”, „koniec” lub „przerwa”. Ka dy z wariantów zawiera jeden lub więcej atomów. Po atomach mogą występować znaki modyfikujące mo liwą liczbę kolejnych trafień dla danego atomu. Gwiazdka (
  • 16. ) oznacza, e atom mo e występować dowolną liczbę razy. Symbol dodawania ( ) oznacza, e atom musi występować przynajmniej raz. Znak zapytania (!) oznacza, e atom mo e występo- wać raz lub ani razu. Alternatywnie atom mo e być związany, co oznacza, e następują po nim nawiasy klamrowe (]_), które zawierają liczby całkowite. Je eli nawiasy klamrowe zawierają pojedynczą liczbę, wówczas atom musi występować dokładnie tę liczbę razy. Je eli w nawiasach znajduje się pojedyncza liczba, po której następuje przecinek, atom musi występować tyle lub więcej razy. Je eli klamry zawierają dwie liczby oddzielone przecinkiem, atom musi występować liczbę razy zawartą w przedziale między tymi liczbami. W tabeli 22.2 przedstawione są przykłady repetycji. Tabela 22.2. Wzorce z repetycją w wyrażeniach regularnych Próbka Opis C D
  • 17. Odpowiada C, CD, CDD, … — znak C plus dowolna liczba znaków D C D Odpowiada CD, CDD, CDDD, … — znak C plus jeden lub więcej znaków D C D! Odpowiada C lub CD — znak C, po którym mo e wystąpić znak D C D]_ Odpowiada tylko CDDD C D]_ Odpowiada CDD, CDDD, CDDDD, … — znak C, po którym następuje jeden lub więcej znaków D C D]_ Odpowiada CDD, CDDD, CDDDD — znak C, po którym następują dwa, trzy lub cztery znaki D
  • 18. Rozdział 22. n Analiza składni i łańcuchów 759 Atom jest szeregiem znaków, z których niektóre mają specjalne znaczenie, a inne oznaczają po prostu znak, który ma występować w łańcuchu. Kropka () zastępuje dowolny pojedynczy znak. Karetka (@) zastępuje początek łańcucha. Symbol dolara ( ) zastępuje koniec łańcucha. Je eli w łańcuchu ma występować jeden ze znaków specjalnych (@ = ? ^
  • 19. ! ] _ ), nale y je poprzedzić znakiem . Tak naprawdę ka dy znak poprzedzony znakiem będzie traktowany dosłownie, nawet je eli nie ma on specjalnego znaczenia. Ka dy znak nieposia- dający specjalnego znaczenia zostanie uznany po prostu za znak, który ma występować w łańcuchu. Mo na równie grupować atomy za pomocą nawiasów, aby były traktowane jako jeden atom. Nawiasy kwadratowe (=?) słu ą do określania mo liwego zakresu wartości. Mo e on mieć formę listy dozwolonych znaków lub zakresu określonego za pomocą myślnika (). Je eli lista lub zakres są poprzedzone karetką (@), oznacza to wszystkie znaki spoza określonego zakresu. Nale y zwrócić uwagę na to podwójne znaczenie znaku @. Oprócz list i zakresów nawiasy kwadratowe mogą zawierać klasy znaków. Nazwy tych klas są dodatkowo otoczone dwukropkami, aby odpowiadać wszystkim znakom nale ącym do alfabetu =CNRJC?. Dostępne klasy to: CNPWO, CNRJC, DNCPM, EPVTN, FKIKV, ITCRJ, NQYGT, RTKPV, RWPEV, URCEG, WRRGT i ZFKIKV. Opisy tych klas znajdują się w dokumentacji EV[RG. Oprócz tego, dwa dodatkowe kody w nawiasach kwadratowych określają początek lub koniec wyrazu. Są to odpowiednio =? i = ?. Wyraz oznacza w tym przypadku ka dą sekwencję znaków alfanumerycznych i znaków podkreślenia. Tabela 22.3 zawiera przykłady u ycia nawiasów kwadratowych. Tabela 22.3. Nawiasy kwadratowe w wyrażeniach regularnych Próbka Opis CE Odpowiada CCE, CDE, CEE, … — ka dy trzyliterowy łańcuch zaczynający się na C, a kończący na E @C
  • 20. Odpowiada ka demu łańcuchowi rozpoczynającemu się na literę C =CE?
  • 21. Z Odpowiada Z, CZ, DZ, CDCZ, CDEZ — dowolny ciąg zło ony z pierwszych trzech liter alfabetu, po których następuje Z D=[Q?M Odpowiada wyrazom D[M lub DQM =@?]_ Odpowiada ka demu łańcuchowi o długości 5 znaków, który nie zawiera małego lub du ego ==FKIKV?? Odpowiada ka dej cyfrze, równowa nik wyra enia =? ==??C
  • 22. Odpowiada ka demu wyrazowi, który zaczyna się na C 22.4. Stosowanie wyra eń regularnych w skryptach PHP Podstawową funkcją do wykonywania wyra eń regularnych jest GTGI. Funkcja ta testuje łańcuch na danym wyra eniu regularnym, zwracając 647', je eli wzorzec opisany w wyra- eniu regularnym występuje w testowanym łańcuchu. W ten sposób mo na sprawdzić, czy
  • 23. 760 Część III n Algorytmy łańcuch posiada określoną formę. Przykładem mo e być kontrola poprawności formatu kodu pocztowego, składającego się z dwóch cyfr, po których następują myślnik i trzy cyfry. Pokazuje to listing 22.2. Efekt dziania przykładowego skryptu widać na rysunku 22.2. Listing 22.2. Sprawdzanie kodu pocztowego !RJR
  • 26. 5RTCYFC RQRTCYPQ è HQTOCVW MQFW RQEVQYGIQ
  • 28. UMT[RV VGP URTCYFC E[ FCP[ EKæI LGUV MQFGO RQEVQY[O
  • 30. MVÎT[ UVCPQYKæ FYKG E[HT[ RQ MVÎT[EJ OQ G RQLCYKè UKú æEPKM
  • 32. K MQNGLPG VT[ E[HT[
  • 35. LG GNK RTGU CPQ MQF FQMQPWLG LGIQ CPCNK[
  • 36. KH KUUGV A4'37'56= MQF ? ] KH GTGI @ =?]_ =?]_! A4'37'56= MQF ? ] RTKPV ] A4'37'56= MQF ?_ VQ RQRTCYP[ MQF RQEVQY[DT P _ GNUG ] RTKPV ] A4'37'56= MQF ?_ D PKGD LGUV RQRTCYP[O MQFGO RQEVQY[ODT P _ _ VYQT[ HQTOWNCT RTKPV HQTO CEVKQP ] A5'48'4= 2*2A5'.( ?_ P RTKPV KPRWV V[RG VGZV PCOG MQF P RTKPV KPRWV V[RG UWDOKV XCNWG 5RTCYF P RTKPV HQTO P ! Rysunek 22.2. Efekt działania skryptu z listingu 22.2 Skrypt udostępnia formularz do wprowadzania kodu pocztowego. Musi on składać się z dwóch cyfr, po których następują myślnik i kolejne trzy cyfry. Działanie tego skryptu opiera się na następującym wyra eniu regularnym: @ =]_ =?]_! Do niego porównywane są informacje wprowadzone przez u ytkownika. Pomocna będzie tu dokładna analiza wyra enia.
  • 37. Rozdział 22. n Analiza składni i łańcuchów 761 Rozpoczyna się ono od karetki. Powoduje to szukanie trafień tylko od początku łańcucha. Je eli karetka zostałaby pominięta, kod pocztowy mógłby rozpoczynać się dowolną liczbą znaków, np. CDE i wcią być zgodny z wyra eniem regularnym. W podobny sposób znak dolara na końcu wyra enia powoduje szukanie trafień od końca łańcucha. Zapobiega to trafieniom, takim jak CDEF. Kombinacja karetki i znaku dolara umo liwia wybieranie łańcuchów zawierających tylko wymagane znaki. Pierwsze podwyra enie to =?]_. Zakres w nawiasach kwadratowych pozwala na sto- sowanie tylko cyfr z zakresu od 0 do 9. Zawartość nawiasów klamrowych informuje, e cy- fry muszą być dokładnie dwie. Drugie podwyra enie to =?]_!. W podobny sposób, jak w pierwszym wyra eniu, określona została tu liczba cyfr na 3. Myślnik ma tu znaczenie dosłowne i musi poprzedzać 3 kolejne cyfry. Znak zapytania informuje, e całe podwyra enie musi występować tylko raz lub w ogóle, co czyni podanie kolejnych trzech cyfr opcjonalnym. W prosty sposób mo na przebudować takie wyra enie, aby sprawdzało numery telefonów i daty. Wyra enia regularne zapewniają świetny sposób kontroli wartości zmiennych zwra- canych poprzez formularze. Zastępują one zagnie d one instrukcje KH i przeszukiwanie łańcuchów funkcją UVTRQU. Mo na równie sprawić, aby trafienia dotyczące poszczególnych podwyra eń zostały zwrócone w tabeli. Jest to u yteczne w sytuacjach, kiedy trzeba podzielić łańcuch na części. Dobrym przykładem dla tej metody jest łańcuch, którym identyfikuje się przeglądarka. W łańcuchu tym zakodowane są: nazwa przeglądarki, wersja i typ komputera, na którym została uru- chomiona. Pobranie tych informacji do oddzielnych zmiennych umo liwi dostosowanie strony do mo liwości danej przeglądarki. Listing 22.3 przedstawia skrypt, tworzący zestaw zmiennych, które pomagają ukryć stronę dla określonego typu przeglądarki. Dla przykładu uzale nimy zawartość hiperłącza od typu przeglądarki. Je eli u ytkownik korzysta z Netscape Navigatora, łącze będzie wskazywało na stronę, z której mo na pobrać Microsoft Explorera. W innym wypadku łącze będzie wskazywało stronę, z której mo na pobrać Netscape Navigatora. Jest to przykład dostoso- wywania zawartości strony. Tą samą metodą mo na decydować równie o u yciu zaawan- sowanych mo liwości strony. Listing 22.3. Sprawdzanie http_user_agent !RJR URTCYFC LCMKGL RTGINæFCTMK MQT[UVC W [VMQYPKM PR /QKNNC EQORCVKDNG /5+' 9KPFQYU 06 3 GTGI @ ==CNRJC?? ==FKIKV??
  • 38. A5'48'4= *662A75'4A#)'06 ? OCVEJ DTQYUGT0COG OCVEJ=? DTQYUGT8GTUKQP OCVEJ=? DTQYUGTGUETKRVKQP OCVEJ=? UWMC FQYQFÎY PC VQ G RTGINæFCTMC VQ /5+' KH GTGIK OUKG DTQYUGTGUETKRVKQP ] UWMC EGIQ Y UV[NW EQORCVKDNG /5+' 9KPFQYU 06 3 GTGIK /5+' ==FKIKV??
  • 39. 762 Część III n Algorytmy DTQYUGTGUETKRVKQP OCVEJ DTQYUGT0COG /5+' DTQYUGT8GTUKQP OCVEJ=? _ RTKPV -QT[UVCU RTGINæFCTMK DTQYUGT0COG YGTULC DTQYUGT8GTUKQP DT P /Q GU URTÎDQYCè TÎYPKG UMQT[UVCè RTGINæFCTMK KH GTGIK OQKNNC DTQYUGT0COG ] RTKPV C JTGH JVVRYYYOKETQUQHVEQOKGFQYPNQCFFGHCWNVCUR RTKPV +PVGTPGV 'ZRNQTGT RTKPV C _ GNUG ] RTKPV C JTGH JVVRYYYPGVUECRGEQOEQORWVKPIFQYPNQCFKPFGZJVON RTKPV 0CXKICVQT RTKPV C _ RTKPV FNC RQTÎYPCPKCDT P ! Główna funkcja GTGI w skrypcie jest u yta bez warunku KH. Zakłada ona, e przeglądarka dokona swojej identyfikacji co najmniej w postaci podania nazwy, ukośnika i numeru wersji. Tablicy OCVEJ zostają przyporządkowane części rozpatrywanego łańcucha, które odpowiadają częściom wyra enia regularnego. Wyra enie to składa się z trzech podwyra eń, odpowia- dających nazwie, wersji i wszystkim pozostałym charakterystykom. Forma ta jest stosowana przez większość przeglądarek, w tym Navigatora i Internet Explorera. Jako e Internet Explorer zawsze identyfikuje się jako przeglądarka Mozilla (Netscape), nale y wykonać dodatkowe kroki, aby określić, czy przeglądarka jest rzeczywiście produktem Netscape, czy go tylko udaje. Odpowiada za to wywołanie GTGIK. Dlaczego element zerowy tablicy jest pomijany? Otó przechowuje on podciąg, który został trafiony przez całe wyra enie regularne. W omawianej sytuacji trafienia takie nie mają zna- czenia. Zwykle element zerowy okazuje się przydatny, gdy poszukujemy określonego łańcucha, zawartego w ramach szerszego kontekstu. Przykładem mo e być przeszukiwanie treści strony w poszukiwaniu URL-u. Listing 22.4 pobiera stronę domową PHP i tworzy listę wszystkich łączy znajdujących się na tej stronie. Efekt działania jest widoczny na rysunku 22.3. Listing 22.4. Poszukiwanie adresów URL na stronie !RJR CFTGU 74. FQ RQDTCPKC NKPMÎY 74. JVVRYYYRJRPGV QVYKGTC RNKM RCIG HQRGP 74. T RTKPV .KPMK PC UVTQPKG 74.DT P RTKPV WN P
  • 40. Rozdział 22. n Analiza składni i łańcuchów 763 Rysunek 22.3. Efekt działania skryptu z listingu 22.4 YJKNG HGQH RCIG ] RQDKGTC YKGTU NKPG HIGVU RCIG Y[MQPWLG RúVNG Q KNG QDGEPG Uæ LGUEG LCMKG NKPMK YJKNG GTGIK JTGH =@ ?
  • 41. NKPG OCVEJ ] Y[ YKGVNC CFTGU[ 74. RTKPV NK ] OCVEJ=?_NK P WUWYC CFTGU 74. YKGTUC TGRNCEG GTGIATGRNCEG ! ! OCVEJ=? NKPG GTGIATGRNCEG TGRNCEG NKPG _ _ RTKPV WN P HENQUG RCIG !
  • 42. 764 Część III n Algorytmy Główna pętla skryptu pobiera wiersze tekstu ze strumienia pliku i szuka właściwości JTGH. Je eli właściwość taka zostanie znaleziona w wierszu, jest on umieszczany w zerowym ele- mencie tablicy OCVEJ. Następnie skrypt wyświetla zawartość tego elementu i usuwa go z wiersza za pomocą funkcji GTGIATGRNCEG. Funkcja ta zamienia tekst pasujący do wyra enia regular- nego na dany łańcuch. W tym przypadku właściwość *4'( zostaje zastąpiona łańcuchem pustym. Powodem usunięcia łącza po jego odnalezieniu jest mo liwość znalezienia dwóch łączy w jednym wierszu kodu HTML. Funkcja GTGI trafi wówczas tylko pierwszy podciąg. Rozwiązaniem jest odnalezienie i usunięcie wszystkich łączy. Jak widać, w chwili usuwania łącza tworzona jest zmienna TGRNCEG. Niektóre łącza mogą zawierać znak zapytania — dopuszczalny znak w URL-u, który oddziela nazwę pliku od zmiennych formularza. Jako e znak ten ma specjalne znaczenie w wyra eniach regularnych, skrypt umieszcza przed nim znak , aby umo liwić jego dosłowną interpretację. Często u ywam funkcji GTGIATGRNCEG do konwersji treści na potrzeby nowego kontekstu. Mo na na przykład zastosować GTGIATGRNCEG do zastąpienia kilku spacji jedną. Pokazuje to listing 22.5. Efekt działania skryptu z listingu widać na rysunku 22.4. Listing 22.5. Zamiana powielonych spacji !RJR
  • 45. LG GNK RTGU CPQ VGMUV WMCWLG IQ
  • 46. KH KUUGV A4'37'56= VGZV ? ] RTKPV D 0KGHKNVTQYCP[D DT P RTG ] A4'37'56= VGZV ?_RTG DT P A4'37'56= VGZV ? GTGIATGRNCEG ==URCEG?? A4'37'56= VGZV ? RTKPV D (KNVTQYCP[D DT P RTG ] A4'37'56= VGZV ?_RTG DT P _ GNUG ] A4'37'56= VGZV ? _ VYQT[ HQTOWNCT RTKPV HQTO CEVKQP ] A5'48'4= 2*2A5'.( ?_ P VGZVCTGC PCOG VGZV EQNU TQYU ] A4'37'56= VGZV ?_VGZVCTGC DT P KPRWV V[RG UWDOKV XCNWG 9[ NKL P HQTO P !
  • 47. Rozdział 22. n Analiza składni i łańcuchów 765 Rysunek 22.4. Efekt działania skryptu z listingu 22.5