SlideShare a Scribd company logo
1 of 17
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TREŒCI
                                         PHP5.
                                         Praktyczny kurs
           KATALOG KSI¥¯EK               Autor: Marcin Lis
                                         ISBN: 83-246-0307-7
                      KATALOG ONLINE     Format: B5, stron: 432

       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Znajomoœæ jêzyka PHP wykorzystywanego do tworzenia dynamicznych stron WWW
                                         to dziœ jedna z podstawowych umiejêtnoœci wymaganych od webmastera. Era
                                         statycznych stron tworzonych za pomoc¹ jêzyka HTML przeminê³a ju¿ dawno,
         CENNIK I INFORMACJE             a dynamiczne generowanie treœci sta³o siê obecnie standardem. Jêzyk PHP i baza
                                         danych MySQL stanowi¹ platformê o wielkich mo¿liwoœciach, stosowan¹ do tworzenia
                   ZAMÓW INFORMACJE      zarówno wielkich portali i witryn e-commerce, jak i prostych stron prywatnych.
                     O NOWOŒCIACH        Ksi¹¿ka „PHP5. Praktyczny kurs” jest wprowadzeniem w tajniki nowoczesnego
                                         tworzenia stron WWW. Przedstawia proces instalacji jêzyka PHP wraz z serwerami
                       ZAMÓW CENNIK      WWW, podstawowe konstrukcje jêzyka i sposoby wykorzystania ich w procesie
                                         budowania witryny. Opisuje takie zagadnienia, jak wspó³praca z systemem plików,
                                         obs³uga sesji, mo¿liwoœci programowania obiektowego oraz wspó³praca z bazami
                 CZYTELNIA               danych. Dowiesz siê z niej tak¿e, jak za pomoc¹ PHP generowaæ i przetwarzaæ
                                         elementy graficzne oraz wykorzystywaæ protoko³y sieciowe.
          FRAGMENTY KSI¥¯EK ONLINE           • Instalacja i konfiguracja PHP w ró¿nych systemach operacyjnych
                                             • Zmienne, typy danych i operatory
                                             • Instrukcje steruj¹ce
                                             • Komunikacja skryptów z przegl¹dark¹
                                             • Obs³uga plików cookie i sesji
                                             • Operacje na plikach
                                             • Programowanie obiektowe w PHP
                                             • Wykorzystywanie danych zgromadzonych w bazie
                                                     Poznaj i wykorzystaj w swoich projektach mo¿liwoœci jêzyka PHP


Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
                Wstęp .............................................................................................. 7
Rozdział 1. Podstawy ......................................................................................... 9
                Lekcja 1. Czym jest PHP? ................................................................................................ 9
                   Język skryptowy ......................................................................................................... 9
                   Krótka historia PHP ................................................................................................. 10
                   Jak to działa? ............................................................................................................ 10
                Lekcja 2. Instalacja i konfiguracja narzędzi ................................................................... 12
                   Linux ........................................................................................................................ 12
                   Windows .................................................................................................................. 21
                   Plik konfiguracyjny PHP .......................................................................................... 25
                   PHP w wierszu poleceń ............................................................................................ 26
Rozdział 2. Elementy języka ............................................................................. 27
                Lekcja 3. Pierwszy skrypt ............................................................................................... 27
                   Zaczynamy ............................................................................................................... 27
                   Znaczniki PHP ......................................................................................................... 30
                   Komentarze .............................................................................................................. 32
                   Wyświetlanie informacji .......................................................................................... 34
                   Instrukcja print ......................................................................................................... 36
                   Łączenie skryptów ................................................................................................... 36
                Lekcja 4. Zmienne, typy danych i operatory .................................................................. 41
                   Czym są zmienne? ................................................................................................... 41
                   Rodzaje zmiennych, czyli typy danych .................................................................... 42
                   Zmienne w kodzie skryptu ....................................................................................... 46
                   Wyświetlanie wartości zmiennych ........................................................................... 48
                   Operacje na zmiennych ............................................................................................ 52
                   Operatory ................................................................................................................. 52
                   Zmienne globalne (superglobalne) ........................................................................... 67
                   Konwersje typów ..................................................................................................... 69
                   Ćwiczenia do samodzielnego wykonania ................................................................. 73
                Lekcja 5. Instrukcje sterujące ......................................................................................... 73
                   Instrukcje warunkowe .............................................................................................. 73
                   Instrukcja wyboru .................................................................................................... 80
                   Operator warunkowy ................................................................................................ 82
                   Pętle ......................................................................................................................... 83
                   Składnia alternatywna .............................................................................................. 93
                   Ćwiczenia do samodzielnego wykonania ................................................................. 96
4                                                                                                          PHP5. Praktyczny kurs


               Lekcja 6. Funkcje ........................................................................................................... 97
                  Definiowanie funkcji ................................................................................................ 97
                  Argumenty funkcji ................................................................................................... 98
                  Zwracanie wartości przez funkcje ............................................................................ 99
                  Zasięg zmiennych .................................................................................................. 101
                  Sposoby przekazywania argumentów .................................................................... 104
                  Domyślne argumenty funkcji ................................................................................. 106
                  Ćwiczenia do samodzielnego wykonania ............................................................... 107
               Lekcja 7. Obsługa daty i czasu ..................................................................................... 107
                  Wyświetlanie daty i czasu ...................................................................................... 107
                  Tworzenie znacznika czasu .................................................................................... 115
                  Pozostałe funkcje ................................................................................................... 118
                  Ćwiczenia do samodzielnego wykonania ............................................................... 120
               Lekcja 8. Ciągi znaków ................................................................................................ 121
                  Rodzaje ciągów znaków ......................................................................................... 121
                  Formatowanie ciągów ............................................................................................ 123
                  Przetwarzanie ciągów znaków ............................................................................... 128
                  Porównania ............................................................................................................ 131
                  Przeszukiwanie ...................................................................................................... 131
                  Ćwiczenia do samodzielnego wykonania ............................................................... 133
               Lekcja 9. Tablice .......................................................................................................... 134
                  Proste tablice .......................................................................................................... 134
                  Tablice asocjacyjne ................................................................................................ 137
                  Operacje na tablicach ............................................................................................. 139
                  Ćwiczenia do samodzielnego wykonania ............................................................... 145
Rozdział 3. Współpraca z przeglądarką ............................................................ 147
               Lekcja 10. Odbieranie danych z przeglądarki .............................................................. 147
                  Formularze HTML ................................................................................................. 147
                  Wysyłanie metodą GET ......................................................................................... 148
                  Metoda POST ......................................................................................................... 152
                  Wysyłanie plików do serwera ................................................................................ 154
                  Ćwiczenia do samodzielnego wykonania ............................................................... 158
               Lekcja 11. Wysyłanie danych do przeglądarki ............................................................. 158
                  Sposoby wysyłania danych .................................................................................... 158
                  Wysyłanie zawartości plików ................................................................................. 159
                  Sposoby pobierania plików z serwisu .................................................................... 162
                  Ćwiczenia do samodzielnego wykonania ............................................................... 175
               Lekcja 12. Obsługa cookies .......................................................................................... 175
                  Krótko o cookies .................................................................................................... 175
                  Obsługa cookies w PHP ......................................................................................... 176
                  Wykorzystanie cookies .......................................................................................... 180
                  Ćwiczenia do samodzielnego wykonania ............................................................... 184
               Lekcja 13. Sesje ............................................................................................................ 184
                  Wstęp do sesji ........................................................................................................ 184
                  Identyfikator sesji ................................................................................................... 184
                  Rozpoczynanie sesji ............................................................................................... 185
                  Kończenie sesji ...................................................................................................... 185
                  Zmienne sesji ......................................................................................................... 186
                  Konfiguracja sesji .................................................................................................. 187
                  Implementacja sesji ................................................................................................ 189
                  Śledzenie zachowań użytkownika .......................................................................... 192
                  Kontrola dostępu z wykorzystaniem sesji .............................................................. 194
                  Ćwiczenia do samodzielnego wykonania ............................................................... 199
Spis treści                                                                                                                                 5


Rozdział 4. Współpraca z systemem plików ..................................................... 201
                Lekcja 14. Operacje na strukturze systemu plików ...................................................... 201
                   Odczyt zawartości katalogu ................................................................................... 201
                   Operacje na katalogach .......................................................................................... 206
                   Operacje na plikach ................................................................................................ 207
                   Miejsce na dysku .................................................................................................... 210
                   Rekurencyjne usuwanie zawartości katalogu ......................................................... 211
                   Nawigacja po katalogach ....................................................................................... 212
                   Ćwiczenia do samodzielnego wykonania ............................................................... 214
                Lekcja 15. Operacje na plikach .................................................................................... 215
                   Tworzenie i otwieranie plików ............................................................................... 215
                   Zamykanie plików .................................................................................................. 217
                   Odczyt danych ....................................................................................................... 217
                   Zapis danych .......................................................................................................... 224
                   Inne operacje .......................................................................................................... 228
                   Ćwiczenia do samodzielnego wykonania ............................................................... 231
                Lekcja 16. Praktyczne wykorzystanie plików .............................................................. 231
                   Tekstowy licznik odwiedzin ................................................................................... 232
                   Licznik wykorzystujący grafikę ............................................................................. 233
                   Kontrola dostępu .................................................................................................... 235
                   Lista odnośników ................................................................................................... 239
                   Lista odwiedzin ...................................................................................................... 240
                   Ćwiczenia do samodzielnego wykonania ............................................................... 243
Rozdział 5. Obiektowy PHP ............................................................................. 245
                Lekcja 17. Podstawy obiektowości .............................................................................. 245
                   Czym jest obiekt? ................................................................................................... 245
                   Definicja klasy ....................................................................................................... 246
                   Tworzenie obiektów ............................................................................................... 249
                   Konstruktory i destruktory ..................................................................................... 250
                   Obiektowa lista odwiedzin ..................................................................................... 254
                   Ćwiczenia do samodzielnego wykonania ............................................................... 257
                Lekcja 18. Więcej o programowaniu obiektowym ....................................................... 257
                   Dziedziczenie ......................................................................................................... 257
                   Przesłanianie składowych ...................................................................................... 260
                   Klasy i składowe finalne ........................................................................................ 262
                   Konstruktory i destruktory klas bazowych ............................................................. 263
                   Specyfikatory dostępu ............................................................................................ 265
                   Składowe statyczne ................................................................................................ 267
                   Ćwiczenia do samodzielnego wykonania ............................................................... 270
                Lekcja 19. Wyjątki ....................................................................................................... 270
                   Instrukcja throw ..................................................................................................... 271
                   Klasa Exception i pochodne ................................................................................... 271
                   Blok try...catch ....................................................................................................... 272
                   Przechwytywanie wielu wyjątków ......................................................................... 278
                   Własne wyjątki ....................................................................................................... 280
                   Ćwiczenia do samodzielnego wykonania ............................................................... 281
