SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   PHP. Programowanie
           KATALOG KSI¥¯EK
                                         Autor: Leon Atkinson
                      KATALOG ONLINE     T³umaczenie: Jaros³aw Dobrzañski
                                         ISBN: 83-7197-967-3
       ZAMÓW DRUKOWANY KATALOG           Tytu³ orygina³u: Core PHP Programming, 2E
                                         Format: B5, stron: 674

              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Ksi¹¿ka „PHP. Programowanie.” to praktyczny przewodnik po PHP4 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
         CENNIK I INFORMACJE             opisuje sk³adniê PHP i kluczowe elementy jêzyka. Atkinson przedstawia tak¿e
                                         najwa¿niejsze funkcje PHP, w tym funkcje wej cia-wyj cia, przetwarzania danych,
                   ZAMÓW INFORMACJE      matematyczne, daty, czasu, konfiguracji, funkcje umo¿liwiaj¹ce wspó³pracê z bazami
                     O NOWO CIACH        danych, funkcje graficzne i sieciowe. Prezentuje on równie¿ dzia³anie PHP na
                                         przyk³adach realizuj¹cych sortowanie, przeszukiwanie, analizê ³añcuchów i inne
                       ZAMÓW CENNIK      zadania. Opisane zosta³y tak¿e praktyczne metody tworzenia i diagnostyki programów
                                         w PHP4.
                                         Ksi¹¿ka PHP. Programowanie zawiera:
                 CZYTELNIA                  • Jasny i szczegó³owy opis sk³adni i funkcji PHP
                                            • Dok³adny opis integracji PHP z bazami danych
          FRAGMENTY KSI¥¯EK ONLINE          • Techniki tworzenia i optymalizacji skryptów, pod k¹tem ich wydajno ci i ³atwej
                                              rozbudowy
                                            • Praktyczne techniki diagnostyczne, u³atwiaj¹ce znalezienie i poprawienie b³êdów




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
         Historia PHP ............................................................................................................ 16
         Co sprawia, że PHP jest lepszy od innych języków? ..................................................... 18
         Interfejsy do systemów zewnętrznych......................................................................... 19
         Jak PHP współpracuje z serwerem sieciowym? ........................................................... 20
         Wymagania sprzętowe i programowe ......................................................................... 20
         Instalacja na Apache dla Uniksa................................................................................ 21
         Instalacja na IIS dla Windows 2000 .......................................................................... 23
         Edycja skryptów ....................................................................................................... 23
         Algorytmy ................................................................................................................ 24
         Jak wygląda skrypt PHP? .......................................................................................... 25
         Przechowywanie danych............................................................................................ 27
         Odbieranie informacji od użytkownika ........................................................................ 28
         Wybieranie pomiędzy alternatywami........................................................................... 30
         Powtarzanie sekwencji kodu...................................................................................... 31
         Podsumowanie ........................................................................................................ 32

    Rozdział 2. Zmienne, operatory i wyra enia.....................................................................................33
         Identyfikatory........................................................................................................... 34
         Typy danych............................................................................................................. 34
         Tworzenie zmiennych i ich zakres działania ................................................................ 37
         Przyporządkowanie zmiennym wartości ...................................................................... 40
         Odczytywanie wartości zmiennych.............................................................................. 42
         Uwalnianie pamięci .................................................................................................. 42
         Stałe....................................................................................................................... 43
         Operatory ................................................................................................................ 44
         Operatory logiczne i relacyjne .................................................................................... 45
         Operatory bitowe...................................................................................................... 46
         Inne operatory ......................................................................................................... 47
         Operatory przyporządkowania .................................................................................... 49
         Wyrażenia ............................................................................................................... 50

    Rozdział 3. Instrukcje sterujące ........................................................................................................53
         Prawda i fałsz .......................................................................................................... 54
         Instrukcja if ............................................................................................................. 54
         Operator ?............................................................................................................... 56
4        PHP. Programowanie

         Instrukcja switch...................................................................................................... 57
         Pętle....................................................................................................................... 59
         Instrukcja while........................................................................................................ 59
         Instrukcja break....................................................................................................... 60
         Instrukcja continue................................................................................................... 61
         Instrukcja do…while................................................................................................. 62
         Instrukcja for ........................................................................................................... 63
         Instrukcja foreach .................................................................................................... 65
         exit, die i return ....................................................................................................... 65
         Obliczanie wyrażeń logicznych ................................................................................... 66

    Rozdział 4. Funkcje ..............................................................................................................................67
         Deklarowanie funkcji ................................................................................................ 67
         Instrukcja return ...................................................................................................... 68
         Zakres i instrukcja global.......................................................................................... 69
         Argumenty ............................................................................................................... 69
         Rekurencja .............................................................................................................. 72
         Dynamiczne wywołania funkcji................................................................................... 73

    Rozdział 5. Tablice................................................................................................................................75
         Tablice jednowymiarowe ........................................................................................... 75
         Indeksowanie tablic ................................................................................................. 77
         Inicjalizacja tablic..................................................................................................... 78
         Tablice wielowymiarowe............................................................................................ 79
         Formatowanie tablic ................................................................................................. 80
         Odwołania do tablic z wnętrza łańcucha ..................................................................... 81

    Rozdział 6. Klasy i obiekty...................................................................................................................83
         Definiowanie klasy ................................................................................................... 84
         Tworzenie obiektu .................................................................................................... 86
         Dostęp do metod i właściwości ................................................................................. 87

    Rozdział 7. Operacje we/wy i dostęp do dysku ................................................................................89
         Połączenia HTTP ...................................................................................................... 90
         Wysyłanie treści do przeglądarki................................................................................ 91
         Buforowanie na wyjściu ............................................................................................ 92
         Zmienne środowiskowe ............................................................................................ 93
         Pobieranie danych z formularzy ................................................................................. 94
         Cookies .................................................................................................................. 95
         Pobieranie plików od użytkownika.............................................................................. 96
         Wywołania metody PUT............................................................................................. 97
         Zapis do plików i ich odczytywanie............................................................................. 98
         Sesje ...................................................................................................................... 99
         Funkcje include i require......................................................................................... 102


Część II Funkcje PHP .................................................................................................... 105
    Rozdział 8. Funkcje wejścia-wyjścia ............................................................................................... 107
         Wysyłanie tekstu do przeglądarki............................................................................. 108
         Buforowanie wyjścia ............................................................................................... 110
         Pliki ...................................................................................................................... 111
Spis treści               5

     Pliki skompresowane ............................................................................................. 145
     POSIX ................................................................................................................... 151
     Diagnostyka .......................................................................................................... 157
     Obsługa sesji ........................................................................................................ 178
     Polecenia interpretera ............................................................................................ 181
     Nagłówki HTTP....................................................................................................... 183
     Sieć...................................................................................................................... 185
     FTP ....................................................................................................................... 190

Rozdział 9. Funkcje przetwarzania danych..................................................................................... 199
     Typy danych, stałe i zmienne .................................................................................. 199
     Tablice.................................................................................................................. 205
     Mieszanie ............................................................................................................. 229
     Łańcuchy............................................................................................................... 232
     Kodowanie i dekodowanie ...................................................................................... 239
     Szyfrowanie ........................................................................................................... 260
     Wyrażenia regularne ............................................................................................... 264
     Wyrażenia regularne zgodne z Perlem ...................................................................... 268

Rozdział 10. Funkcje matematyczne .................................................................................................273
     Operacje matematyczne ......................................................................................... 273
     Liczby losowe ........................................................................................................ 281
     Liczby dowolnej precyzji .......................................................................................... 284

Rozdział 11. Funkcje daty, czasu i konfiguracji................................................................................287
     Data i czas ............................................................................................................ 287
     Niestandardowe kalendarze .................................................................................... 294
     Konfiguracja .......................................................................................................... 298

Rozdział 12. Funkcje graficzne..........................................................................................................305
     Analizowanie obrazków ........................................................................................... 306
     Tworzenie obrazków JPEG, PNG i WBMP................................................................... 307

Rozdział 13. Funkcje współpracujące z bazami danych .................................................................339
     dBase ................................................................................................................... 340
     Abstrakcyjna baza danych typu DBM........................................................................ 344
     filePro ................................................................................................................... 350
     Informix................................................................................................................. 352
     InterBase .............................................................................................................. 360
     mSQL ................................................................................................................... 366
     MySQL .................................................................................................................. 377
     ODBC.................................................................................................................... 392
     Oracle................................................................................................................... 403
     Postgres ............................................................................................................... 422
     Sybase ................................................................................................................. 432

Rozdział 14. Inne funkcje ................................................................................................................... 441
     Apache ................................................................................................................. 442
     Aspell ................................................................................................................... 445
     COM ..................................................................................................................... 446
     Gettext.................................................................................................................. 448
6        PHP. Programowanie

         IMAP..................................................................................................................... 449
         Java...................................................................................................................... 470
         LDAP .................................................................................................................... 470
         Semafory .............................................................................................................. 481
         Pamięć wspólna..................................................................................................... 483
         SNMP ................................................................................................................... 486
         WDDX ................................................................................................................... 489
         XML ...................................................................................................................... 492


Część III Algorytmy......................................................................................................505
    Rozdział 15. Sortowanie, wyszukiwanie i liczby losowe ................................................................507
         Sortowanie ............................................................................................................ 508
         Sortowanie bąbelkowe ........................................................................................... 509
         Algorytm Quicksort ................................................................................................. 511
         Wbudowane funkcje sortujące................................................................................. 512
         Sortowanie z funkcją porównującą ........................................................................... 516
         Wyszukiwanie ........................................................................................................ 519
         Indeksowanie ........................................................................................................ 519
         Liczby losowe ........................................................................................................ 523
         Identyfikatory losowe.............................................................................................. 525
         Losowanie banera reklamowego.............................................................................. 526

    Rozdział 16. Analiza składni i łańcuchów..........................................................................................529
         Podział łańcuchów.................................................................................................. 529
         Wyrażenia regularne ............................................................................................... 531
         Definiowanie wyrażeń regularnych ........................................................................... 532
         Stosowanie wyrażeń regularnych w skryptach PHP...................................................... 533

    Rozdział 17. Integracja z bazami danych ......................................................................................... 541
         Tworzenie tabel HTML z zapytań SQL....................................................................... 542
         Śledzenie odwiedzających za pomocą identyfikatorów sesji ....................................... 546
         Przechowywanie danych w bazie.............................................................................. 550
         Warstwy abstrakcyjne baz danych............................................................................ 556

    Rozdział 18. Sieć.................................................................................................................................557
         Uwierzytelnianie w HTTP ......................................................................................... 557
         Sterowanie buforem przeglądarki ............................................................................ 559
         Ustawianie typu dokumentu .................................................................................... 561
         Poczta elektroniczna z załącznikami......................................................................... 563
         Weryfikacja adresu skrzynki pocztowej ..................................................................... 565

    Rozdział 19. Generowanie grafiki .....................................................................................................569
         Przyciski dynamiczne.............................................................................................. 570
         Generowanie grafiki „w locie” ................................................................................. 574
         Wykresy słupkowe.................................................................................................. 574
         Wykresy kołowe ..................................................................................................... 576
         Rozciąganie pojedynczych pikseli ............................................................................ 581
Spis treści               7


Część IV In ynieria oprogramowania........................................................................583
    Rozdział 20. Integracja z HTML-em ..................................................................................................585
         Umieszczanie fragmentów kodu PHP w dokumencie HTML ........................................ 585
         Używanie PHP do generowania całych dokumentów HTML ......................................... 589
         Separowanie HTML-u od PHP .................................................................................. 591
         Tworzenie pól <SELECT> ........................................................................................ 592
         Przesyłanie tablic w formularzach ............................................................................ 595

    Rozdział 21. Projektowanie ...............................................................................................................597
         Tworzenie specyfikacji wymagań.............................................................................. 598
         Tworzenie dokumentów projektowych....................................................................... 601
         Używanie CVS........................................................................................................ 602
         Modularyzacja za pomocą include ........................................................................... 603
         FreeEnergy ............................................................................................................ 604
         FastTemplate ........................................................................................................ 606
         Midgard ................................................................................................................ 606
         Ariadne ................................................................................................................. 607
         Bezpieczeństwo i ochrona danych ........................................................................... 607
         Ukrywanie ............................................................................................................. 608
         Adresy przyjazne wyszukiwarkom ............................................................................. 609
         Skrypty uruchamiane regularnie .............................................................................. 610

    Rozdział 22. Efektywność i diagnostyka.......................................................................................... 613
         Mierzenie wydajności ............................................................................................. 614
         Pobieranie wyników zapytania z bazy danych ............................................................ 615
         Kiedy przechowywać dane w bazie........................................................................... 616
         Diagnostyka bieżąca .............................................................................................. 617
         Diagnostyka zdalna ................................................................................................ 617
         Symulowanie połączeń HTTP ................................................................................... 618


