SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
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
,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 (@ = ? 
  ^

Weitere ähnliche Inhalte

Was ist angesagt?

Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerWydawnictwo Helion
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku JavaWydawnictwo Helion
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceWydawnictwo Helion
 
Pajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktycznePajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktyczneWydawnictwo Helion
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programistyWydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanieWydawnictwo Helion
 
122 sposoby na OpenOffice.ux.pl 2.0
122 sposoby na OpenOffice.ux.pl 2.0122 sposoby na OpenOffice.ux.pl 2.0
122 sposoby na OpenOffice.ux.pl 2.0Wydawnictwo Helion
 
Struktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychStruktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychWydawnictwo Helion
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaWydawnictwo Helion
 

Was ist angesagt? (20)

Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku Java
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
 
C. Leksykon kieszonkowy
C. Leksykon kieszonkowyC. Leksykon kieszonkowy
C. Leksykon kieszonkowy
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
 
Pajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktycznePajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktyczne
 
PHP w mgnieniu oka
PHP w mgnieniu okaPHP w mgnieniu oka
PHP w mgnieniu oka
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
Prolog. Programowanie
Prolog. ProgramowanieProlog. Programowanie
Prolog. Programowanie
 
Win32ASM. Asembler w Windows
Win32ASM. Asembler w WindowsWin32ASM. Asembler w Windows
Win32ASM. Asembler w Windows
 
Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
ActionScript. Receptury
ActionScript. RecepturyActionScript. Receptury
ActionScript. Receptury
 
Praktyczny kurs asemblera
Praktyczny kurs asembleraPraktyczny kurs asemblera
Praktyczny kurs asemblera
 
PHP5. Tajniki programowania
PHP5. Tajniki programowaniaPHP5. Tajniki programowania
PHP5. Tajniki programowania
 
Uczta programistów
Uczta programistówUczta programistów
Uczta programistów
 
122 sposoby na OpenOffice.ux.pl 2.0
122 sposoby na OpenOffice.ux.pl 2.0122 sposoby na OpenOffice.ux.pl 2.0
122 sposoby na OpenOffice.ux.pl 2.0
 
Struktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychStruktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowych
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
 

Andere mochten auch

C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuWydawnictwo Helion
 
多愁善感而初次回憶的青春:縱論羅大佑(上)
多愁善感而初次回憶的青春:縱論羅大佑(上)多愁善感而初次回憶的青春:縱論羅大佑(上)
多愁善感而初次回憶的青春:縱論羅大佑(上)guestd47bd85
 
Narrative learning to ride
Narrative learning to rideNarrative learning to ride
Narrative learning to rideMr. Skipper
 
Adobe Photoshop 7. Wystarczy jedno kliknięcie!
Adobe Photoshop 7. Wystarczy jedno kliknięcie!Adobe Photoshop 7. Wystarczy jedno kliknięcie!
Adobe Photoshop 7. Wystarczy jedno kliknięcie!Wydawnictwo Helion
 
Narrative learning to ride 2
Narrative learning to ride 2Narrative learning to ride 2
Narrative learning to ride 2Mr. Skipper
 
Office 365-single-sign-on-with-adfs
Office 365-single-sign-on-with-adfsOffice 365-single-sign-on-with-adfs
Office 365-single-sign-on-with-adfsamitchachra
 
Les professionnels de l'immobilier et les réseaux sociaux - Etude #DigImmo
Les professionnels de l'immobilier et les réseaux sociaux - Etude #DigImmoLes professionnels de l'immobilier et les réseaux sociaux - Etude #DigImmo
Les professionnels de l'immobilier et les réseaux sociaux - Etude #DigImmoImmobilier 2.0
 
Introduction to Agile & Agile MindSet
Introduction to Agile & Agile MindSetIntroduction to Agile & Agile MindSet
Introduction to Agile & Agile MindSetNamrata Datta
 

Andere mochten auch (11)

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

Ähnlich wie PHP. Programowanie. Wydanie III

PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyPHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyWydawnictwo Helion
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIWydawnictwo Helion
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
Algorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie IIIAlgorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie IIIWydawnictwo Helion
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychWydawnictwo Helion
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie IIPHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie IIWydawnictwo Helion
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieWydawnictwo Helion
 
Photoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowyPhotoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowyWydawnictwo Helion
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWydawnictwo Helion
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuWydawnictwo Helion
 
PHP. Praktyczne skrypty, które oszczędzą Twój czas
PHP. Praktyczne skrypty, które oszczędzą Twój czasPHP. Praktyczne skrypty, które oszczędzą Twój czas
PHP. Praktyczne skrypty, które oszczędzą Twój czasWydawnictwo Helion
 
PHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowaniePHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowanieWydawnictwo Helion
 
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyPHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyWydawnictwo Helion
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyWydawnictwo Helion
 

Ähnlich wie PHP. Programowanie. Wydanie III (20)

PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyPHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie II
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędzia
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki start
 
Algorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie IIIAlgorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie III
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHP
 
PHP5. Radocha z programowania
PHP5. Radocha z programowaniaPHP5. Radocha z programowania
PHP5. Radocha z programowania
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie IIPHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
 
PHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzeniePHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzenie
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. Programowanie
 
Photoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowyPhotoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowy
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładu
 
PHP. Praktyczne skrypty, które oszczędzą Twój czas
PHP. Praktyczne skrypty, które oszczędzą Twój czasPHP. Praktyczne skrypty, które oszczędzą Twój czas
PHP. Praktyczne skrypty, które oszczędzą Twój czas
 
PHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowaniePHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowanie
 
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyPHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programisty
 

Mehr von Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

Mehr von Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
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
  • 10.
  • 11.
  • 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
  • 24.
  • 25.
  • 26. 5RTCYFC RQRTCYPQ è HQTOCVW MQFW RQEVQYGIQ
  • 27.
  • 28. UMT[RV VGP URTCYFC E[ FCP[ EKæI LGUV MQFGO RQEVQY[O
  • 29.
  • 30. MVÎT[ UVCPQYKæ FYKG E[HT[ RQ MVÎT[EJ OQ G RQLCYKè UKú æEPKM
  • 31.
  • 32. K MQNGLPG VT[ E[HT[
  • 33.
  • 34.
  • 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
  • 43.
  • 44.
  • 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