Rozdział 6. Grafika i obrazy ............................................................................ 283
                Lekcja 20. Obsługa grafiki ........................................................................................... 283
                   Biblioteka graficzna ............................................................................................... 283
                   Jak stworzyć galerię obrazów? ............................................................................... 284
                   Przetwarzanie grafiki ............................................................................................. 293
                   Ćwiczenia do samodzielnego wykonania ............................................................... 305
6                                                                                                           PHP5. Praktyczny kurs


Rozdział 7. Obsługa sieci ................................................................................ 307
                Lekcja 21. Połączenia, poczta i FTP ............................................................................. 307
                   Tablica $_SERVER ............................................................................................... 307
                   Adresy IP ............................................................................................................... 310
                   Jak rozpoznać przeglądarkę? .................................................................................. 313
                   Połączenie FTP ...................................................................................................... 315
                   Wysyłanie poczty ................................................................................................... 317
                   Ćwiczenia do samodzielnego wykonania ............................................................... 320
Rozdział 8. Współpraca z bazami danych ......................................................... 321
                Lekcja 22. Podstawy baz danych .................................................................................. 321
                   MySQL i SQLite .................................................................................................... 321
                   Tabele, klucze i relacje ........................................................................................... 322
                   Bazy danych a PHP ................................................................................................ 326
                   Instalacja systemu bazy danych ............................................................................. 327
                   Obsługa serwera MySQL ....................................................................................... 333
                Lekcja 23. Podstawy SQL ............................................................................................ 339
                   Czym jest SQL? ..................................................................................................... 339
                   Obsługa tabel ......................................................................................................... 340
                   Typy danych w kolumnach .................................................................................... 344
                   Zapytania ............................................................................................................... 349
                Lekcja 24. PHP i bazy danych ...................................................................................... 361
                   PHP i MySQL ........................................................................................................ 361
                   PHP i SQLite .......................................................................................................... 369
                   Ćwiczenia do samodzielnego wykonania ............................................................... 377
                Lekcja 25. Podejście obiektowe ................................................................................... 378
                   PEAR DB ............................................................................................................... 378
                   PHP i SQLite .......................................................................................................... 386
                Lekcja 26. Bazy danych w praktyce ............................................................................. 391
                   Licznik ................................................................................................................... 391
                   Logowanie .............................................................................................................. 394
                   Ankieta ................................................................................................................... 396
                   Lista odwiedzin ...................................................................................................... 400
                   Liczba osób na stronie ............................................................................................ 403
                   Ćwiczenia do samodzielnego wykonania ............................................................... 406
                Skorowidz ..................................................................................... 407
Rozdział 3.
Współpraca
z przeglądarką

Lekcja 10. Odbieranie danych
z przeglądarki
Formularze HTML
    Skrypty PHP bardzo często są wykorzystywane do odbierania i przetwarzania danych
    pochodzących z przeglądarki użytkownika. Najczęściej polega to na tym, że osoba prze-
    glądająca stronę WWW wprowadza różne informacje do formularza HTML, które na-
    stępnie, zazwyczaj po kliknięciu przycisku, są wysyłane do serwera, gdzie zajmuje się
    nimi kod PHP. Aby taka procedura mogła zostać wykonana, formularz musi zawierać
    parametry action oraz method, zatem jego ogólna postać będzie następująca:
      <form  name = "nazwa"
             target = "okno"
             action = "url"
             method = "metoda"
             enctype = "typ kodowania">
      <!--tu definicja obiektów składowych-->
      </form>

    Parametr method wskazuje metodę, która zostanie użyta do przesłania danych do ser-
    wera, może to być GET lub POST. Natomiast action określa adres skryptu, który będzie
    odbierał dane. Może on być adresem bezwzględnym, np. http://www.mojadomena.com/
    skrypt.php, lub względnym, np. /skrypty/skrypt.php. W pierwszym przypadku dane zo-
    staną dostarczone do skryptu skrypt.php znajdującego się w głównym katalogu serwera
    o adresie http://www.mojadomena.com, natomiast w drugim — do skryptu o nazwie
    skrypt.php znajdującego się w podkatalogu skrypty na serwerze ze stroną WWW zawie-
    rającą formularz.
148                                                  Rozdział 3. ♦ Współpraca z przeglądarką


        Elementami składowymi formularza mogą być:
             button     — klasyczny przycisk,
             checkbox   — pole wyboru,
             hidden     — element ukryty,
             password   — pole tekstowe do wpisywania haseł,
             radio      — pole wyboru,
             reset      — przycisk reset,
             select     — lista wyboru,
             submit     — przycisk submit,
             text       — pole tekstowe,
             textarea   — rozszerzone pole tekstowe.

        Każdy z tych elementów powinien mieć określony parametr name, dzięki któremu będzie
        możliwa jego identyfikacja w skrypcie PHP.


Wysyłanie metodą GET
        Metoda GET służy do przesyłania stosunkowo niewielkich ilości danych, np. krótkich for-
        mularzy tekstowych. Wynika to z faktu, że są one przesyłane w adresie URL, który bę-
        dzie miał wtedy schematyczną postać:
           http://adres.serwera/skrypt.php?parametr1=wartość1&parametr2=wartość2

        Jeśli weźmiemy pod uwagę, że adres URL ma zwykle ograniczoną długość (zależy to
        od przeglądarki oraz serwera), a także że może zawierać jedynie znaki alfanumeryczne,
        jasnym jest, dlaczego ta metoda jest wykorzystywana jedynie do wymiany prostych
        danych tekstowych.

        Aby zobaczyć, jak to działa w praktyce, napiszmy kod prostego formularza zawierają-
        cego jedno pole tekstowe, który będzie wysyłał dane do skryptu o nazwie skrypt.php
        umieszczonego w katalogu głównym naszego serwera WWW. Kod HTML zawierający
        taki formularz jest widoczny na listingu 3.1.

Listing 3.1. Kod przykładowego formularza HTML
           <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
           <html>
           <head>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
           <title>Przykładowa strona</title>
           </head>
           <body>
           <form method="GET"
                  action="http://127.0.0.1/skrypt.php">
             <input type="text" name="pole1">