Dodatki.......................................................................................................................... 619
    Dodatek A Kody z ukośnikiem ........................................................................................................... 621

    Dodatek B Kody ASCII.........................................................................................................................623

    Dodatek C Operatory .........................................................................................................................629

    Dodatek D Znaczniki PHP ................................................................................................................... 631

    Dodatek E Konfiguracja PHP w czasie kompilacji............................................................................633

    Dodatek F Zasoby internetowe .........................................................................................................637

    Dodatek G Przewodnik po stylach PHP.............................................................................................639

    Skorowidz ..........................................................................................................................................643
Integracja z bazami danych
W tym rozdziale:
  n   Tworzenie tabel HTML z zapytań SQL.
  n   Śledzenie odwiedzających za pomocą identyfikatorów sesji.
  n   Przechowywanie danych w bazie.
  n   Warstwy abstrakcyjne baz danych.

PHP ściśle współpracuje z wieloma bazami danych. Je eli wewnętrzna współpraca z określoną
bazą nie istnieje, zawsze mo na skorzystać z ODBC, który jest standardem dla zewnętrz-
nych sterowników baz danych. Regularnie pojawiają się moduły, umo liwiające współ-
pracę z nowymi bazami danych. Programiści PHP twierdzą: „Dajcie nam do testowania swój
produkt, a stworzymy kod obsługujący go w PHP”.

MySQL jest niewątpliwie najbardziej popularną bazą danych wśród programistów PHP.
Poza tym, e jest darmowa, nadaje się do zastosowań sieciowych z uwagi na du ą szybkość.
W przykładach tu opisanych zakładam posiadanie bazy danych MySQL. Mo na ją pobrać
z witryny MySQL pod adresem <http://www.mysql.com> i zainstalować w swoim systemie
lub pokusić się o dostosowanie opisanych tu przykładów do współpracy z inną bazą.

Większość relacyjnych baz danych u ywa strukturalnego języka zapytań (SQL). Jest to język
czwartej generacji, co oznacza, e przypomina bardziej tekst w języku angielskim ni kod
źródłowy w PHP. Omówienie samego SQL wykracza poza ramy tej ksią ki. W przypadku zni-
komej wiedzy na ten temat, radzę przeglądnąć listę materiałów wymienioną w dokumentacji na
stronie domowej MySQL: <http://www.mysql.com/doc.html>. Alternatywą mo e być ksią ka,
taka jak Hands-On SQL Roberta Grotha i Davida Gerbera, wydana przez Prentice Hall.
542    Część III n Algorytmy



Tworzenie tabel HTML z zapytań SQL
       Jednym z prostszych zadań, jakie mo na wykonać za pomocą bazy danych i PHP, jest pobranie
       danych z bazy i wyświetlenie ich w tabeli HTML. Tabela taka mo e zawierać np. listę towarów
       na sprzeda , listę projektów, listę serwerów DNS i ich czasy reakcji. Na potrzeby przedstawio-
       nego tu przykładu wykorzystany zostanie pierwszy z tych przykładów. Załó my, e supermar-
       ket chce zamieścić na stronie internetowej listę towarów na sprzeda . W tym celu trzeba stwo-
       rzyć stronę, która wyświetla zawartość bazy danych. Zostanie tu zastosowana baza VGUV,
       tworzona podczas instalacji MySQL. Skrypt PHP, przeglądający katalog produktów, będzie
       znajdował się na tym samym komputerze, na którym zainstalowany jest serwer bazy danych.

       Pierwszym krokiem jest utworzenie tabeli. Listing 17.1 pokazuje kod SQL, tworzący prostą
       tabelę, składającą się z trzech kolumn. Tabela nazywa się MCVCNQI. Zawiera ona kolumnę,
       zwaną +&, która zawiera wartości całkowite, maksymalnie jedenastocyfrowe. Kolumna ta
       nie mo e być pusta i nowym wierszom automatycznie będą przyporządkowywane kolejne
       wartości. Ostatni wiersz definicji określa +& jako klucz podstawowy. Powoduje to, e war-
       tości w tej kolumnie są traktowane jako indeksy i uniemo liwia dublowanie się kluczy. Pozo-
       stałe dwie kolumny to 0COG i 2TKEG.

Listing 17.1. Tworzenie tabeli „katalog”
           %4'#6' 6#$.' MCVCNQI
           

                   +& +06
 016 07.. #761A+0%4'/'06
                   0CYC 8#4%*#4

                   EGPC (.1#6

                   24+/#4; -'; 
+
           


       0COG to łańcuch znaków o zmiennej długości, maksymalnie do 32 znaków. 2TKEG to liczba
       zmiennoprzecinkowa z sześcioma cyframi przed i dwoma po przecinku. Format ten nadaje
       się do zapisu cen.

       Kolejnym krokiem jest umieszczenie elementów w tabeli. Jako e jest to tylko demonstracja,
       wprowadzimy tu parę przykładowych produktów, jakie mo na nabyć w supermarkecie wraz
       z wymyślonymi cenami. W tym celu u yta zostanie instrukcja +05'46. Listing 17.2 jest
       przykładem opisanej procedury.

Listing 17.2. Wprowadzanie danych do tabeli „katalog”
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   5EQVGEMC  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   )TGDKGP  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   2CUVC FQ GDQY  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   0KE FGPV[UV[EPC  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   5CORQP  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   1F[YMC  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   GQFQTCPV  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   GN  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   1UVTC FQ IQNCTMK  
           +05'46   +061   MCVCNQI   
0CYC   %GPC   8#.7'5   
   5EQVMC
Rozdział 17. n Integracja z bazami danych    543

      Ka da instrukcja SQL kończy się średnikiem, podobnie jak w PHP. Informujemy serwer
      MySQL, e chcemy wstawić wiersz do tabeli MCVCNQI i e podamy tylko nazwę produktu i cenę.
      Jako e pomijamy tu +, MySQL stworzy go sam. Wynika to ze zdefiniowania tej kolumny
      jako #761A+0%4'/'06. Słowo kluczowe 8#.7'5 informuje serwer, e za chwilę zostaną prze-
      słane wartości opisane w poprzednim poleceniu. Wartości przesyłane są w apostrofach, zgodnie
      ze standardem przyjętym w SQL.

      Aby sprawdzić, czy operacja się powiodła, listing 17.1 wyświetla wartości, jakie otrzymaliby-
      śmy, wybierając wszystko z tabeli MCVCNQI z poziomu klienta MySQL. Realizuje to polecenie:
         5'.'%6
(41/ MCVCNQI

      po wydaniu którego otrzymujemy:
         +        0CYC                       %GPC
                  5EQVGEMC                 
                  )TGDKGP                    
                  2CUVC FQ GDQY              
                  0KE FGPV[UV[EPC            
                  5CORQP                     
                  1F[YMC                     
                  GQFQTCPV                  
                  GN                         
                  1UVTC FQ IQNCTMK           
                 5EQVMC                    
                 TQYU KP UGV 
 UGE

      Ostatnim krokiem jest napisanie skryptu PHP, który pobiera zawartość tabeli i przekształca ją
      w tabelę HTML. Listing 17.3 przedstawia kod PHP, pobierający nazwy oraz ceny i wyświe-
      tlający je w tabeli HTML. Na początku nale y połączyć się z serwerem bazy danych. Realizuje
      to funkcja O[USNAREQPPGEV. Pobiera ona nazwę hosta, nazwę u ytkownika i hasło. Zwykle
      tworzę w moich bazach MySQL u ytkownika o nazwie JVVRF bez hasła. Ograniczam równie
      tego u ytkownika tylko do połączeń z lokalnego serwera. Jego nazwa jest taka sama, jak
      nazwa u ytkownika UNIX, który wykonuje skrypty, czyli serwera sieciowego. Je eli wynaj-
      mujemy miejsce na serwerze, mo emy mieć przyporządkowane inne nazwy u ytkownika
      i bazy danych, co wymaga zmiany odpowiednich argumentów w przykładzie.

Rysunek 17.1.
Tworzenie tabeli
HTML z wynikami
zapytania
544    Część III n Algorytmy

Listing 17.3. Tworzenie tabeli HTML z wynikami zapytania
          !
                  RQ æEGPKG  UGTYGTGO K URTCYFGPKG E[ UKú RQYKQF Q
                  KH
 
 FD.KPM  O[USNAREQPPGEV
 NQECNJQUV  JVVRF  
                  ]
                          RTKPV
 0KG OQ PC RQ æE[è UKú  DCæ $4 P 
                          RTKPV
 CMQ EGPKG UMT[RVW $4 P 
                          GZKV

                  _

                  Y[DÎT DC[ FCP[EJ K URTCYFGPKG TGWNVCVÎY QRGTCELK
                  KH
 O[USNAUGNGEVAFD
 VGUV  FD.KPM
                  ]
                          RTKPV
 0KG OQ PC Y[DTCè DC[ VGUV $4 P 
                          RTKPV
 CMQ EGPKG UMT[RVW $4 P 
                          GZKV

                  _

                   RQDTCPKG EC GL CYCTVQ EK VCDGNK
                   3WGT[  5'.'%6 0CYC %GPC 
                   3WGT[  (41/ -CVCNQI 
                  KH
 
 FD4GUWNV  O[USNASWGT[
 3WGT[ FD.KPM
                  ]
                          RTKPV
 0KG OQ PC Y[MQPCè CR[VCPKC $4 P 
                          RTKPV
 MQOWPKMCV /[53.  O[USNAGTTQT
  $4 P 
                          RTKPV
 CR[VCPKG 3WGT[$4 P 
                          GZKV

                  _

                  RQEæVGM VCDGNK
                  RTKPV
 6#$.' $14'4  P 

                  WVYQTGPKG YKGTUC PCI ÎYMÎY
                  RTKPV
 64 P 
                  RTKPV
 6 $)%1.14 %%%%%% $ #TV[MW $ 6 P 
                  RTKPV
 6 $)%1.14 %%%%%% $ %GPC$ 6 P 
                  RTKPV
 64 P 

                   RQDTCPKG MC FGIQ  YKGTU[
                  YJKNG
 FD4QY  O[USNAHGVEJAQDLGEV
 FD4GUWNV
                  ]
                          RTKPV
 64 P 

                           RTKPV
 6 FD4QY 0CYC6 P 
                           RTKPV
 6 #.+)0 TKIJV FD4QY %GPC6 P 

                           RTKPV
 64 P 
                  _

                  MQPKGE VCDGNK
                  RTKPV
 6#$.' P 
          !


       Je eli połączenie się powiodło, zwracany jest identyfikator łącza z MySQL. Jak widać, w tym
       samym wierszu następuje nawiązanie połączenia i testowanie, czy operacja się powiodła.
Rozdział 17. n Integracja z bazami danych    545

Identyfikatory łączy są zawsze większe od zera, a zero zwracane jest wtedy, gdy nie mo na
nawiązać połączenia. Dlatego te testowanie wystąpienia wartości (#.5' umo liwia wykrycie
nieudanego połączenia. W takim przypadku następuje po prostu opuszczenie skryptu.

Funkcja, za pomocą której łączymy się z bazą, to O[USNAREQPPGEV. Przeglądając opisy funkcji
MySQL w rozdziale 13., „Funkcje współpracujące z bazami danych”, mo na znaleźć równie
inną funkcję: O[USNAEQPPGEV. Funkcje te działają identycznie w ramach skryptu, ale O[USNA
REQPPGEV nawiązuje trwałe połączenie z serwerem.

Większość funkcji współpracujących z bazami danych udostępnia mo liwość tworzenia
trwałych połączeń — czyli takich, które nie zamykają się z chwilą zakończenia skryptu. Je eli
ten sam proces sieciowy uruchomi później inny skrypt, który łączy się z tym samym serwerem
bazy danych, wykorzystane będzie istniejące ju połączenie. Dzięki temu mo na oszczędzić
trochę czasu. W praktyce oszczędności te nie są du e i wynikają ze sposobu, w jaki serwer
Apache 1.3x u ywa procesów potomnych, zamiast wątków. Procesy te obsługują pewną
liczbę wywołań, po czym są zastępowane przez nowe procesy. Po zakończeniu procesu zakoń-
czone zostaje równie trwałe połączenie.

Rzeczywisty zysk czasu, wynikający ze stosowania trwałych połączeń, pojawia się dopiero
przy du ych obcią eniach — w takich chwilach mogą one okazać się bardzo pomocne.
Dlatego te domyślnie stosuję O[USNAREQPPGEV. W chwili pisania tej ksią ki zbli a się moment
pojawienia się Apache 2.0. Zapowiadane jest tam stosowanie wielowątkowego podejścia,
co pozwoli zapewne w pełni wykorzystać zalety trwałych połączeń.

Następnym krokiem jest wybór bazy danych. Tutaj została wybrana baza UVQTG. Po poinformo-
waniu PHP, z której bazy nale y korzystać, otrzymamy wszystkie wiersze z tabeli MCVCNQI.
Realizuje to funkcja O[USNASWGT[. Wykonuje ona zapytanie na określonym łączu i zwraca
identyfikator wyniku. Identyfikator ten zostanie u yty do pobrania wyników zapytania.

Zanim rozpoczniemy pobieranie danych ze zbioru wyników, nale y rozpocząć budowanie
tabeli HTML. Jak mo na się domyślić, w tym celu u yty został znacznik otwierający tabelę.
Stworzony został wiersz nagłówków, z szarym tłem, a reszta właściwości tablicy pozostała
domyślna.

Po wyświetleniu wiersza nagłówków mo na pobrać ka dy z wierszy ze zbioru wyników.
Najszybciej działającą funkcją jest O[USNAHGVEJAQDLGEV. Ka da z kolumn wyniku staje się
właściwością zwróconego obiektu. Nazwy kolumn stają się nazwami właściwości. Mo na
równie zastosować funkcje O[USNAHGVEJATQY lub O[USNAHGVEJACTTC[, które są równie
efektywne. W większości przypadków stosowanie obiektów jest dla mnie bardziej czytelne.
Nale y unikać stosowania O[USNATGUWNV, poniewa funkcja ta wykonuje czasochłonną pro-
cedurę przeszukiwania tablicy dwuwymiarowej.

Gdy nie ma ju więcej wierszy do pobrania, funkcja zwraca (#.5'. Aby wykorzystać to zacho-
wanie, pobieranie pojedynczego wiersza jest realizowane w pętli YJKNG. Wiersz w tabeli HTML
jest tworzony poprzez wyświetlenie właściwości obiektu w odpowiednich jej polach. Po wy-
świetleniu wszystkich wierszy tabela jest zamykana. Nie trzeba w tym miejscu zamykać połą-
czenia z bazą danych, poniewa PHP robi to automatycznie w chwili zakończenia skryptu.

Opisany przykład jest niezwykle prosty, ale dotyka większości istotnych kwestii dotyczących
współpracy z bazami danych. Poniewa ka dy z wierszy jest wyświetlany w pętli, wszystkie
546   Część III n Algorytmy

      wyglądają tak samo. Je eli dane ulegną zmianie, nie trzeba wprowadzać zmian w kodzie,
      który przekształca je w HTML. Mo na dowolnie zmieniać zawartość bazy danych.

      Dobrym przykładem zastosowania tej techniki jest losowy generator nazw marek handlowych:
      http://www.leonatkinson.com/random/, który tworzy losowe nazwy z tabeli wyrazów prze-
      chowywanej w bazie MySQL, do której ka dy mo e dodawać nowe słowa. Ka de odświe-
       enie strony generuje kolejne dziesięć nazw.



Śledzenie odwiedzających
za pomocą identyfikatorów sesji
      Witryny sieciowe powoli przekształcają się w aplikacje sieciowe. Pojawia się tu problem
      zachowywania stanu. Podczas przechodzenia ze strony na stronę aplikacja musi pamiętać,
      kim jest u ytkownik. Sieć jest anonimowa: przeglądarka łączy się z serwerem, pobiera parę
      plików i zamyka połączenie. Pięć minut później, gdy ponownie połączymy się ze stroną, proces
      się powtarza. Mimo e informacje o logowaniu są przechowywane, serwer nas nie pamięta.
      Wszelkie dane, jakie podaliśmy o sobie trzy strony wcześniej, nawet je eli zostały zapisane,
      nie będą z nami kojarzone.

      Wyobraźmy sobie kreator zamówień pizzy: pierwszy ekran pyta się, ile pizz chcemy zamówić;
      następnie przechodzimy do ekranów odpowiadających ka dej z zamawianych pizz i wybie-
      ramy jej zawartość i rodzaj ciasta; na koniec kolejna strona pyta o nasze nazwisko i telefon,
      aby przesłać nasze zamówienie do najbli szej pizzerii realizującej dowóz. Jednym ze sposobów
      rozwiązania tego problemu jest stopniowe przekazywanie dotychczas gromadzonych infor-
      macji z ka dym następnym przesłaniem danych z formularza u ytkownika. W miarę przecho-
      dzenia ze strony na stronę liczba danych będzie rosła. Przekazujemy serwerowi wielokrotnie
      częściowe dane o zamówieniu — metoda ta działa, ale wią e się z przesyłaniem wielu nie-
      potrzebnych informacji.

      Stosując bazę danych i identyfikator sesji, mo na gromadzić informacje w miarę ich przeka-
      zywania. Identyfikator staje się kluczem do informacji. Z chwilą gdy skrypt pobiera identy-
      fikator, przypomina sobie, co działo się wcześniej.

      Inną kwestią jest sposób pobrania identyfikatora. Istnieją tu dwie mo liwości. Pierwszą jest
      przekazywanie identyfikatora jako zmiennej w ka dym łączu i w ka dym formularzu. W przy-
      padku formularza mo na to łatwo zrealizować za pomocą zmiennej ukrytej. W przypadku
      łącza nale y wstawić znak zapytania i definicję zmiennej. Je eli zało ymy, e identyfikator
      sesji jest przechowywany w zmiennej UGUUKQP, jego przesłanie na następną stronę mogłoby
      mieć następującą formę:
        RTKPV
 # *4'( RCIGRJR!UGUUKQP UGUUKQP PGZV# 

      Metoda ta działa z wszystkim przeglądarkami, równie z Lynx.

      Drugim sposobem jest u ycie cookies. Podobnie jak zmienne formularzy GET i POST, cookies
      są zamieniane przez PHP na zmienne. Mo na więc utworzyć cookie o nazwie UGUUKQP.
Rozdział 17. n Integracja z bazami danych   547

       Ró nica polegać będzie na tym, e cookies muszą być przesyłane w nagłówkach i nale y
       wysłać je, zanim przeglądarka otrzyma jakąkolwiek treść HTML. Warto w tym miejscu zaj-
       rzeć do opisu funkcji UGVEQQMKG w rozdziale 8., „Funkcje wejścia-wyjścia”. Bardziej zło ona
       strategia polega na próbie zastosowania cookies i w przypadku niepowodzenia oparciu się
       na zmiennych GET.

       Obydwie metody są szeroko stosowane w Internecie. Wystarczy wejść w jakąkolwiek witrynę
       sklepu internetowego. Na potrzeby przykładu opisana tu zostanie strategia polegająca na
       zastosowaniu zmiennych GET. Pierwszym krokiem jest stworzenie tabeli przechowującej
       identyfikatory sesji. Listing 17.4 przedstawia kod SQL, tworzący prostą tabelę UGULC w bazie
       danych MySQL.

Listing 17.4. Tworzenie tabeli przechowującej sesje
          %4'#6' 6#$.' UGULC
          

                  + 8#4%*#4
 016 07..
                  1UVCVPKC1RGTCELC #6'6+/'
                  24+/#4; -'; 
+
          


       Kluczami w tabeli są 8-znakowe łańcuchy. Po ka dym przejściu u ytkownika na inną stronę
       odświe ana jest zawartość kolumny 1UVCVPKC1RGTCELC. W ten sposób mo emy pozbyć się
       wszelkich sesji, które wyglądają na nieu ywane. Ka da wizyta na stronie spowoduje usuwanie
       sesji bezczynnych przez 30 minut. Następnym krokiem jest sprawdzanie, czy u ytkownik
       posiada identyfikator sesji. Je eli nie posiada, zostaje on utworzony. Je eli posiada, nale y
       sprawdzić, czy jest on prawidłowy.

       Po pierwszym załadowaniu skryptu z listingu 17.5 tworzy on identyfikator sesji. Ka de
       kliknięcie przycisku Odświe w przeglądarce spowoduje sprawdzenie sesji przez skrypt. Je eli
       identyfikator sesji nie znajduje się w tabeli UGULC, wówczas zostanie odrzucony i utworzony
       będzie nowy. Mo na spróbować przesłać nieprawidłowy identyfikator, usuwając jakiś znak
       w pasku adresu przeglądarki.

Rysunek 17.2.
Sprawdzanie
identyfikatora
sesji




Listing 17.5. Sprawdzanie identyfikatora sesji
          !
GOQPUVTCELC CUVQUQYCPKC KFGPV[HKMCVQTÎY UGULK
HWPEVKQP 5GUUKQP+
 NGPIVJ
548   Część III n Algorytmy

                ]
                         7UVCPQYKGPKG CMTGUW FQRWUECNP[EJ PCMÎY
                         2QQN  #$%'()*+,-./0123456789:; 
                         2QQN  CDEFGHIJKLMNOPQRSTUVWXYZ[ 
                         NCUV%JCT  UVTNGP
 2QQN  

                        HQT
 K   K  NGPIVJ K


                        ]
                                 UKF  2QQN=OVATCPF
 NCUV%JCT?
                        _

                        TGVWTP
 UKF
                _

                +PKELCNKCELC IGPGTCVQTC NKED NQUQY[EJ
                OVAUTCPF
VKOG


                RQ æEGPKG  UGTYGTGO K MQPVTQNC RQYQFGPKC QRGTCELK
                KH
 
 FD.KPM  O[USNAREQPPGEV
 NQECNJQUV  HTGGVTCFG  
                ]
                        RTKPV
 0KG OQ PC RQ æE[è UKú  DCæ FCP[EJ $4 P 
                        RTKPV
 CMQ EGPKG UMT[RVW $4 P 
                        GZKV

                _

                Y[DÎT DC[ FCP[EJ K MQPVTQNC RQYQFGPKC QRGTCELK
                KH
 O[USNAUGNGEVAFD
 VGUV  FD.KPM
                ]
                        RTKPV
 0KG OQ PC Y[DTCè DC[ VGUV $4 P 
                        RTKPV
 CMQ EGPKG UMT[RVW $4 P 
                        GZKV

                _

                WUWPKúEKG YU[UVMKEJ UVCT[EJ UGULK
                 3WGT[  '.'6' (41/ UGULC 
                 3WGT[  9*'4' 1UVCVPKC1RGTCELC  
                  3WGT[  FCVG
 ;OF *KU  
VKOG

                 3WGT[      
                KH
 
 FD4GUWNV  O[USNASWGT[
 3WGT[ FD.KPM
                ]
                         PKG OQ PC Y[MQPCè CR[VCPKC
                         RTKPV
 0KG OQ PC WUWPæè UVCT[EJ UGULK $4 P 
                         RTKPV
 -QOWPKMCV /[53.  O[USNAGTTQT
  $4 P 
                         GZKV

                _

                URTCYFGPKG UGULK
                KH
KUUGV
 UGUUKQP
                ]
                        LG GNK OCO[ UGULú PCUVúRWLG LGL URTCYFGPKG
                         3WGT[  5'.'%6
3WGT[  (41/ UGULC 
                         3WGT[  9*'4' +  CFFUNCUJGU
 UGUUKQP        

                        KH
 
 FD4GUWNV  O[USNASWGT[
 3WGT[ FD.KPM
Rozdział 17. n Integracja z bazami danych     549

             ]
                     PKG OQ PC Y[MQPCè CR[VCPKC
                     RTKPV
 PKG OQ PC Y[MQPCè CR[VCPKC FQ VCDGNK UGULC $4 P 
                     RTKPV
 -QOWPKMCV /[53.  O[USNAGTTQT
  $4 P 
                     GZKV

             _

             LG GNK YTÎEQP[ QUVC LCMK YKGTU WFC Q UKú QFPCNG è UGULú
             KH
O[USNAPWOTQYU
 FD4GUWNV
             ]
                     UGULC KUVPKGLG QF YKG GPKG ECUW QUVCVPKGL QRGTCELK
                      3WGT[  72#6' UGULC 
                      3WGT[  5'6 1UVCVPKC1RGTCELC  PQY
 
                      3WGT[  9*'4' + UGUUKQP 
                     KH
 
 FD4GUWNV  O[USNASWGT[
 3WGT[ FD.KPM
                     ]
                             PKG OQ PC Y[MQPCè CR[VCPKC
                             RTKPV
 0KG OQ PC QF YKG [è VCDGNK UGULC $4 P 
                             RTKPV
 MQOWPKMCV /[53.  O[USNAGTTQT
  $4 P 
                             GZKV

                     _
             _
             GNUG
             ]
                      [ KFGPV[HKMCVQT
                     RTKPV
 0KGPCP[ KFGPV[HKMCVQT UGULK 
 UGUUKQP $4 P 
                      UGUUKQP  
             _
    _

    LG GNK PKG D[ Q UGULK PCNG [ Læ WVYQT[è
    KH
 UGUUKQP  
    ]
            PKG D[ Q UGULK  VYQTQPC LGUV PQYC
             UGUUKQP  5GUUKQP+


             WOKGUEGPKG UGULK Y DCKG FCP[EJ
              3WGT[  +05'46 +061 UGULC 
              3WGT[  8#.7'5 
 UGUUKQP  PQY
 
             KH
 
 FD4GUWNV  O[USNASWGT[
 3WGT[ FD.KPM
             ]
                     PKG OQ PC Y[MQPCè CR[VCPKC
                     RTKPV
 0KG OQ PC YUVCYKè GNGOGPVW FQ VCDGNK UGULC $4 P 
                     RTKPV
 -QOWPKMCV /[53.  O[USNAGTTQT
  $4 P 
                     GZKV

             _
    _

    RTKPV
   6YÎL KFGPV[HKMCVQT UGULK VQ UGUUKQP$4 P 
    RTKPV
   # *4'( 2*2A5'.(!UGUUKQP UGUUKQP 
    RTKPV
   1F YKG UVTQPú 
    RTKPV
   # $4 P 
!
550    Część III n Algorytmy

       Kolejnym logicznym krokiem jest dodanie kolejnej tabeli, przechowującej informacje o osobie
       przeglądającej witrynę. Jedna z kolumn powinna przechowywać identyfikator sesji z tabeli
       UGULC. Dopisanie tego kodu mo e być dobrym ćwiczeniem.




Przechowywanie danych w bazie
       Informacja przechowywana w bazie danych nie ogranicza się do krótkich łańcuchów, jak
       32-znakowa nazwa towaru z listingu 17.3. Mo na te tworzyć du e, 64-kilobajtowe obiekty,
       które pomieszczą nawet kompletną stronę internetową. Zaletą jest fakt, e strony zawsze istnieją
       w bardzo uporządkowanym otoczeniu. Mo na je określić numerem, który wystarcza do ustale-
       nia zale ności między stronami. Minusem jest niemo ność załadowania strony istniejącej
       w bazie danych do swojego ulubionego edytora. Nale y tu rozwa yć zyski i straty — dla
       większości stron nie ma potrzeby przechowywania ka dego ich elementu w bazie danych.

       Przykładem sytuacji, kiedy umieszczenie zawartości strony w bazie danych jest zasadne, jest
       forum internetowe. System taki przechowuje wiadomości, które, oprócz tego, e są stronami,
       posiadają charakterystyki, takie jak: tytuł, data utworzenia i autor. Taka struktura mo e być
       w prosty sposób odwzorowana w tabeli bazy danych. Co więcej, poniewa ka dej wiado-
       mości mo na nadać jednoznaczny identyfikator, mo na organizować wiadomości w formie
       drzewa zale ności. U ytkownik zostawia wiadomość, która rozpocznie wątek w dyskusji i spo-
       woduje pojawienie się nowych wiadomości do niego nawiązujących. Wiadomości mo na
       wyświetlać w hierarchii wątków, co ułatwia ich przeglądanie.

       Jak w ka dym systemie opartym na bazie danych, pierwszy krok polega na stworzeniu tabeli.
       W listingu 17.6 utworzona zostaje tabela do przechowywania wiadomości. Ka da wiadomość
       ma tytuł, nazwę nadawcy, czas wysłania, wiadomość nadrzędną i treść. Identyfikator wia-
       domości nadrzędnej mo e wynosić zero, co oznacza, e wiadomość inicjuje nowy wątek.
       Treścią wiadomości nie musi być zwykły tekst, mo e nią być równie kod HTML. Tym sposo-
       bem u ytkownicy mają mo liwość tworzenia w bazie stron za pomocą własnych przeglądarek.

Listing 17.6. Tworzenie tabeli przechowującej wiadomości
          %4'#6' 6#$.' 9KCFQOQUE
          

                  + +06 016 07.. #761A+0%4'/'06
                  6GOCV 8#4%*#4

                  0CFCYEC 8#4%*#4

                  5VYQTQPQ #6'6+/'
                  2TQFGM +06
                  6TGUE $.1$
                  24+/#4; -';
+
          


       Skrypt z listingu 17.7 ma dwa tryby pracy: listowanie tytułów wiadomości i przeglądanie
       pojedynczej wiadomości. Je eli zmienna OGUUCIG+ jest pusta, wówczas ukazana zostaje lista
       wszystkich wiadomości w systemie, zorganizowanych według wątków. Realizuje to funkcja
       UJQY/GUUCIGU. W tym miejscu warto powrócić do fragmentu rozdziału 4., „Funkcje”, gdzie
       opisana jest rekurencja. Funkcja UJQY/GUUCIG korzysta z rekurencji przy przeglądaniu ka dej

Weitere ähnliche Inhalte

Was ist angesagt?

Perl. Od podstaw
Perl. Od podstawPerl. Od podstaw
Perl. Od podstaw
Wydawnictwo Helion
 
PHP5. Księga eksperta
PHP5. Księga ekspertaPHP5. Księga eksperta
PHP5. Księga eksperta
Wydawnictwo Helion
 
Pajączek 5 NxG
Pajączek  5 NxGPajączek  5 NxG
Pajączek 5 NxG
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ładu
Wydawnictwo 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 II
Wydawnictwo Helion
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędzia
Wydawnictwo Helion
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
Wydawnictwo Helion
 

Was ist angesagt? (8)

Perl. Od podstaw
Perl. Od podstawPerl. Od podstaw
Perl. Od podstaw
 
PHP5. Księga eksperta
PHP5. Księga ekspertaPHP5. Księga eksperta
PHP5. Księga eksperta
 
PHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzeniePHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzenie
 
Pajączek 5 NxG
Pajączek  5 NxGPajączek  5 NxG
Pajączek 5 NxG
 
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. 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
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
 

Andere mochten auch

Tcl-Tk. Programowanie
Tcl-Tk. ProgramowanieTcl-Tk. Programowanie
Tcl-Tk. Programowanie
Wydawnictwo Helion
 
Protokoły SNMP i RMON. Vademecum profesjonalisty
Protokoły SNMP i RMON. Vademecum profesjonalistyProtokoły SNMP i RMON. Vademecum profesjonalisty
Protokoły SNMP i RMON. Vademecum profesjonalisty
Wydawnictwo Helion
 
Pamiętniki hakerów
Pamiętniki hakerówPamiętniki hakerów
Pamiętniki hakerów
Wydawnictwo Helion
 
Po prostu CorelDRAW 11
Po prostu CorelDRAW 11Po prostu CorelDRAW 11
Po prostu CorelDRAW 11
Wydawnictwo Helion
 

Andere mochten auch (6)

Telefony komórkowe
Telefony komórkoweTelefony komórkowe
Telefony komórkowe
 
Tcl-Tk. Programowanie
Tcl-Tk. ProgramowanieTcl-Tk. Programowanie
Tcl-Tk. Programowanie
 
Protokoły SNMP i RMON. Vademecum profesjonalisty
Protokoły SNMP i RMON. Vademecum profesjonalistyProtokoły SNMP i RMON. Vademecum profesjonalisty
Protokoły SNMP i RMON. Vademecum profesjonalisty
 
Pamiętniki hakerów
Pamiętniki hakerówPamiętniki hakerów
Pamiętniki hakerów
 
Po prostu CorelDRAW 11
Po prostu CorelDRAW 11Po prostu CorelDRAW 11
Po prostu CorelDRAW 11
 
Windows XP PL. Ćwiczenia zaawansowane
Windows XP PL. Ćwiczenia zaawansowaneWindows XP PL. Ćwiczenia zaawansowane
Windows XP PL. Ćwiczenia zaawansowane
 

Ähnlich wie PHP. Programowanie

PHP w mgnieniu oka
PHP w mgnieniu okaPHP w mgnieniu oka
PHP w mgnieniu oka
Wydawnictwo Helion
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
Wydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
Wydawnictwo Helion
 
PHP. Rozmówki
PHP. RozmówkiPHP. Rozmówki
PHP. Rozmówki
Wydawnictwo 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 danych
Wydawnictwo 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 start
Wydawnictwo 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 profesjonalisty
Wydawnictwo Helion
 
Python. Od podstaw
Python. Od podstawPython. Od podstaw
Python. Od podstaw
Wydawnictwo Helion
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
Wydawnictwo 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 II
Wydawnictwo Helion
 
Po prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxGPo prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxG
Wydawnictwo Helion
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
Wydawnictwo 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.0
Wydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie II
Wydawnictwo Helion
 
PHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawPHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstaw
Wydawnictwo 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 PHP
Wydawnictwo Helion
 

Ähnlich wie PHP. Programowanie (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 w mgnieniu oka
PHP w mgnieniu okaPHP w mgnieniu oka
PHP w mgnieniu oka
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
PHP. Rozmówki
PHP. RozmówkiPHP. Rozmówki
PHP. Rozmówki
 
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
 
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
 
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
 
Python. Od podstaw
Python. Od podstawPython. Od podstaw
Python. Od podstaw
 
PHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowePHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowe
 
Perl. Ćwiczenia
Perl. ĆwiczeniaPerl. Ćwiczenia
Perl. Ćwiczenia
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
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
 
Po prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxGPo prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxG
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneDelphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowane
 
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
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie II
 
PHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawPHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstaw
 
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
 

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. Projekty
Wydawnictwo 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ętnik
Wydawnictwo Helion
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
Wydawnictwo 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 praktyczne
Wydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
Wydawnictwo 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 Windows
Wydawnictwo 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 II
Wydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
Wydawnictwo Helion
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
Wydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
Wydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Wydawnictwo 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 moderacja
Wydawnictwo Helion
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
Wydawnictwo Helion
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
Wydawnictwo Helion
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
Wydawnictwo 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&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;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

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI PHP. Programowanie KATALOG KSI¥¯EK Autor: Leon Atkinson KATALOG ONLINE T³umaczenie: Jaros³aw Dobrzañski ISBN: 83-7197-967-3 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: Core PHP Programming, 2E Format: B5, stron: 674 TWÓJ KOSZYK DODAJ DO KOSZYKA Ksi¹¿ka „PHP. Programowanie.” to praktyczny przewodnik po PHP4 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 CENNIK I INFORMACJE opisuje sk³adniê PHP i kluczowe elementy jêzyka. Atkinson przedstawia tak¿e najwa¿niejsze funkcje PHP, w tym funkcje wej cia-wyj cia, przetwarzania danych, ZAMÓW INFORMACJE matematyczne, daty, czasu, konfiguracji, funkcje umo¿liwiaj¹ce wspó³pracê z bazami O NOWO CIACH danych, funkcje graficzne i sieciowe. Prezentuje on równie¿ dzia³anie PHP na przyk³adach realizuj¹cych sortowanie, przeszukiwanie, analizê ³añcuchów i inne ZAMÓW CENNIK zadania. Opisane zosta³y tak¿e praktyczne metody tworzenia i diagnostyki programów w PHP4. Ksi¹¿ka PHP. Programowanie zawiera: CZYTELNIA • Jasny i szczegó³owy opis sk³adni i funkcji PHP • Dok³adny opis integracji PHP z bazami danych FRAGMENTY KSI¥¯EK ONLINE • Techniki tworzenia i optymalizacji skryptów, pod k¹tem ich wydajno ci i ³atwej rozbudowy • Praktyczne techniki diagnostyczne, u³atwiaj¹ce znalezienie i poprawienie b³êdów 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 Historia PHP ............................................................................................................ 16 Co sprawia, że PHP jest lepszy od innych języków? ..................................................... 18 Interfejsy do systemów zewnętrznych......................................................................... 19 Jak PHP współpracuje z serwerem sieciowym? ........................................................... 20 Wymagania sprzętowe i programowe ......................................................................... 20 Instalacja na Apache dla Uniksa................................................................................ 21 Instalacja na IIS dla Windows 2000 .......................................................................... 23 Edycja skryptów ....................................................................................................... 23 Algorytmy ................................................................................................................ 24 Jak wygląda skrypt PHP? .......................................................................................... 25 Przechowywanie danych............................................................................................ 27 Odbieranie informacji od użytkownika ........................................................................ 28 Wybieranie pomiędzy alternatywami........................................................................... 30 Powtarzanie sekwencji kodu...................................................................................... 31 Podsumowanie ........................................................................................................ 32 Rozdział 2. Zmienne, operatory i wyra enia.....................................................................................33 Identyfikatory........................................................................................................... 34 Typy danych............................................................................................................. 34 Tworzenie zmiennych i ich zakres działania ................................................................ 37 Przyporządkowanie zmiennym wartości ...................................................................... 40 Odczytywanie wartości zmiennych.............................................................................. 42 Uwalnianie pamięci .................................................................................................. 42 Stałe....................................................................................................................... 43 Operatory ................................................................................................................ 44 Operatory logiczne i relacyjne .................................................................................... 45 Operatory bitowe...................................................................................................... 46 Inne operatory ......................................................................................................... 47 Operatory przyporządkowania .................................................................................... 49 Wyrażenia ............................................................................................................... 50 Rozdział 3. Instrukcje sterujące ........................................................................................................53 Prawda i fałsz .......................................................................................................... 54 Instrukcja if ............................................................................................................. 54 Operator ?............................................................................................................... 56
  • 3. 4 PHP. Programowanie Instrukcja switch...................................................................................................... 57 Pętle....................................................................................................................... 59 Instrukcja while........................................................................................................ 59 Instrukcja break....................................................................................................... 60 Instrukcja continue................................................................................................... 61 Instrukcja do…while................................................................................................. 62 Instrukcja for ........................................................................................................... 63 Instrukcja foreach .................................................................................................... 65 exit, die i return ....................................................................................................... 65 Obliczanie wyrażeń logicznych ................................................................................... 66 Rozdział 4. Funkcje ..............................................................................................................................67 Deklarowanie funkcji ................................................................................................ 67 Instrukcja return ...................................................................................................... 68 Zakres i instrukcja global.......................................................................................... 69 Argumenty ............................................................................................................... 69 Rekurencja .............................................................................................................. 72 Dynamiczne wywołania funkcji................................................................................... 73 Rozdział 5. Tablice................................................................................................................................75 Tablice jednowymiarowe ........................................................................................... 75 Indeksowanie tablic ................................................................................................. 77 Inicjalizacja tablic..................................................................................................... 78 Tablice wielowymiarowe............................................................................................ 79 Formatowanie tablic ................................................................................................. 80 Odwołania do tablic z wnętrza łańcucha ..................................................................... 81 Rozdział 6. Klasy i obiekty...................................................................................................................83 Definiowanie klasy ................................................................................................... 84 Tworzenie obiektu .................................................................................................... 86 Dostęp do metod i właściwości ................................................................................. 87 Rozdział 7. Operacje we/wy i dostęp do dysku ................................................................................89 Połączenia HTTP ...................................................................................................... 90 Wysyłanie treści do przeglądarki................................................................................ 91 Buforowanie na wyjściu ............................................................................................ 92 Zmienne środowiskowe ............................................................................................ 93 Pobieranie danych z formularzy ................................................................................. 94 Cookies .................................................................................................................. 95 Pobieranie plików od użytkownika.............................................................................. 96 Wywołania metody PUT............................................................................................. 97 Zapis do plików i ich odczytywanie............................................................................. 98 Sesje ...................................................................................................................... 99 Funkcje include i require......................................................................................... 102 Część II Funkcje PHP .................................................................................................... 105 Rozdział 8. Funkcje wejścia-wyjścia ............................................................................................... 107 Wysyłanie tekstu do przeglądarki............................................................................. 108 Buforowanie wyjścia ............................................................................................... 110 Pliki ...................................................................................................................... 111
  • 4. Spis treści 5 Pliki skompresowane ............................................................................................. 145 POSIX ................................................................................................................... 151 Diagnostyka .......................................................................................................... 157 Obsługa sesji ........................................................................................................ 178 Polecenia interpretera ............................................................................................ 181 Nagłówki HTTP....................................................................................................... 183 Sieć...................................................................................................................... 185 FTP ....................................................................................................................... 190 Rozdział 9. Funkcje przetwarzania danych..................................................................................... 199 Typy danych, stałe i zmienne .................................................................................. 199 Tablice.................................................................................................................. 205 Mieszanie ............................................................................................................. 229 Łańcuchy............................................................................................................... 232 Kodowanie i dekodowanie ...................................................................................... 239 Szyfrowanie ........................................................................................................... 260 Wyrażenia regularne ............................................................................................... 264 Wyrażenia regularne zgodne z Perlem ...................................................................... 268 Rozdział 10. Funkcje matematyczne .................................................................................................273 Operacje matematyczne ......................................................................................... 273 Liczby losowe ........................................................................................................ 281 Liczby dowolnej precyzji .......................................................................................... 284 Rozdział 11. Funkcje daty, czasu i konfiguracji................................................................................287 Data i czas ............................................................................................................ 287 Niestandardowe kalendarze .................................................................................... 294 Konfiguracja .......................................................................................................... 298 Rozdział 12. Funkcje graficzne..........................................................................................................305 Analizowanie obrazków ........................................................................................... 306 Tworzenie obrazków JPEG, PNG i WBMP................................................................... 307 Rozdział 13. Funkcje współpracujące z bazami danych .................................................................339 dBase ................................................................................................................... 340 Abstrakcyjna baza danych typu DBM........................................................................ 344 filePro ................................................................................................................... 350 Informix................................................................................................................. 352 InterBase .............................................................................................................. 360 mSQL ................................................................................................................... 366 MySQL .................................................................................................................. 377 ODBC.................................................................................................................... 392 Oracle................................................................................................................... 403 Postgres ............................................................................................................... 422 Sybase ................................................................................................................. 432 Rozdział 14. Inne funkcje ................................................................................................................... 441 Apache ................................................................................................................. 442 Aspell ................................................................................................................... 445 COM ..................................................................................................................... 446 Gettext.................................................................................................................. 448
  • 5. 6 PHP. Programowanie IMAP..................................................................................................................... 449 Java...................................................................................................................... 470 LDAP .................................................................................................................... 470 Semafory .............................................................................................................. 481 Pamięć wspólna..................................................................................................... 483 SNMP ................................................................................................................... 486 WDDX ................................................................................................................... 489 XML ...................................................................................................................... 492 Część III Algorytmy......................................................................................................505 Rozdział 15. Sortowanie, wyszukiwanie i liczby losowe ................................................................507 Sortowanie ............................................................................................................ 508 Sortowanie bąbelkowe ........................................................................................... 509 Algorytm Quicksort ................................................................................................. 511 Wbudowane funkcje sortujące................................................................................. 512 Sortowanie z funkcją porównującą ........................................................................... 516 Wyszukiwanie ........................................................................................................ 519 Indeksowanie ........................................................................................................ 519 Liczby losowe ........................................................................................................ 523 Identyfikatory losowe.............................................................................................. 525 Losowanie banera reklamowego.............................................................................. 526 Rozdział 16. Analiza składni i łańcuchów..........................................................................................529 Podział łańcuchów.................................................................................................. 529 Wyrażenia regularne ............................................................................................... 531 Definiowanie wyrażeń regularnych ........................................................................... 532 Stosowanie wyrażeń regularnych w skryptach PHP...................................................... 533 Rozdział 17. Integracja z bazami danych ......................................................................................... 541 Tworzenie tabel HTML z zapytań SQL....................................................................... 542 Śledzenie odwiedzających za pomocą identyfikatorów sesji ....................................... 546 Przechowywanie danych w bazie.............................................................................. 550 Warstwy abstrakcyjne baz danych............................................................................ 556 Rozdział 18. Sieć.................................................................................................................................557 Uwierzytelnianie w HTTP ......................................................................................... 557 Sterowanie buforem przeglądarki ............................................................................ 559 Ustawianie typu dokumentu .................................................................................... 561 Poczta elektroniczna z załącznikami......................................................................... 563 Weryfikacja adresu skrzynki pocztowej ..................................................................... 565 Rozdział 19. Generowanie grafiki .....................................................................................................569 Przyciski dynamiczne.............................................................................................. 570 Generowanie grafiki „w locie” ................................................................................. 574 Wykresy słupkowe.................................................................................................. 574 Wykresy kołowe ..................................................................................................... 576 Rozciąganie pojedynczych pikseli ............................................................................ 581
  • 6. Spis treści 7 Część IV In ynieria oprogramowania........................................................................583 Rozdział 20. Integracja z HTML-em ..................................................................................................585 Umieszczanie fragmentów kodu PHP w dokumencie HTML ........................................ 585 Używanie PHP do generowania całych dokumentów HTML ......................................... 589 Separowanie HTML-u od PHP .................................................................................. 591 Tworzenie pól <SELECT> ........................................................................................ 592 Przesyłanie tablic w formularzach ............................................................................ 595 Rozdział 21. Projektowanie ...............................................................................................................597 Tworzenie specyfikacji wymagań.............................................................................. 598 Tworzenie dokumentów projektowych....................................................................... 601 Używanie CVS........................................................................................................ 602 Modularyzacja za pomocą include ........................................................................... 603 FreeEnergy ............................................................................................................ 604 FastTemplate ........................................................................................................ 606 Midgard ................................................................................................................ 606 Ariadne ................................................................................................................. 607 Bezpieczeństwo i ochrona danych ........................................................................... 607 Ukrywanie ............................................................................................................. 608 Adresy przyjazne wyszukiwarkom ............................................................................. 609 Skrypty uruchamiane regularnie .............................................................................. 610 Rozdział 22. Efektywność i diagnostyka.......................................................................................... 613 Mierzenie wydajności ............................................................................................. 614 Pobieranie wyników zapytania z bazy danych ............................................................ 615 Kiedy przechowywać dane w bazie........................................................................... 616 Diagnostyka bieżąca .............................................................................................. 617 Diagnostyka zdalna ................................................................................................ 617 Symulowanie połączeń HTTP ................................................................................... 618 Dodatki.......................................................................................................................... 619 Dodatek A Kody z ukośnikiem ........................................................................................................... 621 Dodatek B Kody ASCII.........................................................................................................................623 Dodatek C Operatory .........................................................................................................................629 Dodatek D Znaczniki PHP ................................................................................................................... 631 Dodatek E Konfiguracja PHP w czasie kompilacji............................................................................633 Dodatek F Zasoby internetowe .........................................................................................................637 Dodatek G Przewodnik po stylach PHP.............................................................................................639 Skorowidz ..........................................................................................................................................643
  • 7. Integracja z bazami danych W tym rozdziale: n Tworzenie tabel HTML z zapytań SQL. n Śledzenie odwiedzających za pomocą identyfikatorów sesji. n Przechowywanie danych w bazie. n Warstwy abstrakcyjne baz danych. PHP ściśle współpracuje z wieloma bazami danych. Je eli wewnętrzna współpraca z określoną bazą nie istnieje, zawsze mo na skorzystać z ODBC, który jest standardem dla zewnętrz- nych sterowników baz danych. Regularnie pojawiają się moduły, umo liwiające współ- pracę z nowymi bazami danych. Programiści PHP twierdzą: „Dajcie nam do testowania swój produkt, a stworzymy kod obsługujący go w PHP”. MySQL jest niewątpliwie najbardziej popularną bazą danych wśród programistów PHP. Poza tym, e jest darmowa, nadaje się do zastosowań sieciowych z uwagi na du ą szybkość. W przykładach tu opisanych zakładam posiadanie bazy danych MySQL. Mo na ją pobrać z witryny MySQL pod adresem <http://www.mysql.com> i zainstalować w swoim systemie lub pokusić się o dostosowanie opisanych tu przykładów do współpracy z inną bazą. Większość relacyjnych baz danych u ywa strukturalnego języka zapytań (SQL). Jest to język czwartej generacji, co oznacza, e przypomina bardziej tekst w języku angielskim ni kod źródłowy w PHP. Omówienie samego SQL wykracza poza ramy tej ksią ki. W przypadku zni- komej wiedzy na ten temat, radzę przeglądnąć listę materiałów wymienioną w dokumentacji na stronie domowej MySQL: <http://www.mysql.com/doc.html>. Alternatywą mo e być ksią ka, taka jak Hands-On SQL Roberta Grotha i Davida Gerbera, wydana przez Prentice Hall.
  • 8. 542 Część III n Algorytmy Tworzenie tabel HTML z zapytań SQL Jednym z prostszych zadań, jakie mo na wykonać za pomocą bazy danych i PHP, jest pobranie danych z bazy i wyświetlenie ich w tabeli HTML. Tabela taka mo e zawierać np. listę towarów na sprzeda , listę projektów, listę serwerów DNS i ich czasy reakcji. Na potrzeby przedstawio- nego tu przykładu wykorzystany zostanie pierwszy z tych przykładów. Załó my, e supermar- ket chce zamieścić na stronie internetowej listę towarów na sprzeda . W tym celu trzeba stwo- rzyć stronę, która wyświetla zawartość bazy danych. Zostanie tu zastosowana baza VGUV, tworzona podczas instalacji MySQL. Skrypt PHP, przeglądający katalog produktów, będzie znajdował się na tym samym komputerze, na którym zainstalowany jest serwer bazy danych. Pierwszym krokiem jest utworzenie tabeli. Listing 17.1 pokazuje kod SQL, tworzący prostą tabelę, składającą się z trzech kolumn. Tabela nazywa się MCVCNQI. Zawiera ona kolumnę, zwaną +&, która zawiera wartości całkowite, maksymalnie jedenastocyfrowe. Kolumna ta nie mo e być pusta i nowym wierszom automatycznie będą przyporządkowywane kolejne wartości. Ostatni wiersz definicji określa +& jako klucz podstawowy. Powoduje to, e war- tości w tej kolumnie są traktowane jako indeksy i uniemo liwia dublowanie się kluczy. Pozo- stałe dwie kolumny to 0COG i 2TKEG. Listing 17.1. Tworzenie tabeli „katalog” %4'#6' 6#$.' MCVCNQI +& +06 016 07.. #761A+0%4'/'06 0CYC 8#4%*#4 EGPC (.1#6 24+/#4; -'; + 0COG to łańcuch znaków o zmiennej długości, maksymalnie do 32 znaków. 2TKEG to liczba zmiennoprzecinkowa z sześcioma cyframi przed i dwoma po przecinku. Format ten nadaje się do zapisu cen. Kolejnym krokiem jest umieszczenie elementów w tabeli. Jako e jest to tylko demonstracja, wprowadzimy tu parę przykładowych produktów, jakie mo na nabyć w supermarkecie wraz z wymyślonymi cenami. W tym celu u yta zostanie instrukcja +05'46. Listing 17.2 jest przykładem opisanej procedury. Listing 17.2. Wprowadzanie danych do tabeli „katalog” +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 5EQVGEMC +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 )TGDKGP +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 2CUVC FQ GDQY +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 0KE FGPV[UV[EPC +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 5CORQP +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 1F[YMC +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 GQFQTCPV +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 GN +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 1UVTC FQ IQNCTMK +05'46 +061 MCVCNQI 0CYC %GPC 8#.7'5 5EQVMC
  • 9. Rozdział 17. n Integracja z bazami danych 543 Ka da instrukcja SQL kończy się średnikiem, podobnie jak w PHP. Informujemy serwer MySQL, e chcemy wstawić wiersz do tabeli MCVCNQI i e podamy tylko nazwę produktu i cenę. Jako e pomijamy tu +, MySQL stworzy go sam. Wynika to ze zdefiniowania tej kolumny jako #761A+0%4'/'06. Słowo kluczowe 8#.7'5 informuje serwer, e za chwilę zostaną prze- słane wartości opisane w poprzednim poleceniu. Wartości przesyłane są w apostrofach, zgodnie ze standardem przyjętym w SQL. Aby sprawdzić, czy operacja się powiodła, listing 17.1 wyświetla wartości, jakie otrzymaliby- śmy, wybierając wszystko z tabeli MCVCNQI z poziomu klienta MySQL. Realizuje to polecenie: 5'.'%6
  • 10. (41/ MCVCNQI po wydaniu którego otrzymujemy: + 0CYC %GPC 5EQVGEMC )TGDKGP 2CUVC FQ GDQY 0KE FGPV[UV[EPC 5CORQP 1F[YMC GQFQTCPV GN 1UVTC FQ IQNCTMK 5EQVMC TQYU KP UGV UGE Ostatnim krokiem jest napisanie skryptu PHP, który pobiera zawartość tabeli i przekształca ją w tabelę HTML. Listing 17.3 przedstawia kod PHP, pobierający nazwy oraz ceny i wyświe- tlający je w tabeli HTML. Na początku nale y połączyć się z serwerem bazy danych. Realizuje to funkcja O[USNAREQPPGEV. Pobiera ona nazwę hosta, nazwę u ytkownika i hasło. Zwykle tworzę w moich bazach MySQL u ytkownika o nazwie JVVRF bez hasła. Ograniczam równie tego u ytkownika tylko do połączeń z lokalnego serwera. Jego nazwa jest taka sama, jak nazwa u ytkownika UNIX, który wykonuje skrypty, czyli serwera sieciowego. Je eli wynaj- mujemy miejsce na serwerze, mo emy mieć przyporządkowane inne nazwy u ytkownika i bazy danych, co wymaga zmiany odpowiednich argumentów w przykładzie. Rysunek 17.1. Tworzenie tabeli HTML z wynikami zapytania
  • 11. 544 Część III n Algorytmy Listing 17.3. Tworzenie tabeli HTML z wynikami zapytania ! RQ æEGPKG UGTYGTGO K URTCYFGPKG E[ UKú RQYKQF Q KH FD.KPM O[USNAREQPPGEV NQECNJQUV JVVRF ] RTKPV 0KG OQ PC RQ æE[è UKú DCæ $4 P RTKPV CMQ EGPKG UMT[RVW $4 P GZKV _ Y[DÎT DC[ FCP[EJ K URTCYFGPKG TGWNVCVÎY QRGTCELK KH O[USNAUGNGEVAFD VGUV FD.KPM ] RTKPV 0KG OQ PC Y[DTCè DC[ VGUV $4 P RTKPV CMQ EGPKG UMT[RVW $4 P GZKV _ RQDTCPKG EC GL CYCTVQ EK VCDGNK 3WGT[ 5'.'%6 0CYC %GPC 3WGT[ (41/ -CVCNQI KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM ] RTKPV 0KG OQ PC Y[MQPCè CR[VCPKC $4 P RTKPV MQOWPKMCV /[53. O[USNAGTTQT $4 P RTKPV CR[VCPKG 3WGT[$4 P GZKV _ RQEæVGM VCDGNK RTKPV 6#$.' $14'4 P WVYQTGPKG YKGTUC PCI ÎYMÎY RTKPV 64 P RTKPV 6 $)%1.14 %%%%%% $ #TV[MW $ 6 P RTKPV 6 $)%1.14 %%%%%% $ %GPC$ 6 P RTKPV 64 P RQDTCPKG MC FGIQ YKGTU[ YJKNG FD4QY O[USNAHGVEJAQDLGEV FD4GUWNV ] RTKPV 64 P RTKPV 6 FD4QY 0CYC6 P RTKPV 6 #.+)0 TKIJV FD4QY %GPC6 P RTKPV 64 P _ MQPKGE VCDGNK RTKPV 6#$.' P ! Je eli połączenie się powiodło, zwracany jest identyfikator łącza z MySQL. Jak widać, w tym samym wierszu następuje nawiązanie połączenia i testowanie, czy operacja się powiodła.
  • 12. Rozdział 17. n Integracja z bazami danych 545 Identyfikatory łączy są zawsze większe od zera, a zero zwracane jest wtedy, gdy nie mo na nawiązać połączenia. Dlatego te testowanie wystąpienia wartości (#.5' umo liwia wykrycie nieudanego połączenia. W takim przypadku następuje po prostu opuszczenie skryptu. Funkcja, za pomocą której łączymy się z bazą, to O[USNAREQPPGEV. Przeglądając opisy funkcji MySQL w rozdziale 13., „Funkcje współpracujące z bazami danych”, mo na znaleźć równie inną funkcję: O[USNAEQPPGEV. Funkcje te działają identycznie w ramach skryptu, ale O[USNA REQPPGEV nawiązuje trwałe połączenie z serwerem. Większość funkcji współpracujących z bazami danych udostępnia mo liwość tworzenia trwałych połączeń — czyli takich, które nie zamykają się z chwilą zakończenia skryptu. Je eli ten sam proces sieciowy uruchomi później inny skrypt, który łączy się z tym samym serwerem bazy danych, wykorzystane będzie istniejące ju połączenie. Dzięki temu mo na oszczędzić trochę czasu. W praktyce oszczędności te nie są du e i wynikają ze sposobu, w jaki serwer Apache 1.3x u ywa procesów potomnych, zamiast wątków. Procesy te obsługują pewną liczbę wywołań, po czym są zastępowane przez nowe procesy. Po zakończeniu procesu zakoń- czone zostaje równie trwałe połączenie. Rzeczywisty zysk czasu, wynikający ze stosowania trwałych połączeń, pojawia się dopiero przy du ych obcią eniach — w takich chwilach mogą one okazać się bardzo pomocne. Dlatego te domyślnie stosuję O[USNAREQPPGEV. W chwili pisania tej ksią ki zbli a się moment pojawienia się Apache 2.0. Zapowiadane jest tam stosowanie wielowątkowego podejścia, co pozwoli zapewne w pełni wykorzystać zalety trwałych połączeń. Następnym krokiem jest wybór bazy danych. Tutaj została wybrana baza UVQTG. Po poinformo- waniu PHP, z której bazy nale y korzystać, otrzymamy wszystkie wiersze z tabeli MCVCNQI. Realizuje to funkcja O[USNASWGT[. Wykonuje ona zapytanie na określonym łączu i zwraca identyfikator wyniku. Identyfikator ten zostanie u yty do pobrania wyników zapytania. Zanim rozpoczniemy pobieranie danych ze zbioru wyników, nale y rozpocząć budowanie tabeli HTML. Jak mo na się domyślić, w tym celu u yty został znacznik otwierający tabelę. Stworzony został wiersz nagłówków, z szarym tłem, a reszta właściwości tablicy pozostała domyślna. Po wyświetleniu wiersza nagłówków mo na pobrać ka dy z wierszy ze zbioru wyników. Najszybciej działającą funkcją jest O[USNAHGVEJAQDLGEV. Ka da z kolumn wyniku staje się właściwością zwróconego obiektu. Nazwy kolumn stają się nazwami właściwości. Mo na równie zastosować funkcje O[USNAHGVEJATQY lub O[USNAHGVEJACTTC[, które są równie efektywne. W większości przypadków stosowanie obiektów jest dla mnie bardziej czytelne. Nale y unikać stosowania O[USNATGUWNV, poniewa funkcja ta wykonuje czasochłonną pro- cedurę przeszukiwania tablicy dwuwymiarowej. Gdy nie ma ju więcej wierszy do pobrania, funkcja zwraca (#.5'. Aby wykorzystać to zacho- wanie, pobieranie pojedynczego wiersza jest realizowane w pętli YJKNG. Wiersz w tabeli HTML jest tworzony poprzez wyświetlenie właściwości obiektu w odpowiednich jej polach. Po wy- świetleniu wszystkich wierszy tabela jest zamykana. Nie trzeba w tym miejscu zamykać połą- czenia z bazą danych, poniewa PHP robi to automatycznie w chwili zakończenia skryptu. Opisany przykład jest niezwykle prosty, ale dotyka większości istotnych kwestii dotyczących współpracy z bazami danych. Poniewa ka dy z wierszy jest wyświetlany w pętli, wszystkie
  • 13. 546 Część III n Algorytmy wyglądają tak samo. Je eli dane ulegną zmianie, nie trzeba wprowadzać zmian w kodzie, który przekształca je w HTML. Mo na dowolnie zmieniać zawartość bazy danych. Dobrym przykładem zastosowania tej techniki jest losowy generator nazw marek handlowych: http://www.leonatkinson.com/random/, który tworzy losowe nazwy z tabeli wyrazów prze- chowywanej w bazie MySQL, do której ka dy mo e dodawać nowe słowa. Ka de odświe- enie strony generuje kolejne dziesięć nazw. Śledzenie odwiedzających za pomocą identyfikatorów sesji Witryny sieciowe powoli przekształcają się w aplikacje sieciowe. Pojawia się tu problem zachowywania stanu. Podczas przechodzenia ze strony na stronę aplikacja musi pamiętać, kim jest u ytkownik. Sieć jest anonimowa: przeglądarka łączy się z serwerem, pobiera parę plików i zamyka połączenie. Pięć minut później, gdy ponownie połączymy się ze stroną, proces się powtarza. Mimo e informacje o logowaniu są przechowywane, serwer nas nie pamięta. Wszelkie dane, jakie podaliśmy o sobie trzy strony wcześniej, nawet je eli zostały zapisane, nie będą z nami kojarzone. Wyobraźmy sobie kreator zamówień pizzy: pierwszy ekran pyta się, ile pizz chcemy zamówić; następnie przechodzimy do ekranów odpowiadających ka dej z zamawianych pizz i wybie- ramy jej zawartość i rodzaj ciasta; na koniec kolejna strona pyta o nasze nazwisko i telefon, aby przesłać nasze zamówienie do najbli szej pizzerii realizującej dowóz. Jednym ze sposobów rozwiązania tego problemu jest stopniowe przekazywanie dotychczas gromadzonych infor- macji z ka dym następnym przesłaniem danych z formularza u ytkownika. W miarę przecho- dzenia ze strony na stronę liczba danych będzie rosła. Przekazujemy serwerowi wielokrotnie częściowe dane o zamówieniu — metoda ta działa, ale wią e się z przesyłaniem wielu nie- potrzebnych informacji. Stosując bazę danych i identyfikator sesji, mo na gromadzić informacje w miarę ich przeka- zywania. Identyfikator staje się kluczem do informacji. Z chwilą gdy skrypt pobiera identy- fikator, przypomina sobie, co działo się wcześniej. Inną kwestią jest sposób pobrania identyfikatora. Istnieją tu dwie mo liwości. Pierwszą jest przekazywanie identyfikatora jako zmiennej w ka dym łączu i w ka dym formularzu. W przy- padku formularza mo na to łatwo zrealizować za pomocą zmiennej ukrytej. W przypadku łącza nale y wstawić znak zapytania i definicję zmiennej. Je eli zało ymy, e identyfikator sesji jest przechowywany w zmiennej UGUUKQP, jego przesłanie na następną stronę mogłoby mieć następującą formę: RTKPV # *4'( RCIGRJR!UGUUKQP UGUUKQP PGZV# Metoda ta działa z wszystkim przeglądarkami, równie z Lynx. Drugim sposobem jest u ycie cookies. Podobnie jak zmienne formularzy GET i POST, cookies są zamieniane przez PHP na zmienne. Mo na więc utworzyć cookie o nazwie UGUUKQP.
  • 14. Rozdział 17. n Integracja z bazami danych 547 Ró nica polegać będzie na tym, e cookies muszą być przesyłane w nagłówkach i nale y wysłać je, zanim przeglądarka otrzyma jakąkolwiek treść HTML. Warto w tym miejscu zaj- rzeć do opisu funkcji UGVEQQMKG w rozdziale 8., „Funkcje wejścia-wyjścia”. Bardziej zło ona strategia polega na próbie zastosowania cookies i w przypadku niepowodzenia oparciu się na zmiennych GET. Obydwie metody są szeroko stosowane w Internecie. Wystarczy wejść w jakąkolwiek witrynę sklepu internetowego. Na potrzeby przykładu opisana tu zostanie strategia polegająca na zastosowaniu zmiennych GET. Pierwszym krokiem jest stworzenie tabeli przechowującej identyfikatory sesji. Listing 17.4 przedstawia kod SQL, tworzący prostą tabelę UGULC w bazie danych MySQL. Listing 17.4. Tworzenie tabeli przechowującej sesje %4'#6' 6#$.' UGULC + 8#4%*#4 016 07.. 1UVCVPKC1RGTCELC #6'6+/' 24+/#4; -'; + Kluczami w tabeli są 8-znakowe łańcuchy. Po ka dym przejściu u ytkownika na inną stronę odświe ana jest zawartość kolumny 1UVCVPKC1RGTCELC. W ten sposób mo emy pozbyć się wszelkich sesji, które wyglądają na nieu ywane. Ka da wizyta na stronie spowoduje usuwanie sesji bezczynnych przez 30 minut. Następnym krokiem jest sprawdzanie, czy u ytkownik posiada identyfikator sesji. Je eli nie posiada, zostaje on utworzony. Je eli posiada, nale y sprawdzić, czy jest on prawidłowy. Po pierwszym załadowaniu skryptu z listingu 17.5 tworzy on identyfikator sesji. Ka de kliknięcie przycisku Odświe w przeglądarce spowoduje sprawdzenie sesji przez skrypt. Je eli identyfikator sesji nie znajduje się w tabeli UGULC, wówczas zostanie odrzucony i utworzony będzie nowy. Mo na spróbować przesłać nieprawidłowy identyfikator, usuwając jakiś znak w pasku adresu przeglądarki. Rysunek 17.2. Sprawdzanie identyfikatora sesji Listing 17.5. Sprawdzanie identyfikatora sesji !
  • 15.
  • 16.
  • 19. 548 Część III n Algorytmy ] 7UVCPQYKGPKG CMTGUW FQRWUECNP[EJ PCMÎY 2QQN #$%'()*+,-./0123456789:; 2QQN CDEFGHIJKLMNOPQRSTUVWXYZ[ NCUV%JCT UVTNGP 2QQN HQT K K NGPIVJ K ] UKF 2QQN=OVATCPF NCUV%JCT? _ TGVWTP UKF _ +PKELCNKCELC IGPGTCVQTC NKED NQUQY[EJ OVAUTCPF VKOG RQ æEGPKG UGTYGTGO K MQPVTQNC RQYQFGPKC QRGTCELK KH FD.KPM O[USNAREQPPGEV NQECNJQUV HTGGVTCFG ] RTKPV 0KG OQ PC RQ æE[è UKú DCæ FCP[EJ $4 P RTKPV CMQ EGPKG UMT[RVW $4 P GZKV _ Y[DÎT DC[ FCP[EJ K MQPVTQNC RQYQFGPKC QRGTCELK KH O[USNAUGNGEVAFD VGUV FD.KPM ] RTKPV 0KG OQ PC Y[DTCè DC[ VGUV $4 P RTKPV CMQ EGPKG UMT[RVW $4 P GZKV _ WUWPKúEKG YU[UVMKEJ UVCT[EJ UGULK 3WGT[ '.'6' (41/ UGULC 3WGT[ 9*'4' 1UVCVPKC1RGTCELC 3WGT[ FCVG ;OF *KU VKOG 3WGT[ KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM ] PKG OQ PC Y[MQPCè CR[VCPKC RTKPV 0KG OQ PC WUWPæè UVCT[EJ UGULK $4 P RTKPV -QOWPKMCV /[53. O[USNAGTTQT $4 P GZKV _ URTCYFGPKG UGULK KH KUUGV UGUUKQP ] LG GNK OCO[ UGULú PCUVúRWLG LGL URTCYFGPKG 3WGT[ 5'.'%6
  • 20. 3WGT[ (41/ UGULC 3WGT[ 9*'4' + CFFUNCUJGU UGUUKQP KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM
  • 21. Rozdział 17. n Integracja z bazami danych 549 ] PKG OQ PC Y[MQPCè CR[VCPKC RTKPV PKG OQ PC Y[MQPCè CR[VCPKC FQ VCDGNK UGULC $4 P RTKPV -QOWPKMCV /[53. O[USNAGTTQT $4 P GZKV _ LG GNK YTÎEQP[ QUVC LCMK YKGTU WFC Q UKú QFPCNG è UGULú KH O[USNAPWOTQYU FD4GUWNV ] UGULC KUVPKGLG QF YKG GPKG ECUW QUVCVPKGL QRGTCELK 3WGT[ 72#6' UGULC 3WGT[ 5'6 1UVCVPKC1RGTCELC PQY 3WGT[ 9*'4' + UGUUKQP KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM ] PKG OQ PC Y[MQPCè CR[VCPKC RTKPV 0KG OQ PC QF YKG [è VCDGNK UGULC $4 P RTKPV MQOWPKMCV /[53. O[USNAGTTQT $4 P GZKV _ _ GNUG ] [ KFGPV[HKMCVQT RTKPV 0KGPCP[ KFGPV[HKMCVQT UGULK UGUUKQP $4 P UGUUKQP _ _ LG GNK PKG D[ Q UGULK PCNG [ Læ WVYQT[è KH UGUUKQP ] PKG D[ Q UGULK VYQTQPC LGUV PQYC UGUUKQP 5GUUKQP+ WOKGUEGPKG UGULK Y DCKG FCP[EJ 3WGT[ +05'46 +061 UGULC 3WGT[ 8#.7'5 UGUUKQP PQY KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM ] PKG OQ PC Y[MQPCè CR[VCPKC RTKPV 0KG OQ PC YUVCYKè GNGOGPVW FQ VCDGNK UGULC $4 P RTKPV -QOWPKMCV /[53. O[USNAGTTQT $4 P GZKV _ _ RTKPV 6YÎL KFGPV[HKMCVQT UGULK VQ UGUUKQP$4 P RTKPV # *4'( 2*2A5'.(!UGUUKQP UGUUKQP RTKPV 1F YKG UVTQPú RTKPV # $4 P !
  • 22. 550 Część III n Algorytmy Kolejnym logicznym krokiem jest dodanie kolejnej tabeli, przechowującej informacje o osobie przeglądającej witrynę. Jedna z kolumn powinna przechowywać identyfikator sesji z tabeli UGULC. Dopisanie tego kodu mo e być dobrym ćwiczeniem. Przechowywanie danych w bazie Informacja przechowywana w bazie danych nie ogranicza się do krótkich łańcuchów, jak 32-znakowa nazwa towaru z listingu 17.3. Mo na te tworzyć du e, 64-kilobajtowe obiekty, które pomieszczą nawet kompletną stronę internetową. Zaletą jest fakt, e strony zawsze istnieją w bardzo uporządkowanym otoczeniu. Mo na je określić numerem, który wystarcza do ustale- nia zale ności między stronami. Minusem jest niemo ność załadowania strony istniejącej w bazie danych do swojego ulubionego edytora. Nale y tu rozwa yć zyski i straty — dla większości stron nie ma potrzeby przechowywania ka dego ich elementu w bazie danych. Przykładem sytuacji, kiedy umieszczenie zawartości strony w bazie danych jest zasadne, jest forum internetowe. System taki przechowuje wiadomości, które, oprócz tego, e są stronami, posiadają charakterystyki, takie jak: tytuł, data utworzenia i autor. Taka struktura mo e być w prosty sposób odwzorowana w tabeli bazy danych. Co więcej, poniewa ka dej wiado- mości mo na nadać jednoznaczny identyfikator, mo na organizować wiadomości w formie drzewa zale ności. U ytkownik zostawia wiadomość, która rozpocznie wątek w dyskusji i spo- woduje pojawienie się nowych wiadomości do niego nawiązujących. Wiadomości mo na wyświetlać w hierarchii wątków, co ułatwia ich przeglądanie. Jak w ka dym systemie opartym na bazie danych, pierwszy krok polega na stworzeniu tabeli. W listingu 17.6 utworzona zostaje tabela do przechowywania wiadomości. Ka da wiadomość ma tytuł, nazwę nadawcy, czas wysłania, wiadomość nadrzędną i treść. Identyfikator wia- domości nadrzędnej mo e wynosić zero, co oznacza, e wiadomość inicjuje nowy wątek. Treścią wiadomości nie musi być zwykły tekst, mo e nią być równie kod HTML. Tym sposo- bem u ytkownicy mają mo liwość tworzenia w bazie stron za pomocą własnych przeglądarek. Listing 17.6. Tworzenie tabeli przechowującej wiadomości %4'#6' 6#$.' 9KCFQOQUE + +06 016 07.. #761A+0%4'/'06 6GOCV 8#4%*#4 0CFCYEC 8#4%*#4 5VYQTQPQ #6'6+/' 2TQFGM +06 6TGUE $.1$ 24+/#4; -'; + Skrypt z listingu 17.7 ma dwa tryby pracy: listowanie tytułów wiadomości i przeglądanie pojedynczej wiadomości. Je eli zmienna OGUUCIG+ jest pusta, wówczas ukazana zostaje lista wszystkich wiadomości w systemie, zorganizowanych według wątków. Realizuje to funkcja UJQY/GUUCIGU. W tym miejscu warto powrócić do fragmentu rozdziału 4., „Funkcje”, gdzie opisana jest rekurencja. Funkcja UJQY/GUUCIG korzysta z rekurencji przy przeglądaniu ka dej
  • 23. Rozdział 17. n Integracja z bazami danych 551 z gałęzi drzewa wiadomości. Na początku pobiera listę wszystkich wiadomości, które nie mają wiadomości nadrzędnych. Są to początki wątków. Po ukazaniu wszystkich wiadomo- ści inicjujących wątki UJQY/GUUCIG jest wywoływana dla danego wątku. Proces powtarza się do momentu odnalezienia wiadomości, która nie posiada wiadomości potomnych. Do wyświetlenia tytułów wiadomości wykorzystano znaczniki 7.. Wcięcia pomagają odwzo- rować na ekranie hierarchię wiadomości. Rysunek 17.3. Lista wiadomości forum Listing 17.7. Proste forum ! RTKPV * (QTWO .GQPC* P RQ æEGPKG UGTYGTGO K URTCYFGPKG E[ UKú RQYKQF Q KH FD.KPM O[USNAREQPPGEV NQECNJQUV JVVRF ] RTKPV 0KG OQ PC RQ æE[è UKú DCæ FCP[EJ $4 P RTKPV CMQ EGPKG UMT[RVW $4 P GZKV _ Y[DÎT DC[ FCP[EJ K URTCYFCPKG RQYQFGPKC QRGTCELK KH O[USNAUGNGEVAFD VGUV FD.KPM ] RTKPV 0KG OQ PC Y[DTCè DC[ VGUV $4 P RTKPV #DQTVKPI $4 P GZKV _
  • 24.
  • 25.
  • 26. TGMWTGPE[LPC HWPMELC Y[ YKGVNCLæEC
  • 27.
  • 28. YU[UVMKG YKCFQOQ EK FCPGIQ CMTGUW
  • 29. 552 Część III n Algorytmy Rysunek 17.4. Wiadomość z forum HWPEVKQP UJQY/GUUCIGU RCTGPV+ ] INQDCN FD.KPM FCVG6Q7UG CVG 7 RTKPV 7. P 3WGT[ 5'.'%6 + 6GOCV 5VYQTQPQ 3WGT[ (41/ 9KCFQOQUE 3WGT[ 9*'4' 2CTGPV RCTGPV+ 3WGT[ 14'4 $; 5VYQTQPQ KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM ] PKG OQ PC Y[MQPCè CR[VCPKC RTKPV 0KG OQ PC Y[MQPCè CR[VCPKC FQ VCDGNK 9KCFQOQ è $4 P RTKPV -QOWPKMCV /[53. O[USNAGTTQT $4 P GZKV _ YJKNG TQY O[USNAHGVEJAQDLGEV FD4GUWNV ] WMCCPKG VGOCVW YKCFQOQ EK Y HQTOKG QFPQ PKMC FQ LGL VTG EK RTKPV .+ TQY 5VYQTQPQ # *4'( RTKPV 2*2A5'.(!OGUUCIG+ TQY + RTKPV TQY 6GOCV# $4 P
  • 30. Rozdział 17. n Integracja z bazami danych 553 WMCCPKG YKCFQOQ EK RQVQOP[EJ UJQY/GUUCIGU TQY + _ RTKPV 7. P _
  • 31.
  • 32.
  • 33. Y[ YKGVNGPKG HQTOWNCTC FQ FQFCYCPKC YKCFQOQ EK
  • 34.
  • 36. HWPEVKQP RQUV(QTO RCTGPV+ WUG6KVNG ] RTKPV (14/ #%6+10 2*2A5'.( /'6*1 RQUV P RTKPV +0276 6;2' JKFFGP 0#/' KPRWV2CTGPV RTKPV 8#.7' RCTGPV+ P RTKPV +0276 6;2' JKFFGP 0#/' #%6+10 RTKPV 8#.7' 2156 P RTKPV 6#$.' $14'4 %'..52#%+0) RTKPV %'..2#+0) 9+6* P RTKPV 64 P RTKPV 6 9+6* $ 6GOCV$ 6 P RTKPV 6 9+6* RTKPV +0276 6;2' VGZV 0#/' KPRWV6KVNG RTKPV 5+' /#:.'0)6* 8#.7' WUG6KVNG RTKPV 6 P RTKPV 64 P RTKPV 64 P RTKPV 6 9+6* $ 0CFCYEC$ 6 P RTKPV 6 9+6* RTKPV +0276 6;2' VGZV 0#/' KPRWV2QUVGT RTKPV 5+' /#:.'0)6* RTKPV 6 P RTKPV 64 P RTKPV 64 P RTKPV 6 %1.52#0 9+6* RTKPV 6':6#4'# 0#/' KPRWV$QF[ RTKPV %1.5 4195 6':6#4'# RTKPV 6 P RTKPV 64 P RTKPV 64 P
  • 37. 554 Część III n Algorytmy RTKPV 6 %1.52#0 9+6* #.+)0 OKFFNG RTKPV +0276 6;2' UWDOKV 8#.7' 9[ NKL RTKPV 6 P RTKPV 64 P RTKPV 6#$.' P RTKPV (14/ P _
  • 38.
  • 39.
  • 41. KH #%6+10 ] KH #%6+10 2156 ] 3WGT[ +05'46 +061 9KCFQOQUE 3WGT[ 8#.7'5 3WGT[ CFFUNCUJGU KPRWV6KVNG 3WGT[ CFFUNCUJGU KPRWV2QUVGT 3WGT[ PQY KPRWV2CTGPV 3WGT[ CFFUNCUJGU KPRWV$QF[ KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM ] PKG OQ PC Y[MQPCè CR[VCPKC RTKPV 0KG OQ PC YUVCYKè GNGOGPVW FQ VCDGNK 9KCFQOQ è $4 P RTKPV -QOWPKMCV /[53. O[USNAGTTQT $4 P GZKV _ _ _
  • 42.
  • 43.
  • 44. 9[ YKGVNGPKG YKCFQOQ EK NWD NKUV[ YKCFQOQ EK
  • 45. KH OGUUCIG+ ] 3WGT[ 5'.'%6 + 6GOCV 0CFCYEC 5VYQTQPQ 2TQFGM 6TGUE 3WGT[ (41/ 9KCFQOQUE 3WGT[ 9*'4' + OGUUCIG+ KH FD4GUWNV O[USNASWGT[ 3WGT[ FD.KPM ] PKG OQ PC Y[MQPCè CR[VCPKC RTKPV 0KG OQ PC Y[MQPCè CR[VCPKC FQ VCDGNK 9KCFQOQ è $4 P RTKPV -QOWPKMCV /[53. O[USNAGTTQT $4 P GZKV _ KH TQY O[USNAHGVEJAQDLGEV FD4GUWNV ] RTKPV 6#$.' $14'4 %'..52#%+0) RTKPV %'..2#+0) 9+6* P
  • 46. Rozdział 17. n Integracja z bazami danych 555 RTKPV 64 RTKPV 6 9+6* $ 6GOCV$ 6 RTKPV 6 9+6* TQY 6KVNG6 RTKPV 64 P RTKPV 64 RTKPV 6 9+6* $ 0CFCYEC$ 6 RTKPV 6 9+6* TQY 2QUVGT6 RTKPV 64 P RTKPV 64 RTKPV 6 9+6* $ 9[UNCPQ$ 6 RTKPV 6 9+6* TQY 5VYQTQPQ6 RTKPV 64 P RTKPV 64 RTKPV 6 %1.52#0 9+6* RTKPV TQY 6TGUE RTKPV 6 RTKPV 64 P RTKPV 6#$.' P RQUV(QTO TQY + 4' TQY 6GOCV _ RTKPV # *4'( 2*2A5'.( .KUVC YKCFQOQ EK# $4 P _ GNUG ] RTKPV * .KUVC YKCFQOQ EK* P RQDTCPKG EC GL NKUV[ UJQY/GUUCIGU RQUV(QTO _ ! Z punktu widzenia efektywności, zastosowanie rekurencji nie jest optymalne. Ka dy wątek powoduje kolejne wywołanie UJQY/GUUCIG, z czym wią e się następne zapytanie do bazy da- nych. Istnieje sposób na jednokrotne przesłanie zapytania i przeglądanie drzewa przechowy- wanego w pamięci — realizację tego pomysłu pozostawiam jako ćwiczenie dla Czytelnika. Gdy u ytkownik kliknie tytuł wiadomości, strona zostaje ponownie załadowana z ustawio- nym OGUUCIG+. Powoduje to, e skrypt przełącza się na tryb wyświetlania pojedynczych wiadomości. Pola wiadomości zostają wyświetlone w tabeli. Je eli wiadomość zawiera jaki- kolwiek kod HTML, zostanie on zinterpretowany przez przeglądarkę, poniewa nie następuje tu adna filtracja znaczników. Ograniczenie to znajduje zastosowanie w kodzie dodającym nowe wiadomości.
  • 47. 556 Część III n Algorytmy W ka dym z dwóch trybów pracy ukazywany jest formularz do dodawania wiadomości. Je eli wiadomość została dodana w chwili wyświetlania listy, zostanie uznana za początek nowego wątku. Je eli zaś wiadomość dodana została podczas przeglądania innej wiadomości, uznana zostanie za odpowiedź na tę wiadomość i nowa wiadomość będzie potomkiem przeglądanej wiadomości. Przedstawione tu forum jest proste, ale zawiera podstawowe elementy funkcjonalne takiego systemu. Bardziej wyrafinowanym rozwiązaniem byłoby umo liwienie dodawania wiadomości tylko przez uwierzytelnionych u ytkowników lub nieudostępnianie wiadomości na forum do momentu ich akceptacji przez moderatora. Struktury tej mo na u yć do budowy dowol- nej aplikacji, która zarządza danymi przesłanymi przez u ytkownika, chocia by księgi gości. Je eli szukamy bardziej wyrafinowanej implementacji forum internetowego, mo na zajrzeć do witryny projektu Phorum Briana Moona pod adresem http://www.phorum.org. Warstwy abstrakcyjne baz danych Wyobraźmy sobie, e podczas tworzenia aplikacji sieciowej, wykorzystującej MySQL, zostali- śmy poproszeni o zmianę bazy danych na Oracle. Ka da z funkcji PHP jest inna dla tych dwóch baz i musielibyśmy zmienić ka dą z nich. Dodatkowo Oracle i MySQL u ywają nieco odmiennego SQL, co wymagałoby zapewne zmiany większości zapytań. Rozwiąza- niem tego problemu jest zastosowanie warstwy abstrakcyjnej. Pozwala to na oddzielenie sposobu działania aplikacji od kodu komunikującego się z bazą danych. Pojedyncza funk- cja wywołuje tu odpowiednią funkcję w zale ności od typu bazy, z jaką się komunikujemy. Jedną z najbardziej popularnych warstw abstrakcyjnych baz danych stanowi fragment biblioteki PHP Base Library http://phplib.netuse.de. Biblioteka ta zawiera równie kod do zarządzania sesjami. Inną warstwą abstrakcyjną jest Metabase, dostępna pod adresem: http://phpclasses.upperdesign.com. Niezale nie od warstw abstrakcyjnych, niezgodności między bazami powodują stałe powsta- wanie nowych rozwiązań. MySQL u ywa specjalnego kwalifikatora do opisu kolumn, zwanego #761A+0%4'/'06. Powoduje on automatyczne wypełnianie kolumn liczbami całkowitymi w kolejności rosnącej. W Oracle mo na to w przybli eniu z realizować za pomocą sekwencji (SEQUENCE) i wyzwalacza (TRIGGER). Wszystkie te ró nice trudno systematycznie godzić. W 1999 r. Scott Ambler zaproponował rozwiązanie w swojej publikacji The Design of a Robust Persistence Layer for Relational Databases, http://www.ambysoft.com/persistenceLa- yer.html. Zawarł tam dogłębną analizę problemu, wraz ze szczegółowymi rozwiązaniami, jednak nie oddaję im sprawiedliwości w kontekście tego rozdziału. Warstwy abstrakcyjne udostępniają pewność kosztem pewnej utraty efektywności. Część roz- wiązań poprawiających efektywność w danej bazie danych musi zostać pominięta. Warstwa abstrakcyjna udostępnia zwykle podstawowy zestaw funkcji bazy danych. Zysk polega tu na uniezale nieniu się od jednego typu bazy.