Lekcja 10. Odbieranie danych z przeglądarki                                                   149


               <input type="submit">
             </form>
             </body>
             </html>


          Formularz (widoczny na rysunku 3.1) zawiera jedno pole tekstowe o nazwie pole1 oraz
          przycisk typu Submit, którego kliknięcie powoduje przesłanie danych do serwera. War-
          tość parametru method to get, a zatem dane zostaną przesłane do serwera za pomocą
          metody GET. Nazwę skryptu oraz adres serwera wskazuje parametr action, wywołany
          zostanie więc skrypt o nazwie skrypt.php znajdujący się na serwerze o lokalnym adre-
          sie 127.0.0.1 (prawidłowe byłoby również użycie adresu http://localhost/skrypt.php).
          Ponieważ zarówno kod HTML, jak i kod skryptu będą się znajdowały na tym samym
          serwerze w tym samym katalogu, można również pominąć w parametrze action dane
          dotyczące serwera. Tym samym mógłby mieć on postać:
             action="skrypt.php"

Rysunek 3.1.
Formularz generowany
przez kod z listingu 3.1




          Jeśli do pola tekstowego wprowadzimy przykładowy ciąg znaków, np. test, oraz kliknie-
          my przycisk Wyślij zapytanie (napis na przycisku może być różny w zależności od zasto-
          sowanej przeglądarki), to powstanie URL w postaci http://127.0.0.1/skrypt.php?pole1=test,
          tak jak na rysunku 3.2. Przetworzony zostanie zatem skrypt znajdujący się na serwe-
          rze lokalnym 127.0.0.1, w pliku skrypt.php i zostaną mu przekazane wartości znajdu-
          jące się za znakiem ? odnośnika. W skrypcie możemy te wartości odczytać i wyko-
          rzystać do własnych celów. Dowiedzmy się zatem, jak to zrobić.

Rysunek 3.2.
Odnośnik generowany
w metodzie GET




          Dostęp do danych z formularza jest możliwy na trzy sposoby. Sposobem najstarszym
          i obecnie niezalecanym jest wykorzystanie globalnej tablicy $HTTP_GET_VARS. Jako indeks
          tablicy należy podać nazwę pola formularza, z którego chcemy odczytać dane. Sche-
          matycznie taka konstrukcja będzie miała postać:
             $zmienna = $HTTP_GET_VARS['nazwa_pola'];

          Tego typu odwołanie należy stosować jedynie wtedy, gdy konieczna jest kompatybil-
          ność ze starszymi wersjami PHP (PHP3), zazwyczaj jednak nie ma takiej potrzeby. Aby
          skorzystać z tego typu odwołań w PHP5, należy w pliku konfiguracyjnym php.ini włączyć
          domyślnie wyłączoną opcję register_long_arrays (register_long_arrays = On).
150                                                        Rozdział 3. ♦ Współpraca z przeglądarką


           Drugim sposobem dostępu do danych z formularza jest wykorzystanie globalnej tablicy
           $_GET. Jako indeks tablicy należy zastosować, podobnie jak w poprzednim przypadku,
           nazwę pola, z którego dane chcemy odczytać. Jest to też zalecany sposób odczytu i bę-
           dziemy go stosować w dalszej części książki. Schematycznie konstrukcja taka ma postać:
              $zmienna = $_GET ['nazwa_pola'];

           Sposób trzeci to dostęp bezpośredni. Jeżeli w pliku konfiguracyjnym php.ini włączymy
           opcję register_globals1, dostęp do pól formularza będzie odbywał się tak samo jak
           do zwykłych zmiennych. Oznacza to, że jeśli w formularzu będzie występowało pole
           o nazwie pole1, to w skrypcie będzie można się odwołać do niego tak, jak do zmiennej
           $pole1. Ten sposób, choć wydaje się najwygodniejszy, może jednak prowadzić do po-
           wstawania błędów w skryptach, gdyż zmienne związane z formularzem nie odróżniają
           się od zmiennych lokalnych skryptu. Stosujmy ten sposób jedynie wtedy, gdy jest to
           naprawdę potrzebne i dokładnie wiemy, jakie mogą być konsekwencje.

           Na listingu 3.2 został przedstawiony skrypt odczytujący wartość pola tekstowego z for-
           mularza z listingu 3.1 z wykorzystaniem wszystkich trzech sposobów.

Listing 3.2. Różne sposoby odczytu danych z formularza
              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
              <html>
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
              <title>Przykładowa strona</title>
              </head>
              <body>
              <p> Dane wprowadzone do formularza: </p>
              <?php
              //sposób pierwszy
              $zmienna = $HTTP_GET_VARS['pole1'];
              echo("1. Wartość pola pole1 to $zmienna <br />");

              //sposób drugi
              $zmienna = $_GET['pole1'];
              echo("2. Wartość pola pole1 to $zmienna <br />");

              //sposób trzeci
              $zmienna = $pole1;
              echo("3. Wartość pola pole1 to $zmienna");
              ?>
              </body>
              </html>


           Przy przetwarzaniu formularzy bardzo przydaje się funkcja isSet, która pozwala stwier-
           dzić, czy dane pole formularza zostało ustawione, innymi słowy czy została przekazana
           do skryptu wartość odpowiadająca temu polu. Aby pokazać sposób wykorzystania tej
           funkcji, utwórzmy formularz składający się z trzech pól wyboru typu radio. Odpowiedni
           kod HTML został zaprezentowany na listingu 3.3, a jego wygląd widoczny jest na ry-
1
    Począwszy od PHP w wersji 4.2.0, a więc także we wszystkich wersjach PHP5, opcja ta jest domyślnie
    wyłączona.
Lekcja 10. Odbieranie danych z przeglądarki                                                151


        sunku 3.3. Każde z pól ma taką samą wartość parametru name, a zatem tworzą one
        jedną grupę. Dzięki temu na raz może być zaznaczone tylko jedno pole, są to więc
        opcje wykluczające. Każde pole ma jednak inną wartość parametru value, dzięki czemu
        w skrypcie będziemy je mogli łatwo zidentyfikować. Parametr action formularza wska-
        zuje, podobnie jak we wcześniejszych przykładach, na skrypt znajdujący się w pliku
        skrypt.php na serwerze lokalnym o adresie 127.0.0.1.

Listing 3.3. Formularz zawierający elementy typu radio
           <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
           <html>
           <head>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
           <title>Przykładowa strona</title>
           </head>
           <body>
           <P>Proszę zaznaczyć jedną z opcji.</P>
           <form method="get"
                  action="http://127.0.0.1/skrypt.php">
             <input type="radio" name="radio1" value="opcja1">
             Opcja1
             <br />
             <input type="radio" name="radio1" value="opcja2">
             Opcja2
             <br />
             <input type="radio" name="radio1" value="opcja3">
             Opcja3
             <br /><br />
             <input type="submit">
           </form>
           </body>
           </html>


Rysunek 3.3.
Wygląd formularza
generowanego
przez kod
z listingu 3.3




        Napiszmy więc teraz skrypt skrypt.php. Pozwoli nam on stwierdzić, czy została zazna-
        czona jakaś opcja i ewentualnie która. W wykonaniu tego zadania bardzo nam pomoże
        wspomniana przed chwilą funkcja isSet. Spójrzmy na kod widoczny na listingu 3.4 —
        isSet jest tu używana do stwierdzenia, czy w tablicy $_GET jest ustawiony klucz o nazwie
152                                                     Rozdział 3. ♦ Współpraca z przeglądarką


          radio1, a tym samym czy do skryptu została przekazana wartość pola radio o nazwie
          radio1. Jeśli tak, funkcja zwraca wartość true, jeśli nie — wartość false. Takie za-
          chowanie pozwala na użycie instrukcji warunkowej if do wyświetlenia właściwego
          komunikatu na ekranie.

Listing 3.4. Obsługa pól typu radio
             <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
             <html>
             <head>
             <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
             <title>Wynik działania skryptu</title>
             </head>
             <body>
             <p>
             <?php
             if(!isSet($_GET['radio1'])){
                echo("Proszę zaznaczyć jedną z opcji!");
             }
             else{
                echo("Zaznaczona opcja to {$_GET['radio1']}.");
             }
             ?>
             </p>
             </body>
             </html>




Metoda POST
          Metoda POST to drugi sposób przesyłania danych do serwera. Główne różnice dla użyt-
          kownika to możliwość przesłania dużo większej ilości danych (np. plików binarnych)
          oraz to, że nie można ich zobaczyć w polu adresu przeglądarki (co wydaje się całkiem
          logiczne). Maksymalna ilość danych, jakie mogą być przesłane za pomocą tej metody,
          jest ograniczona przez znajdującą się w pliku php.ini opcję konfiguracyjną post_max_
          size2. Domyślnie jest to 8 MB. Prosty formularz wykorzystujący przesyłanie danych
          metodą POST został przedstawiony na listingu 3.5. Jak widać, jedyną różnicą w stosunku
          do metody GET (formularz z listingu 3.1) jest zmiana wartości parametru method znacznika
          form. Również i w tym przypadku parametr action mógłby mieć postać:
             action="http://localhost/skrypt.php"

          lub po prostu:
             action="skrypt.php"

Listing 3.5. Kod formularza HTML wysyłającego dane metodą POST
             <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
             <html>
             <head>
             <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

2
    Na maksymalną ilość odbieranych danych mogą również mieć wpływ ustawienia serwera WWW.
Lekcja 10. Odbieranie danych z przeglądarki                                                153


           <title>Przykładowa strona</title>
           </head>
           <body>
           <form method="post"
                  action="http://127.0.0.1/skrypt.php">
             <input type="text" name="pole1">
             <input type="submit">
           </form>
           </body>
           </html>


        W skrypcie PHP wartości przesłane z formularza można odczytać, podobnie jak miało
        to miejsce w przypadku metody GET, na trzy sposoby. Sposobem pierwszym (obecnie
        niezalecanym; niezbędne jest włączenie opcji konfiguracyjnej register_long_arrays)
        jest wykorzystanie globalnej tablicy $HTTP_POST_VARS. Jako indeks tablicy należy podać
        nazwę pola formularza, z którego chcemy odczytać dane. Schematycznie taka konstruk-
        cja ma postać:
           $zmienna = $HTTP_POST_VARS['nazwa_pola'];

        Należy jej użyć, jeśli niezbędne jest zachowanie kompatybilności z wersją 3 PHP.

        Drugim sposobem dostępu jest wykorzystanie globalnej tablicy $_POST. Jako indeks tablicy
        należy zastosować również nazwę pola formularza, z którego chcemy odczytać dane.
        Jest to polecany sposób odwoływania się do danych i będzie on stosowany w dalszej
        części książki, o ile zaistnieje potrzeba zastosowania metody POST. Schematycznie kon-
        strukcja taka ma postać:
           $zmienna = $_POST['nazwa_pola'];

        Sposób trzeci to dostęp bezpośredni, niezbędne jest w tym przypadku włączenie w pliku
        konfiguracyjnym php.ini opcji register_globals. Dostęp do pól formularza może się
        wtedy odbywać tak samo, jak w przypadku zwykłych zmiennych. Oznacza to, że jeśli
        w formularzu będzie występowało pole o nazwie pole1, to w skrypcie będzie można
        się odwołać do niego tak, jak do zmiennej $pole1. Jak już wiemy, ta metoda też nie jest
        polecana, gdyż nie pozwala na odróżnienie zwykłych zmiennych od tych powstałych
        ze względu na otrzymanie danych z formularza, co może powodować trudne do wy-
        krycia błędy.

        Na listingu 3.6 został przedstawiony skrypt odczytujący wartość pola tekstowego z for-
        mularza z listingu 3.5 z wykorzystaniem wszystkich trzech wymienionych sposobów.
        Przykładowy efekt działania skryptu w przypadku, kiedy do pola tekstowego formula-
        rza został wprowadzony ciąg znaków test, został przedstawiony na rysunku 3.4. Jak
        widać, przy prostej obsłudze formularzy różnice pomiędzy metodami GET i POST są nie-
        wielkie, jednak ta druga pozwoli nam wykonywać bardziej zaawansowane zadania, jak
        np. przesyłanie plików do serwera, czym zajmiemy się już w kolejnej sekcji.

Listing 3.6. Skrypt odczytujący dane przekazane z formularza za pomocą metody POST
           <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
           <html>
           <head>
154                                                     Rozdział 3. ♦ Współpraca z przeglądarką


           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
           <title>Wynik działania skryptu</title>
           </head>
           <body>
           <p>
           <?php
           //sposób pierwszy
           $zmienna = $HTTP_POST_VARS['pole1'];
           echo("1. Wartość pola pole1 to $zmienna <br />");

           //sposób drugi
           $zmienna = $_POST['pole1'];
           echo("2. Wartość pola pole1 to $zmienna <br />");

           //sposób trzeci
           $zmienna = $pole1;
           echo("3. Wartość pola pole1 to $zmienna");
           ?>
           </p>
           </body>
           </html>


Rysunek 3.4.
Różne sposoby
odczytu przesłanych
danych dają
taki sam efekt




Wysyłanie plików do serwera
        Aby wysłać plik z komputera użytkownika na serwer, trzeba przygotować odpowiedni
        formularz HTML umożliwiający wybór pliku oraz skrypt PHP, który go odbierze. Rów-
        nież środowisko PHP musi być odpowiednio skonfigurowane. W pliku php.ini musi być
        włączona opcja file_uploads, zmienna upload_tmp_dir powinna wskazywać na katalog,
        w którym będą zapisywane dane tymczasowe podczas ich pobierania, zmienna upload_
        max_filesize powinna określać maksymalny rozmiar pojedynczego pliku (standardowo
        2 MB). Jeżeli katalog tymczasowy nie zostanie podany, wykorzystany będzie katalog
        systemowy. Należy zwrócić uwagę, aby uprawnienia dostępu do katalogu tymczasowego
        były ustawione tak, aby PHP miało możliwość zapisywania w nim danych. Maksy-
        malna wielkość pliku zależy również od opcji post_max_size (standardowo 8 MB) i me-
        mory_limit (standardowo 8 MB). W większości przypadków ustawienia domyślne są
        jednak wystarczające i w standardowych zastosowaniach nie ma potrzeby ich mody-
        fikować.

        Formularz HTML należy zdefiniować za pomocą znacznika <form>, który powinien za-
        wierać następujące parametry:
Lekcja 10. Odbieranie danych z przeglądarki                                            155


             name      —    określa nazwę formularza.
             enctype —      określa typ kodowania MIME, w tym przypadku będzie
                            to multipart/form-data.
             action    —    określa adres skryptu PHP.
             method    —    określa metodę wysyłania danych, w tym przypadku będzie
                            to metoda POST.

        W formularzu należy umieścić dwa pola input, jedno typu file, a drugie typu submit.
        Polu typu file, służącemu do wyboru pliku, nadamy nazwę (parametr name) plik1. Po-
        zwoli ona na zidentyfikowanie danych z tego pola w skrypcie PHP. Kod przykładowego
        formularza został zaprezentowany na listingu 3.7. Gdy zostanie wczytany do przeglą-
        darki, będzie miał natomiast postać widoczną na rysunku 3.5.

Listing 3.7. Formularz HTML służący do wysyłania plików
           <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
           <html>
           <head>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
           <title>Wysyłanie plików</title>
           </head>
           <body>
           <form name     = "formularz1"
                  enctype = "multipart/form-data"
                  action = "http://127.0.0.1/upload.php"
                  method = "POST">
           Nazwa pliku:
           <input type = "file"
                   name = "plik1"
                   size = "30"
                   value = "">
           <input type = "submit"
                   name = "wyslij"
                   value = "Wyślij plik">
           </form>
           </body>
           </html>


Rysunek 3.5.
Wygląd formularza
do wysyłania plików




        Plik wysłany za pomocą takiego formularza do serwera zostanie zapisany w katalogu
        służącym do przechowywania plików tymczasowych. Katalog ten możemy ustalić sa-
        modzielnie, ustawiając w pliku php.ini opcję konfiguracyjną upload_tmp_dir. W sys-
        temie Linux będzie to np.:
156                                                        Rozdział 3. ♦ Współpraca z przeglądarką


            upload_tmp_dir = /var/www/upload

         a w systemie Windows:
            upload_tmp_dir = c:wwwupload

         Skrypt odbierający dane uzyska dostęp do globalnej tablicy $_FILES zawierającej infor-
         macje niezbędne do ich dalszego przetworzenia. Jest to tablica asocjacyjna, w której plik
         identyfikowany jest przez nazwę pola input (typu file) z formularza WWW. W przy-
         padku formularza z listingu 3.7 ta nazwa to plik1. Pod tym indeksem znajduje się 5 in-
         nych, które pozwalają na odczytanie informacji o pliku. Są to:
              $_FILES['plik1']['name']           — oryginalna nazwa pliku (którą miał
                                                   on na komputerze użytkownika).
              $_FILES['plik1']['type']           — typ MIME pliku (o ile przeglądarka
                                                   dostarczyła tę informację).
              $_FILES['plik1']['size']           — wielkość pliku w bajtach.
              $_FILES['plik1']['tmp_name'] — nazwa tymczasowa, pod jaką plik został
                                                     zapisany na serwerze.
              $_FILES['plik1']['error']          — status operacji, kod błędu.

         Pole error (dostępne w PHP od wersji 4.2.0) może przyjmować jedną z wartości:
              UPLOAD_ERR_OK            — brak błędu, operacja została zakończona sukcesem.
              UPLOAD_ERR_INI_SIZE      — wielkość pliku przekracza wielkość maksymalną
                                         zdefiniowaną w pliku php.ini (zmienna
                                           upload_max_filesize).
              UPLOAD_ERR_FORM_SIZE — rozmiar pliku przekracza wielkość maksymalną
                                           zdefiniowaną w formularzu HTML.
              UPLOAD_ERR_PARTIAL       — została odebrana jedynie część pliku.
              UPLOAD_ERR_NO_FILE       — plik nie został pobrany.

         Plik wysłany do serwera jest umieszczany w katalogu tymczasowym i należy go przenieść
         do właściwej lokalizacji docelowej (np. katalogu, który przeznaczyliśmy do przechowywa-
         nia tego typu danych). Wykorzystuje się w tym celu funkcję move_uploaded_file, która
         dodatkowo ze względów bezpieczeństwa oprócz zmiany lokalizacji pliku wykonuje
         sprawdzenie, czy na pewno został on wysłany do serwera za pomocą metody HTTP_POST.

         Powyższe informacje w zupełności wystarczą do napisania skryptu odbierającego pliki
         wysyłane z przeglądarki i zapisującego je w wybranym katalogu. Został on przedsta-
         wiony na listingu 3.8 i należy go zapisać pod nazwą upload.php w katalogu głównym
         serwera WWW.

Listing 3.8. Skrypt odbierający pliki wysłane do serwera
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
            <html>
            <head>
Lekcja 10. Odbieranie danych z przeglądarki                                              157


          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
          <title>Wynik odbioru pliku</title>
          </head>
          <body>
          <p>
          <?php
          $uploaddir = './';

          if($_FILES['plik1']['error'] == UPLOAD_ERR_OK){
             $new_name = $uploaddir.$_FILES['plik1']['name'];
             $temp_name = $_FILES['plik1']['tmp_name'];
             if(move_uploaded_file($temp_name, $new_name)){
               echo "Plik został załadowany.n";
             }
             else{
               echo "Nieprawidłowy plikn";
             }
          }
          else{
             echo("Wystąpił błąd: ");
             switch($_FILES['plik1']['error']){
               case UPLOAD_ERR_INI_SIZE :
               case UPLOAD_ERR_FORM_SIZE :
                 echo("Przekroczony maksymalny rozmiar pliku!n");
                 break;
               case UPLOAD_ERR_PARTIAL :
                 echo("Odebrano tylko część pliku!n");
                 break;
               case UPLOAD_ERR_NO_FILE :
                 echo("Plik nie został pobrany!n");
                 break;
               default :
                 echo("Nieznany typ błędu!n");
             }
          }
          ?>
          </p>
          </body>
          </html>


        Katalog, w którym mają być zapisywane odbierane pliki, jest wskazywany przez zmien-
        ną $uploaddir. Oczywiście musi on istnieć w systemie plików serwera. W przykładzie
        został zastosowany ciąg ./, co oznacza katalog bieżący (katalog, w którym znajduje się
        skrypt upload.php). Należy również pamiętać, że musi on mieć odpowiednio ustawione
        prawa dostępu (aparat wykonawczy PHP musi mieć możliwość zapisu).

        Pierwszą czynnością wykonywaną w skrypcie jest sprawdzenie, czy pole error tablicy
        $_FILES zawiera wartość UPLOAD_ERR_OK, a zatem czy plik został odebrany bez pro-
        blemów. Jeśli tak, z tablicy $_FILES jest odczytywana oryginalna nazwa pliku oraz
        nazwa tymczasowa, pod którą został on zapisany na serwerze. Do nazwy oryginalnej
        dołączana jest nazwa katalogu zawarta w zmiennej $uploaddir i całość jest zapisywana
        w zmiennej $new_name. Nazwa tymczasowa jest z kolei zapisywana w zmiennej $temp_
        name. Zmienne te (zostały one wprowadzone do skryptu w celu zwiększenia przejrzy-
        stości kodu) są następnie wykorzystywane jako parametry funkcji move_uploaded_file.
        Jeśli wykonanie tej funkcji zakończy się sukcesem i plik zostanie przeniesiony pod
158                                               Rozdział 3. ♦ Współpraca z przeglądarką


      oryginalną nazwą do katalogu wskazywanego przez $uploaddir, funkcja zwróci wartość
      true, a w przypadku przeciwnym — false. W zależności od tej wartości na ekranie
      jest wyświetlany odpowiedni komunikat.

      Jeżeli jednak wartość pola error tablicy $_FILES jest różna od UPLOAD_ERR_OK, wykony-
      wana jest instrukcja switch pozwalająca na stwierdzenie, jakiego typu błąd wystąpił.
      Badane są wszystkie pozostałe możliwości stanu pola error i wyświetlany jest odpo-
      wiedni komunikat. Następnie ma miejsce sprawdzenie, czy plik w ogóle został wysłany,
      czy jego wielkość nie przekroczyła maksymalnego rozmiaru oraz czy został on załado-
      wany w całości. Klauzula default instrukcji switch zabezpiecza nas przed sytuacją,
      kiedy w polu error znalazłby się nieznany kod błędu (np. wprowadzony w kolejnych
      wersjach PHP). Dzięki niej również w takiej sytuacji zostanie wyświetlona odpo-
      wiednia informacja.


Ćwiczenia do samodzielnego wykonania
      Ćwiczenie 10.1. Napisz skrypt obliczający pierwiastki równania kwadratowego o pa-
      rametrach wprowadzanych w formularzu HTML.

      Ćwiczenie 10.2. Napisz skrypt umożliwiający wykonywanie czterech podstawowych
      działań arytmetycznych na dwóch argumentach. Wartości argumentów mają być wpro-
      wadzane poprzez pola tekstowe formularza, a wybór działania ma następować poprzez
      pola wyboru typu radio.

      Ćwiczenie 10.3. Napisz skrypt wykonujący konwersję tekstu wprowadzonego w polu
      tekstowym formularza ze standardu Windows-1250 do ISO-8859-2.

      Ćwiczenie 10.4. Napisz skrypt umożliwiający użytkownikowi wysłanie pliku do ser-
      wera, umieszczający ten plik w wybranym katalogu i zwracający odnośnik do niego tak,
      żeby było możliwe jego pobranie z poziomu przeglądarki.

More Related Content

What's hot

mod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoramod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoraWydawnictwo Helion
 
PHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIPHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIWydawnictwo 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 IIWydawnictwo Helion
 
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyPHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIWydawnictwo Helion
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku JavaWydawnictwo Helion
 
JavaScript - przykłady. Biblia
JavaScript - przykłady. BibliaJavaScript - przykłady. Biblia
JavaScript - przykłady. BibliaWydawnictwo Helion
 
Tworzenie stron WWW w praktyce. Wydanie II
Tworzenie stron WWW w praktyce. Wydanie IITworzenie stron WWW w praktyce. Wydanie II
Tworzenie stron WWW w praktyce. Wydanie IIWydawnictwo Helion
 
Kurs tworzenia stron internetowych
Kurs tworzenia stron internetowychKurs tworzenia stron internetowych
Kurs tworzenia stron internetowychWydawnictwo Helion
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceWydawnictwo Helion
 
Pajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktycznePajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktyczneWydawnictwo Helion
 
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyPHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyWydawnictwo Helion
 
Tworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceTworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceWydawnictwo Helion
 

What's hot (20)

mod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoramod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratora
 
PHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIPHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie II
 
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
 
Po prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxGPo prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxG
 
Po prostu HTML 4. Wydanie III
Po prostu HTML 4. Wydanie IIIPo prostu HTML 4. Wydanie III
Po prostu HTML 4. Wydanie III
 
Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
 
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
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
 
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, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie III
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku Java
 
JavaScript - przykłady. Biblia
JavaScript - przykłady. BibliaJavaScript - przykłady. Biblia
JavaScript - przykłady. Biblia
 
Tworzenie stron WWW w praktyce. Wydanie II
Tworzenie stron WWW w praktyce. Wydanie IITworzenie stron WWW w praktyce. Wydanie II
Tworzenie stron WWW w praktyce. Wydanie II
 
Prolog. Programowanie
Prolog. ProgramowanieProlog. Programowanie
Prolog. Programowanie
 
Kurs tworzenia stron internetowych
Kurs tworzenia stron internetowychKurs tworzenia stron internetowych
Kurs tworzenia stron internetowych
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
 
Pajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktycznePajączek 5 NxG. Ćwiczenia praktyczne
Pajączek 5 NxG. Ćwiczenia praktyczne
 
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
 
Tworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceTworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyce
 

Viewers also liked

Drogi na EURO 2012 stan na - 28.02.2011
Drogi na EURO 2012 stan na - 28.02.2011 Drogi na EURO 2012 stan na - 28.02.2011
Drogi na EURO 2012 stan na - 28.02.2011 Michał Jaros
 
Stan środowiska wody podziemne
Stan środowiska   wody podziemneStan środowiska   wody podziemne
Stan środowiska wody podziemnezsanders
 
Ramowy harmonogram naborów RPO WD 2014-2020
Ramowy harmonogram naborów RPO WD 2014-2020Ramowy harmonogram naborów RPO WD 2014-2020
Ramowy harmonogram naborów RPO WD 2014-2020Fundacja "Merkury"
 
Informacja dla mikro-, małych i srednich przedsiebiorstw w Polsce
Informacja dla mikro-, małych i srednich przedsiebiorstw w PolsceInformacja dla mikro-, małych i srednich przedsiebiorstw w Polsce
Informacja dla mikro-, małych i srednich przedsiebiorstw w PolsceSabina Cisek
 
15 dp professio_2011-07-29
15 dp professio_2011-07-2915 dp professio_2011-07-29
15 dp professio_2011-07-29dmidmsa
 
Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014
Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014
Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014EYPoland
 
Трудові ресурси підприємства
Трудові ресурси підприємстваТрудові ресурси підприємства
Трудові ресурси підприємстваPavlo Syrvatka
 
Dietetyk 321[11] o1.04_u
Dietetyk 321[11] o1.04_uDietetyk 321[11] o1.04_u
Dietetyk 321[11] o1.04_ugemix gemix
 
Spalarnia
SpalarniaSpalarnia
Spalarniags24
 
Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%
Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%
Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%Vaillant Saunier Duval Sp. z o.o.
 
Exploring culture theory GLOBE, Hofstede, and Trompenaars
Exploring culture theory GLOBE, Hofstede, and TrompenaarsExploring culture theory GLOBE, Hofstede, and Trompenaars
Exploring culture theory GLOBE, Hofstede, and TrompenaarsLisa Parrott
 
CLIL - Content and Language Integrated Learning
CLIL - Content and Language Integrated LearningCLIL - Content and Language Integrated Learning
CLIL - Content and Language Integrated Learningangelammoyano
 
Grzybica stóp
Grzybica stópGrzybica stóp
Grzybica stópJagoda95
 

Viewers also liked (20)

Drogi na EURO 2012 stan na - 28.02.2011
Drogi na EURO 2012 stan na - 28.02.2011 Drogi na EURO 2012 stan na - 28.02.2011
Drogi na EURO 2012 stan na - 28.02.2011
 
19
1919
19
 
Stan środowiska wody podziemne
Stan środowiska   wody podziemneStan środowiska   wody podziemne
Stan środowiska wody podziemne
 
Ramowy harmonogram naborów RPO WD 2014-2020
Ramowy harmonogram naborów RPO WD 2014-2020Ramowy harmonogram naborów RPO WD 2014-2020
Ramowy harmonogram naborów RPO WD 2014-2020
 
Marzena śWigoń. Bariery Informacyjne
Marzena śWigoń. Bariery InformacyjneMarzena śWigoń. Bariery Informacyjne
Marzena śWigoń. Bariery Informacyjne
 
Informacja dla mikro-, małych i srednich przedsiebiorstw w Polsce
Informacja dla mikro-, małych i srednich przedsiebiorstw w PolsceInformacja dla mikro-, małych i srednich przedsiebiorstw w Polsce
Informacja dla mikro-, małych i srednich przedsiebiorstw w Polsce
 
15 dp professio_2011-07-29
15 dp professio_2011-07-2915 dp professio_2011-07-29
15 dp professio_2011-07-29
 
Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014
Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014
Wyzwania w ochronie zdrowia w Polsce - Forum Ochrony Zdrowia - Krynica 2014
 
Трудові ресурси підприємства
Трудові ресурси підприємстваТрудові ресурси підприємства
Трудові ресурси підприємства
 
Dietetyk 321[11] o1.04_u
Dietetyk 321[11] o1.04_uDietetyk 321[11] o1.04_u
Dietetyk 321[11] o1.04_u
 
The Archetypal Lens
The Archetypal LensThe Archetypal Lens
The Archetypal Lens
 
Spalarnia
SpalarniaSpalarnia
Spalarnia
 
Optymalizacja - Cypr
Optymalizacja - CyprOptymalizacja - Cypr
Optymalizacja - Cypr
 
Tipuri de comunicare
Tipuri de comunicareTipuri de comunicare
Tipuri de comunicare
 
Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%
Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%
Dlaczego kotły kondensacyjne osiągają sprawność powyżej 100%
 
Exploring culture theory GLOBE, Hofstede, and Trompenaars
Exploring culture theory GLOBE, Hofstede, and TrompenaarsExploring culture theory GLOBE, Hofstede, and Trompenaars
Exploring culture theory GLOBE, Hofstede, and Trompenaars
 
Lectie comunicarea
Lectie comunicareaLectie comunicarea
Lectie comunicarea
 
CLIL - Content and Language Integrated Learning
CLIL - Content and Language Integrated LearningCLIL - Content and Language Integrated Learning
CLIL - Content and Language Integrated Learning
 
Komfort cieplny w pomieszczeniu w okresie letnim
Komfort cieplny w pomieszczeniu w okresie letnimKomfort cieplny w pomieszczeniu w okresie letnim
Komfort cieplny w pomieszczeniu w okresie letnim
 
Grzybica stóp
Grzybica stópGrzybica stóp
Grzybica stóp
 

Similar to PHP5. Praktyczny kurs

PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaWydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanieWydawnictwo Helion
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaWydawnictwo Helion
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychWydawnictwo Helion
 
PHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowaniePHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowanieWydawnictwo Helion
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIWydawnictwo Helion
 
PHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowePHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanoweWydawnictwo Helion
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIWydawnictwo Helion
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieWydawnictwo Helion
 

Similar to PHP5. Praktyczny kurs (20)

PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędzia
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
PHP5. Tajniki programowania
PHP5. Tajniki programowaniaPHP5. Tajniki programowania
PHP5. Tajniki programowania
 
PHP5. Radocha z programowania
PHP5. Radocha z programowaniaPHP5. Radocha z programowania
PHP5. Radocha z programowania
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
 
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. Rozmówki
PHP. RozmówkiPHP. Rozmówki
PHP. Rozmówki
 
PHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzeniePHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzenie
 
PHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowaniePHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowanie
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
 
PHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowePHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowe
 
PHP 5. Nowe możliwości
PHP 5. Nowe możliwościPHP 5. Nowe możliwości
PHP 5. Nowe możliwości
 
PHP5. Księga eksperta
PHP5. Księga ekspertaPHP5. Księga eksperta
PHP5. Księga eksperta
 
Perl. Ćwiczenia
Perl. ĆwiczeniaPerl. Ćwiczenia
Perl. Ćwiczenia
 
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 i MySQL. Biblia
PHP5 i MySQL. BibliaPHP5 i MySQL. Biblia
PHP5 i MySQL. Biblia
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 
Visual Basic .NET. Ćwiczenia
Visual Basic .NET. ĆwiczeniaVisual Basic .NET. Ćwiczenia
Visual Basic .NET. Ćwiczenia
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. Programowanie
 
Delphi. Szybki start
Delphi. Szybki startDelphi. Szybki start
Delphi. Szybki start
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#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 biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 

More from 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
 
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
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 

PHP5. Praktyczny kurs

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TREŒCI PHP5. Praktyczny kurs KATALOG KSI¥¯EK Autor: Marcin Lis ISBN: 83-246-0307-7 KATALOG ONLINE Format: B5, stron: 432 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA Znajomoœæ jêzyka PHP wykorzystywanego do tworzenia dynamicznych stron WWW to dziœ jedna z podstawowych umiejêtnoœci wymaganych od webmastera. Era statycznych stron tworzonych za pomoc¹ jêzyka HTML przeminê³a ju¿ dawno, CENNIK I INFORMACJE a dynamiczne generowanie treœci sta³o siê obecnie standardem. Jêzyk PHP i baza danych MySQL stanowi¹ platformê o wielkich mo¿liwoœciach, stosowan¹ do tworzenia ZAMÓW INFORMACJE zarówno wielkich portali i witryn e-commerce, jak i prostych stron prywatnych. O NOWOŒCIACH Ksi¹¿ka „PHP5. Praktyczny kurs” jest wprowadzeniem w tajniki nowoczesnego tworzenia stron WWW. Przedstawia proces instalacji jêzyka PHP wraz z serwerami ZAMÓW CENNIK WWW, podstawowe konstrukcje jêzyka i sposoby wykorzystania ich w procesie budowania witryny. Opisuje takie zagadnienia, jak wspó³praca z systemem plików, obs³uga sesji, mo¿liwoœci programowania obiektowego oraz wspó³praca z bazami CZYTELNIA danych. Dowiesz siê z niej tak¿e, jak za pomoc¹ PHP generowaæ i przetwarzaæ elementy graficzne oraz wykorzystywaæ protoko³y sieciowe. FRAGMENTY KSI¥¯EK ONLINE • Instalacja i konfiguracja PHP w ró¿nych systemach operacyjnych • Zmienne, typy danych i operatory • Instrukcje steruj¹ce • Komunikacja skryptów z przegl¹dark¹ • Obs³uga plików cookie i sesji • Operacje na plikach • Programowanie obiektowe w PHP • Wykorzystywanie danych zgromadzonych w bazie Poznaj i wykorzystaj w swoich projektach mo¿liwoœci jêzyka PHP Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wstęp .............................................................................................. 7 Rozdział 1. Podstawy ......................................................................................... 9 Lekcja 1. Czym jest PHP? ................................................................................................ 9 Język skryptowy ......................................................................................................... 9 Krótka historia PHP ................................................................................................. 10 Jak to działa? ............................................................................................................ 10 Lekcja 2. Instalacja i konfiguracja narzędzi ................................................................... 12 Linux ........................................................................................................................ 12 Windows .................................................................................................................. 21 Plik konfiguracyjny PHP .......................................................................................... 25 PHP w wierszu poleceń ............................................................................................ 26 Rozdział 2. Elementy języka ............................................................................. 27 Lekcja 3. Pierwszy skrypt ............................................................................................... 27 Zaczynamy ............................................................................................................... 27 Znaczniki PHP ......................................................................................................... 30 Komentarze .............................................................................................................. 32 Wyświetlanie informacji .......................................................................................... 34 Instrukcja print ......................................................................................................... 36 Łączenie skryptów ................................................................................................... 36 Lekcja 4. Zmienne, typy danych i operatory .................................................................. 41 Czym są zmienne? ................................................................................................... 41 Rodzaje zmiennych, czyli typy danych .................................................................... 42 Zmienne w kodzie skryptu ....................................................................................... 46 Wyświetlanie wartości zmiennych ........................................................................... 48 Operacje na zmiennych ............................................................................................ 52 Operatory ................................................................................................................. 52 Zmienne globalne (superglobalne) ........................................................................... 67 Konwersje typów ..................................................................................................... 69 Ćwiczenia do samodzielnego wykonania ................................................................. 73 Lekcja 5. Instrukcje sterujące ......................................................................................... 73 Instrukcje warunkowe .............................................................................................. 73 Instrukcja wyboru .................................................................................................... 80 Operator warunkowy ................................................................................................ 82 Pętle ......................................................................................................................... 83 Składnia alternatywna .............................................................................................. 93 Ćwiczenia do samodzielnego wykonania ................................................................. 96
  • 3. 4 PHP5. Praktyczny kurs Lekcja 6. Funkcje ........................................................................................................... 97 Definiowanie funkcji ................................................................................................ 97 Argumenty funkcji ................................................................................................... 98 Zwracanie wartości przez funkcje ............................................................................ 99 Zasięg zmiennych .................................................................................................. 101 Sposoby przekazywania argumentów .................................................................... 104 Domyślne argumenty funkcji ................................................................................. 106 Ćwiczenia do samodzielnego wykonania ............................................................... 107 Lekcja 7. Obsługa daty i czasu ..................................................................................... 107 Wyświetlanie daty i czasu ...................................................................................... 107 Tworzenie znacznika czasu .................................................................................... 115 Pozostałe funkcje ................................................................................................... 118 Ćwiczenia do samodzielnego wykonania ............................................................... 120 Lekcja 8. Ciągi znaków ................................................................................................ 121 Rodzaje ciągów znaków ......................................................................................... 121 Formatowanie ciągów ............................................................................................ 123 Przetwarzanie ciągów znaków ............................................................................... 128 Porównania ............................................................................................................ 131 Przeszukiwanie ...................................................................................................... 131 Ćwiczenia do samodzielnego wykonania ............................................................... 133 Lekcja 9. Tablice .......................................................................................................... 134 Proste tablice .......................................................................................................... 134 Tablice asocjacyjne ................................................................................................ 137 Operacje na tablicach ............................................................................................. 139 Ćwiczenia do samodzielnego wykonania ............................................................... 145 Rozdział 3. Współpraca z przeglądarką ............................................................ 147 Lekcja 10. Odbieranie danych z przeglądarki .............................................................. 147 Formularze HTML ................................................................................................. 147 Wysyłanie metodą GET ......................................................................................... 148 Metoda POST ......................................................................................................... 152 Wysyłanie plików do serwera ................................................................................ 154 Ćwiczenia do samodzielnego wykonania ............................................................... 158 Lekcja 11. Wysyłanie danych do przeglądarki ............................................................. 158 Sposoby wysyłania danych .................................................................................... 158 Wysyłanie zawartości plików ................................................................................. 159 Sposoby pobierania plików z serwisu .................................................................... 162 Ćwiczenia do samodzielnego wykonania ............................................................... 175 Lekcja 12. Obsługa cookies .......................................................................................... 175 Krótko o cookies .................................................................................................... 175 Obsługa cookies w PHP ......................................................................................... 176 Wykorzystanie cookies .......................................................................................... 180 Ćwiczenia do samodzielnego wykonania ............................................................... 184 Lekcja 13. Sesje ............................................................................................................ 184 Wstęp do sesji ........................................................................................................ 184 Identyfikator sesji ................................................................................................... 184 Rozpoczynanie sesji ............................................................................................... 185 Kończenie sesji ...................................................................................................... 185 Zmienne sesji ......................................................................................................... 186 Konfiguracja sesji .................................................................................................. 187 Implementacja sesji ................................................................................................ 189 Śledzenie zachowań użytkownika .......................................................................... 192 Kontrola dostępu z wykorzystaniem sesji .............................................................. 194 Ćwiczenia do samodzielnego wykonania ............................................................... 199
  • 4. Spis treści 5 Rozdział 4. Współpraca z systemem plików ..................................................... 201 Lekcja 14. Operacje na strukturze systemu plików ...................................................... 201 Odczyt zawartości katalogu ................................................................................... 201 Operacje na katalogach .......................................................................................... 206 Operacje na plikach ................................................................................................ 207 Miejsce na dysku .................................................................................................... 210 Rekurencyjne usuwanie zawartości katalogu ......................................................... 211 Nawigacja po katalogach ....................................................................................... 212 Ćwiczenia do samodzielnego wykonania ............................................................... 214 Lekcja 15. Operacje na plikach .................................................................................... 215 Tworzenie i otwieranie plików ............................................................................... 215 Zamykanie plików .................................................................................................. 217 Odczyt danych ....................................................................................................... 217 Zapis danych .......................................................................................................... 224 Inne operacje .......................................................................................................... 228 Ćwiczenia do samodzielnego wykonania ............................................................... 231 Lekcja 16. Praktyczne wykorzystanie plików .............................................................. 231 Tekstowy licznik odwiedzin ................................................................................... 232 Licznik wykorzystujący grafikę ............................................................................. 233 Kontrola dostępu .................................................................................................... 235 Lista odnośników ................................................................................................... 239 Lista odwiedzin ...................................................................................................... 240 Ćwiczenia do samodzielnego wykonania ............................................................... 243 Rozdział 5. Obiektowy PHP ............................................................................. 245 Lekcja 17. Podstawy obiektowości .............................................................................. 245 Czym jest obiekt? ................................................................................................... 245 Definicja klasy ....................................................................................................... 246 Tworzenie obiektów ............................................................................................... 249 Konstruktory i destruktory ..................................................................................... 250 Obiektowa lista odwiedzin ..................................................................................... 254 Ćwiczenia do samodzielnego wykonania ............................................................... 257 Lekcja 18. Więcej o programowaniu obiektowym ....................................................... 257 Dziedziczenie ......................................................................................................... 257 Przesłanianie składowych ...................................................................................... 260 Klasy i składowe finalne ........................................................................................ 262 Konstruktory i destruktory klas bazowych ............................................................. 263 Specyfikatory dostępu ............................................................................................ 265 Składowe statyczne ................................................................................................ 267 Ćwiczenia do samodzielnego wykonania ............................................................... 270 Lekcja 19. Wyjątki ....................................................................................................... 270 Instrukcja throw ..................................................................................................... 271 Klasa Exception i pochodne ................................................................................... 271 Blok try...catch ....................................................................................................... 272 Przechwytywanie wielu wyjątków ......................................................................... 278 Własne wyjątki ....................................................................................................... 280 Ćwiczenia do samodzielnego wykonania ............................................................... 281 Rozdział 6. Grafika i obrazy ............................................................................ 283 Lekcja 20. Obsługa grafiki ........................................................................................... 283 Biblioteka graficzna ............................................................................................... 283 Jak stworzyć galerię obrazów? ............................................................................... 284 Przetwarzanie grafiki ............................................................................................. 293 Ćwiczenia do samodzielnego wykonania ............................................................... 305
  • 5. 6 PHP5. Praktyczny kurs Rozdział 7. Obsługa sieci ................................................................................ 307 Lekcja 21. Połączenia, poczta i FTP ............................................................................. 307 Tablica $_SERVER ............................................................................................... 307 Adresy IP ............................................................................................................... 310 Jak rozpoznać przeglądarkę? .................................................................................. 313 Połączenie FTP ...................................................................................................... 315 Wysyłanie poczty ................................................................................................... 317 Ćwiczenia do samodzielnego wykonania ............................................................... 320 Rozdział 8. Współpraca z bazami danych ......................................................... 321 Lekcja 22. Podstawy baz danych .................................................................................. 321 MySQL i SQLite .................................................................................................... 321 Tabele, klucze i relacje ........................................................................................... 322 Bazy danych a PHP ................................................................................................ 326 Instalacja systemu bazy danych ............................................................................. 327 Obsługa serwera MySQL ....................................................................................... 333 Lekcja 23. Podstawy SQL ............................................................................................ 339 Czym jest SQL? ..................................................................................................... 339 Obsługa tabel ......................................................................................................... 340 Typy danych w kolumnach .................................................................................... 344 Zapytania ............................................................................................................... 349 Lekcja 24. PHP i bazy danych ...................................................................................... 361 PHP i MySQL ........................................................................................................ 361 PHP i SQLite .......................................................................................................... 369 Ćwiczenia do samodzielnego wykonania ............................................................... 377 Lekcja 25. Podejście obiektowe ................................................................................... 378 PEAR DB ............................................................................................................... 378 PHP i SQLite .......................................................................................................... 386 Lekcja 26. Bazy danych w praktyce ............................................................................. 391 Licznik ................................................................................................................... 391 Logowanie .............................................................................................................. 394 Ankieta ................................................................................................................... 396 Lista odwiedzin ...................................................................................................... 400 Liczba osób na stronie ............................................................................................ 403 Ćwiczenia do samodzielnego wykonania ............................................................... 406 Skorowidz ..................................................................................... 407
  • 6. Rozdział 3. Współpraca z przeglądarką Lekcja 10. Odbieranie danych z przeglądarki Formularze HTML Skrypty PHP bardzo często są wykorzystywane do odbierania i przetwarzania danych pochodzących z przeglądarki użytkownika. Najczęściej polega to na tym, że osoba prze- glądająca stronę WWW wprowadza różne informacje do formularza HTML, które na- stępnie, zazwyczaj po kliknięciu przycisku, są wysyłane do serwera, gdzie zajmuje się nimi kod PHP. Aby taka procedura mogła zostać wykonana, formularz musi zawierać parametry action oraz method, zatem jego ogólna postać będzie następująca: <form name = "nazwa" target = "okno" action = "url" method = "metoda" enctype = "typ kodowania"> <!--tu definicja obiektów składowych--> </form> Parametr method wskazuje metodę, która zostanie użyta do przesłania danych do ser- wera, może to być GET lub POST. Natomiast action określa adres skryptu, który będzie odbierał dane. Może on być adresem bezwzględnym, np. http://www.mojadomena.com/ skrypt.php, lub względnym, np. /skrypty/skrypt.php. W pierwszym przypadku dane zo- staną dostarczone do skryptu skrypt.php znajdującego się w głównym katalogu serwera o adresie http://www.mojadomena.com, natomiast w drugim — do skryptu o nazwie skrypt.php znajdującego się w podkatalogu skrypty na serwerze ze stroną WWW zawie- rającą formularz.
  • 7. 148 Rozdział 3. ♦ Współpraca z przeglądarką Elementami składowymi formularza mogą być: button — klasyczny przycisk, checkbox — pole wyboru, hidden — element ukryty, password — pole tekstowe do wpisywania haseł, radio — pole wyboru, reset — przycisk reset, select — lista wyboru, submit — przycisk submit, text — pole tekstowe, textarea — rozszerzone pole tekstowe. Każdy z tych elementów powinien mieć określony parametr name, dzięki któremu będzie możliwa jego identyfikacja w skrypcie PHP. Wysyłanie metodą GET Metoda GET służy do przesyłania stosunkowo niewielkich ilości danych, np. krótkich for- mularzy tekstowych. Wynika to z faktu, że są one przesyłane w adresie URL, który bę- dzie miał wtedy schematyczną postać: http://adres.serwera/skrypt.php?parametr1=wartość1&parametr2=wartość2 Jeśli weźmiemy pod uwagę, że adres URL ma zwykle ograniczoną długość (zależy to od przeglądarki oraz serwera), a także że może zawierać jedynie znaki alfanumeryczne, jasnym jest, dlaczego ta metoda jest wykorzystywana jedynie do wymiany prostych danych tekstowych. Aby zobaczyć, jak to działa w praktyce, napiszmy kod prostego formularza zawierają- cego jedno pole tekstowe, który będzie wysyłał dane do skryptu o nazwie skrypt.php umieszczonego w katalogu głównym naszego serwera WWW. Kod HTML zawierający taki formularz jest widoczny na listingu 3.1. Listing 3.1. Kod przykładowego formularza HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Przykładowa strona</title> </head> <body> <form method="GET" action="http://127.0.0.1/skrypt.php"> <input type="text" name="pole1">
  • 8. Lekcja 10. Odbieranie danych z przeglądarki 149 <input type="submit"> </form> </body> </html> Formularz (widoczny na rysunku 3.1) zawiera jedno pole tekstowe o nazwie pole1 oraz przycisk typu Submit, którego kliknięcie powoduje przesłanie danych do serwera. War- tość parametru method to get, a zatem dane zostaną przesłane do serwera za pomocą metody GET. Nazwę skryptu oraz adres serwera wskazuje parametr action, wywołany zostanie więc skrypt o nazwie skrypt.php znajdujący się na serwerze o lokalnym adre- sie 127.0.0.1 (prawidłowe byłoby również użycie adresu http://localhost/skrypt.php). Ponieważ zarówno kod HTML, jak i kod skryptu będą się znajdowały na tym samym serwerze w tym samym katalogu, można również pominąć w parametrze action dane dotyczące serwera. Tym samym mógłby mieć on postać: action="skrypt.php" Rysunek 3.1. Formularz generowany przez kod z listingu 3.1 Jeśli do pola tekstowego wprowadzimy przykładowy ciąg znaków, np. test, oraz kliknie- my przycisk Wyślij zapytanie (napis na przycisku może być różny w zależności od zasto- sowanej przeglądarki), to powstanie URL w postaci http://127.0.0.1/skrypt.php?pole1=test, tak jak na rysunku 3.2. Przetworzony zostanie zatem skrypt znajdujący się na serwe- rze lokalnym 127.0.0.1, w pliku skrypt.php i zostaną mu przekazane wartości znajdu- jące się za znakiem ? odnośnika. W skrypcie możemy te wartości odczytać i wyko- rzystać do własnych celów. Dowiedzmy się zatem, jak to zrobić. Rysunek 3.2. Odnośnik generowany w metodzie GET Dostęp do danych z formularza jest możliwy na trzy sposoby. Sposobem najstarszym i obecnie niezalecanym jest wykorzystanie globalnej tablicy $HTTP_GET_VARS. Jako indeks tablicy należy podać nazwę pola formularza, z którego chcemy odczytać dane. Sche- matycznie taka konstrukcja będzie miała postać: $zmienna = $HTTP_GET_VARS['nazwa_pola']; Tego typu odwołanie należy stosować jedynie wtedy, gdy konieczna jest kompatybil- ność ze starszymi wersjami PHP (PHP3), zazwyczaj jednak nie ma takiej potrzeby. Aby skorzystać z tego typu odwołań w PHP5, należy w pliku konfiguracyjnym php.ini włączyć domyślnie wyłączoną opcję register_long_arrays (register_long_arrays = On).
  • 9. 150 Rozdział 3. ♦ Współpraca z przeglądarką Drugim sposobem dostępu do danych z formularza jest wykorzystanie globalnej tablicy $_GET. Jako indeks tablicy należy zastosować, podobnie jak w poprzednim przypadku, nazwę pola, z którego dane chcemy odczytać. Jest to też zalecany sposób odczytu i bę- dziemy go stosować w dalszej części książki. Schematycznie konstrukcja taka ma postać: $zmienna = $_GET ['nazwa_pola']; Sposób trzeci to dostęp bezpośredni. Jeżeli w pliku konfiguracyjnym php.ini włączymy opcję register_globals1, dostęp do pól formularza będzie odbywał się tak samo jak do zwykłych zmiennych. Oznacza to, że jeśli w formularzu będzie występowało pole o nazwie pole1, to w skrypcie będzie można się odwołać do niego tak, jak do zmiennej $pole1. Ten sposób, choć wydaje się najwygodniejszy, może jednak prowadzić do po- wstawania błędów w skryptach, gdyż zmienne związane z formularzem nie odróżniają się od zmiennych lokalnych skryptu. Stosujmy ten sposób jedynie wtedy, gdy jest to naprawdę potrzebne i dokładnie wiemy, jakie mogą być konsekwencje. Na listingu 3.2 został przedstawiony skrypt odczytujący wartość pola tekstowego z for- mularza z listingu 3.1 z wykorzystaniem wszystkich trzech sposobów. Listing 3.2. Różne sposoby odczytu danych z formularza <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Przykładowa strona</title> </head> <body> <p> Dane wprowadzone do formularza: </p> <?php //sposób pierwszy $zmienna = $HTTP_GET_VARS['pole1']; echo("1. Wartość pola pole1 to $zmienna <br />"); //sposób drugi $zmienna = $_GET['pole1']; echo("2. Wartość pola pole1 to $zmienna <br />"); //sposób trzeci $zmienna = $pole1; echo("3. Wartość pola pole1 to $zmienna"); ?> </body> </html> Przy przetwarzaniu formularzy bardzo przydaje się funkcja isSet, która pozwala stwier- dzić, czy dane pole formularza zostało ustawione, innymi słowy czy została przekazana do skryptu wartość odpowiadająca temu polu. Aby pokazać sposób wykorzystania tej funkcji, utwórzmy formularz składający się z trzech pól wyboru typu radio. Odpowiedni kod HTML został zaprezentowany na listingu 3.3, a jego wygląd widoczny jest na ry- 1 Począwszy od PHP w wersji 4.2.0, a więc także we wszystkich wersjach PHP5, opcja ta jest domyślnie wyłączona.
  • 10. Lekcja 10. Odbieranie danych z przeglądarki 151 sunku 3.3. Każde z pól ma taką samą wartość parametru name, a zatem tworzą one jedną grupę. Dzięki temu na raz może być zaznaczone tylko jedno pole, są to więc opcje wykluczające. Każde pole ma jednak inną wartość parametru value, dzięki czemu w skrypcie będziemy je mogli łatwo zidentyfikować. Parametr action formularza wska- zuje, podobnie jak we wcześniejszych przykładach, na skrypt znajdujący się w pliku skrypt.php na serwerze lokalnym o adresie 127.0.0.1. Listing 3.3. Formularz zawierający elementy typu radio <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Przykładowa strona</title> </head> <body> <P>Proszę zaznaczyć jedną z opcji.</P> <form method="get" action="http://127.0.0.1/skrypt.php"> <input type="radio" name="radio1" value="opcja1"> Opcja1 <br /> <input type="radio" name="radio1" value="opcja2"> Opcja2 <br /> <input type="radio" name="radio1" value="opcja3"> Opcja3 <br /><br /> <input type="submit"> </form> </body> </html> Rysunek 3.3. Wygląd formularza generowanego przez kod z listingu 3.3 Napiszmy więc teraz skrypt skrypt.php. Pozwoli nam on stwierdzić, czy została zazna- czona jakaś opcja i ewentualnie która. W wykonaniu tego zadania bardzo nam pomoże wspomniana przed chwilą funkcja isSet. Spójrzmy na kod widoczny na listingu 3.4 — isSet jest tu używana do stwierdzenia, czy w tablicy $_GET jest ustawiony klucz o nazwie
  • 11. 152 Rozdział 3. ♦ Współpraca z przeglądarką radio1, a tym samym czy do skryptu została przekazana wartość pola radio o nazwie radio1. Jeśli tak, funkcja zwraca wartość true, jeśli nie — wartość false. Takie za- chowanie pozwala na użycie instrukcji warunkowej if do wyświetlenia właściwego komunikatu na ekranie. Listing 3.4. Obsługa pól typu radio <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Wynik działania skryptu</title> </head> <body> <p> <?php if(!isSet($_GET['radio1'])){ echo("Proszę zaznaczyć jedną z opcji!"); } else{ echo("Zaznaczona opcja to {$_GET['radio1']}."); } ?> </p> </body> </html> Metoda POST Metoda POST to drugi sposób przesyłania danych do serwera. Główne różnice dla użyt- kownika to możliwość przesłania dużo większej ilości danych (np. plików binarnych) oraz to, że nie można ich zobaczyć w polu adresu przeglądarki (co wydaje się całkiem logiczne). Maksymalna ilość danych, jakie mogą być przesłane za pomocą tej metody, jest ograniczona przez znajdującą się w pliku php.ini opcję konfiguracyjną post_max_ size2. Domyślnie jest to 8 MB. Prosty formularz wykorzystujący przesyłanie danych metodą POST został przedstawiony na listingu 3.5. Jak widać, jedyną różnicą w stosunku do metody GET (formularz z listingu 3.1) jest zmiana wartości parametru method znacznika form. Również i w tym przypadku parametr action mógłby mieć postać: action="http://localhost/skrypt.php" lub po prostu: action="skrypt.php" Listing 3.5. Kod formularza HTML wysyłającego dane metodą POST <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> 2 Na maksymalną ilość odbieranych danych mogą również mieć wpływ ustawienia serwera WWW.
  • 12. Lekcja 10. Odbieranie danych z przeglądarki 153 <title>Przykładowa strona</title> </head> <body> <form method="post" action="http://127.0.0.1/skrypt.php"> <input type="text" name="pole1"> <input type="submit"> </form> </body> </html> W skrypcie PHP wartości przesłane z formularza można odczytać, podobnie jak miało to miejsce w przypadku metody GET, na trzy sposoby. Sposobem pierwszym (obecnie niezalecanym; niezbędne jest włączenie opcji konfiguracyjnej register_long_arrays) jest wykorzystanie globalnej tablicy $HTTP_POST_VARS. Jako indeks tablicy należy podać nazwę pola formularza, z którego chcemy odczytać dane. Schematycznie taka konstruk- cja ma postać: $zmienna = $HTTP_POST_VARS['nazwa_pola']; Należy jej użyć, jeśli niezbędne jest zachowanie kompatybilności z wersją 3 PHP. Drugim sposobem dostępu jest wykorzystanie globalnej tablicy $_POST. Jako indeks tablicy należy zastosować również nazwę pola formularza, z którego chcemy odczytać dane. Jest to polecany sposób odwoływania się do danych i będzie on stosowany w dalszej części książki, o ile zaistnieje potrzeba zastosowania metody POST. Schematycznie kon- strukcja taka ma postać: $zmienna = $_POST['nazwa_pola']; Sposób trzeci to dostęp bezpośredni, niezbędne jest w tym przypadku włączenie w pliku konfiguracyjnym php.ini opcji register_globals. Dostęp do pól formularza może się wtedy odbywać tak samo, jak w przypadku zwykłych zmiennych. Oznacza to, że jeśli w formularzu będzie występowało pole o nazwie pole1, to w skrypcie będzie można się odwołać do niego tak, jak do zmiennej $pole1. Jak już wiemy, ta metoda też nie jest polecana, gdyż nie pozwala na odróżnienie zwykłych zmiennych od tych powstałych ze względu na otrzymanie danych z formularza, co może powodować trudne do wy- krycia błędy. Na listingu 3.6 został przedstawiony skrypt odczytujący wartość pola tekstowego z for- mularza z listingu 3.5 z wykorzystaniem wszystkich trzech wymienionych sposobów. Przykładowy efekt działania skryptu w przypadku, kiedy do pola tekstowego formula- rza został wprowadzony ciąg znaków test, został przedstawiony na rysunku 3.4. Jak widać, przy prostej obsłudze formularzy różnice pomiędzy metodami GET i POST są nie- wielkie, jednak ta druga pozwoli nam wykonywać bardziej zaawansowane zadania, jak np. przesyłanie plików do serwera, czym zajmiemy się już w kolejnej sekcji. Listing 3.6. Skrypt odczytujący dane przekazane z formularza za pomocą metody POST <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>
  • 13. 154 Rozdział 3. ♦ Współpraca z przeglądarką <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Wynik działania skryptu</title> </head> <body> <p> <?php //sposób pierwszy $zmienna = $HTTP_POST_VARS['pole1']; echo("1. Wartość pola pole1 to $zmienna <br />"); //sposób drugi $zmienna = $_POST['pole1']; echo("2. Wartość pola pole1 to $zmienna <br />"); //sposób trzeci $zmienna = $pole1; echo("3. Wartość pola pole1 to $zmienna"); ?> </p> </body> </html> Rysunek 3.4. Różne sposoby odczytu przesłanych danych dają taki sam efekt Wysyłanie plików do serwera Aby wysłać plik z komputera użytkownika na serwer, trzeba przygotować odpowiedni formularz HTML umożliwiający wybór pliku oraz skrypt PHP, który go odbierze. Rów- nież środowisko PHP musi być odpowiednio skonfigurowane. W pliku php.ini musi być włączona opcja file_uploads, zmienna upload_tmp_dir powinna wskazywać na katalog, w którym będą zapisywane dane tymczasowe podczas ich pobierania, zmienna upload_ max_filesize powinna określać maksymalny rozmiar pojedynczego pliku (standardowo 2 MB). Jeżeli katalog tymczasowy nie zostanie podany, wykorzystany będzie katalog systemowy. Należy zwrócić uwagę, aby uprawnienia dostępu do katalogu tymczasowego były ustawione tak, aby PHP miało możliwość zapisywania w nim danych. Maksy- malna wielkość pliku zależy również od opcji post_max_size (standardowo 8 MB) i me- mory_limit (standardowo 8 MB). W większości przypadków ustawienia domyślne są jednak wystarczające i w standardowych zastosowaniach nie ma potrzeby ich mody- fikować. Formularz HTML należy zdefiniować za pomocą znacznika <form>, który powinien za- wierać następujące parametry:
  • 14. Lekcja 10. Odbieranie danych z przeglądarki 155 name — określa nazwę formularza. enctype — określa typ kodowania MIME, w tym przypadku będzie to multipart/form-data. action — określa adres skryptu PHP. method — określa metodę wysyłania danych, w tym przypadku będzie to metoda POST. W formularzu należy umieścić dwa pola input, jedno typu file, a drugie typu submit. Polu typu file, służącemu do wyboru pliku, nadamy nazwę (parametr name) plik1. Po- zwoli ona na zidentyfikowanie danych z tego pola w skrypcie PHP. Kod przykładowego formularza został zaprezentowany na listingu 3.7. Gdy zostanie wczytany do przeglą- darki, będzie miał natomiast postać widoczną na rysunku 3.5. Listing 3.7. Formularz HTML służący do wysyłania plików <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Wysyłanie plików</title> </head> <body> <form name = "formularz1" enctype = "multipart/form-data" action = "http://127.0.0.1/upload.php" method = "POST"> Nazwa pliku: <input type = "file" name = "plik1" size = "30" value = ""> <input type = "submit" name = "wyslij" value = "Wyślij plik"> </form> </body> </html> Rysunek 3.5. Wygląd formularza do wysyłania plików Plik wysłany za pomocą takiego formularza do serwera zostanie zapisany w katalogu służącym do przechowywania plików tymczasowych. Katalog ten możemy ustalić sa- modzielnie, ustawiając w pliku php.ini opcję konfiguracyjną upload_tmp_dir. W sys- temie Linux będzie to np.:
  • 15. 156 Rozdział 3. ♦ Współpraca z przeglądarką upload_tmp_dir = /var/www/upload a w systemie Windows: upload_tmp_dir = c:wwwupload Skrypt odbierający dane uzyska dostęp do globalnej tablicy $_FILES zawierającej infor- macje niezbędne do ich dalszego przetworzenia. Jest to tablica asocjacyjna, w której plik identyfikowany jest przez nazwę pola input (typu file) z formularza WWW. W przy- padku formularza z listingu 3.7 ta nazwa to plik1. Pod tym indeksem znajduje się 5 in- nych, które pozwalają na odczytanie informacji o pliku. Są to: $_FILES['plik1']['name'] — oryginalna nazwa pliku (którą miał on na komputerze użytkownika). $_FILES['plik1']['type'] — typ MIME pliku (o ile przeglądarka dostarczyła tę informację). $_FILES['plik1']['size'] — wielkość pliku w bajtach. $_FILES['plik1']['tmp_name'] — nazwa tymczasowa, pod jaką plik został zapisany na serwerze. $_FILES['plik1']['error'] — status operacji, kod błędu. Pole error (dostępne w PHP od wersji 4.2.0) może przyjmować jedną z wartości: UPLOAD_ERR_OK — brak błędu, operacja została zakończona sukcesem. UPLOAD_ERR_INI_SIZE — wielkość pliku przekracza wielkość maksymalną zdefiniowaną w pliku php.ini (zmienna upload_max_filesize). UPLOAD_ERR_FORM_SIZE — rozmiar pliku przekracza wielkość maksymalną zdefiniowaną w formularzu HTML. UPLOAD_ERR_PARTIAL — została odebrana jedynie część pliku. UPLOAD_ERR_NO_FILE — plik nie został pobrany. Plik wysłany do serwera jest umieszczany w katalogu tymczasowym i należy go przenieść do właściwej lokalizacji docelowej (np. katalogu, który przeznaczyliśmy do przechowywa- nia tego typu danych). Wykorzystuje się w tym celu funkcję move_uploaded_file, która dodatkowo ze względów bezpieczeństwa oprócz zmiany lokalizacji pliku wykonuje sprawdzenie, czy na pewno został on wysłany do serwera za pomocą metody HTTP_POST. Powyższe informacje w zupełności wystarczą do napisania skryptu odbierającego pliki wysyłane z przeglądarki i zapisującego je w wybranym katalogu. Został on przedsta- wiony na listingu 3.8 i należy go zapisać pod nazwą upload.php w katalogu głównym serwera WWW. Listing 3.8. Skrypt odbierający pliki wysłane do serwera <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>
  • 16. Lekcja 10. Odbieranie danych z przeglądarki 157 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Wynik odbioru pliku</title> </head> <body> <p> <?php $uploaddir = './'; if($_FILES['plik1']['error'] == UPLOAD_ERR_OK){ $new_name = $uploaddir.$_FILES['plik1']['name']; $temp_name = $_FILES['plik1']['tmp_name']; if(move_uploaded_file($temp_name, $new_name)){ echo "Plik został załadowany.n"; } else{ echo "Nieprawidłowy plikn"; } } else{ echo("Wystąpił błąd: "); switch($_FILES['plik1']['error']){ case UPLOAD_ERR_INI_SIZE : case UPLOAD_ERR_FORM_SIZE : echo("Przekroczony maksymalny rozmiar pliku!n"); break; case UPLOAD_ERR_PARTIAL : echo("Odebrano tylko część pliku!n"); break; case UPLOAD_ERR_NO_FILE : echo("Plik nie został pobrany!n"); break; default : echo("Nieznany typ błędu!n"); } } ?> </p> </body> </html> Katalog, w którym mają być zapisywane odbierane pliki, jest wskazywany przez zmien- ną $uploaddir. Oczywiście musi on istnieć w systemie plików serwera. W przykładzie został zastosowany ciąg ./, co oznacza katalog bieżący (katalog, w którym znajduje się skrypt upload.php). Należy również pamiętać, że musi on mieć odpowiednio ustawione prawa dostępu (aparat wykonawczy PHP musi mieć możliwość zapisu). Pierwszą czynnością wykonywaną w skrypcie jest sprawdzenie, czy pole error tablicy $_FILES zawiera wartość UPLOAD_ERR_OK, a zatem czy plik został odebrany bez pro- blemów. Jeśli tak, z tablicy $_FILES jest odczytywana oryginalna nazwa pliku oraz nazwa tymczasowa, pod którą został on zapisany na serwerze. Do nazwy oryginalnej dołączana jest nazwa katalogu zawarta w zmiennej $uploaddir i całość jest zapisywana w zmiennej $new_name. Nazwa tymczasowa jest z kolei zapisywana w zmiennej $temp_ name. Zmienne te (zostały one wprowadzone do skryptu w celu zwiększenia przejrzy- stości kodu) są następnie wykorzystywane jako parametry funkcji move_uploaded_file. Jeśli wykonanie tej funkcji zakończy się sukcesem i plik zostanie przeniesiony pod
  • 17. 158 Rozdział 3. ♦ Współpraca z przeglądarką oryginalną nazwą do katalogu wskazywanego przez $uploaddir, funkcja zwróci wartość true, a w przypadku przeciwnym — false. W zależności od tej wartości na ekranie jest wyświetlany odpowiedni komunikat. Jeżeli jednak wartość pola error tablicy $_FILES jest różna od UPLOAD_ERR_OK, wykony- wana jest instrukcja switch pozwalająca na stwierdzenie, jakiego typu błąd wystąpił. Badane są wszystkie pozostałe możliwości stanu pola error i wyświetlany jest odpo- wiedni komunikat. Następnie ma miejsce sprawdzenie, czy plik w ogóle został wysłany, czy jego wielkość nie przekroczyła maksymalnego rozmiaru oraz czy został on załado- wany w całości. Klauzula default instrukcji switch zabezpiecza nas przed sytuacją, kiedy w polu error znalazłby się nieznany kod błędu (np. wprowadzony w kolejnych wersjach PHP). Dzięki niej również w takiej sytuacji zostanie wyświetlona odpo- wiednia informacja. Ćwiczenia do samodzielnego wykonania Ćwiczenie 10.1. Napisz skrypt obliczający pierwiastki równania kwadratowego o pa- rametrach wprowadzanych w formularzu HTML. Ćwiczenie 10.2. Napisz skrypt umożliwiający wykonywanie czterech podstawowych działań arytmetycznych na dwóch argumentach. Wartości argumentów mają być wpro- wadzane poprzez pola tekstowe formularza, a wybór działania ma następować poprzez pola wyboru typu radio. Ćwiczenie 10.3. Napisz skrypt wykonujący konwersję tekstu wprowadzonego w polu tekstowym formularza ze standardu Windows-1250 do ISO-8859-2. Ćwiczenie 10.4. Napisz skrypt umożliwiający użytkownikowi wysłanie pliku do ser- wera, umieszczający ten plik w wybranym katalogu i zwracający odnośnik do niego tak, żeby było możliwe jego pobranie z poziomu przeglądarki.