php, mysql i apache dla każdego. wydanie ii

32
Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: [email protected] PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ IDZ DO IDZ DO ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG KATALOG KSI¥¯EK KATALOG KSI¥¯EK TWÓJ KOSZYK TWÓJ KOSZYK CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK ZAMÓW CENNI K CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE SPIS TRECI SPIS TRECI DODAJ DO KOSZYKA DODAJ DO KOSZYKA KATALOG ONLINE KATALOG ONLINE PHP, MySQL i Apache dla ka¿dego. Wydanie II Stwórz w³asn¹ dynamiczn¹ witrynê WWW • Zainstaluj i skonfiguruj PHP oraz serwery Apache i MySQL • Naucz siê zasad programowania w PHP • Po³¹cz aplikacjê WWW z baz¹ danych • Poznaj sekrety zabezpieczania i optymalizowania aplikacji sieciowych Dynamiczne witryny WWW spotykamy w sieci coraz czêciej. Po mechanizmy bazodanowe i technologie skryptowe dzia³aj¹ce po stronie serwera siêgaj¹ ju¿ nie tylko twórcy portali i sklepów internetowych, ale tak¿e ci, którym jeszcze do niedawna wystarcza³ zwyk³y, statyczny HTML. Wród technologii wykorzystywanych do tworzenia dynamicznych stron WWW od dawna prym wiedzie duet PHP i MySQL, instalowany na serwerach WWW pracuj¹cych pod kontrol¹ Apache’a. Te w³anie narzêdzia s¹ najczêciej wykorzystywane do tworzenia galerii, forów dyskusyjnych, gie³d og³oszeniowych i wielu innych aplikacji WWW. „PHP, MySQL i Apache dla ka¿dego. Wydanie II” to podrêcznik dla wszystkich, którzy chc¹ poznaæ zasady tworzenia dynamicznych witryn WWW z wykorzystaniem najpopularniejszych obecnie technologii. Ksi¹¿ka opisuje proces instalacji i konfiguracji Apache’a, MySQL-a i PHP na serwerze oraz na stacji roboczej, elementy jêzyka PHP oraz zasady stosowania jêzyka SQL. Na praktycznych przyk³adach przedstawia mo¿liwoci wykorzystywania PHP i bazy danych do tworzenia elementów dynamicznych stron WWW oraz ca³ych projektów. Czytaj¹c j¹, nauczysz siê zabezpieczaæ aplikacje WWW oraz poprawiaæ wydajnoæ ich dzia³ania. • Instalowanie i konfigurowanie narzêdzi • Programowanie w jêzyku PHP • Funkcje, tablice i obiekty • Przetwarzanie danych z formularzy • Obs³uga sesji oraz systemu plików • Dynamiczne generowanie grafiki • Integracja PHP z MySQL • Operacje na danych w tabelach i jêzyk SQL • Tworzenie prostych projektów aplikacji WWW • Monitorowanie pracy aplikacji • Mechanizmy bezpieczeñstwa i uwierzytelniania u¿ytkowników • Poprawa wydajnoci aplikacji Autor: Julie C. Meloni T³umaczenie: Adam Byrtek (wprowadzenie, rozdz. 1 – 14), Jaros³aw Dobrzañski (rozdz. 15 – 32) ISBN: 83-7361-877-5 Tytu³ orygina³u: Sams Teach Yourself PHP, MySQL and Apache All in One, 2nd Edition Format: B5, stron: 588

Upload: wydawnictwo-helion

Post on 26-May-2015

1.466 views

Category:

Documents


0 download

DESCRIPTION

Stwórz własną dynamiczną witrynę WWW. * Zainstaluj i skonfiguruj PHP oraz serwery Apache i MySQL* Naucz się zasad programowania w PHP* Połącz aplikację WWW z bazą danych* Poznaj sekrety zabezpieczania i optymalizowania aplikacji sieciowych Dynamiczne witryny WWW spotykamy w sieci coraz częściej. Po mechanizmy bazodanowe i technologie skryptowe działające po stronie serwera sięgają już nie tylko twórcy portali i sklepów internetowych, ale także ci, którym jeszcze do niedawna wystarczał zwykły, statyczny HTML. Wśród technologii wykorzystywanych do tworzenia dynamicznych stron WWW od dawna prym wiedzie duet PHP i MySQL, instalowany na serwerach WWW pracujących pod kontrolą Apache’a. Te właśnie narzędzia są najczęściej wykorzystywane do tworzenia galerii, forów dyskusyjnych, giełd ogłoszeniowych i wielu innych aplikacji WWW. "PHP, MySQL i Apache dla każdego. Wydanie II" to podręcznik dla wszystkich, którzy chcą poznać zasady tworzenia dynamicznych witryn WWW z wykorzystaniem najpopularniejszych obecnie technologii. Książka opisuje proces instalacji i konfiguracji Apache’a, MySQL-a i PHP na serwerze oraz na stacji roboczej, elementy języka PHP oraz zasady stosowania języka SQL. Na praktycznych przykładach przedstawia możliwości wykorzystywania PHP i bazy danych do tworzenia elementów dynamicznych stron WWW oraz całych projektów. Czytając ją, nauczysz się zabezpieczać aplikacje WWW oraz poprawiać wydajność ich działania. * Instalowanie i konfigurowanie narzędzi* Programowanie w języku PHP* Funkcje, tablice i obiekty* Przetwarzanie danych z formularzy* Obsługa sesji oraz systemu plików* Dynamiczne generowanie grafiki* Integracja PHP z MySQL* Operacje na danych w tabelach i język SQL* Tworzenie prostych projektów aplikacji WWW* Monitorowanie pracy aplikacji* Mechanizmy bezpieczeństwa i uwierzytelniania użytkowników* Poprawa wydajności aplikacji

TRANSCRIPT

Page 1: PHP, MySQL i Apache dla każdego. Wydanie II

Wydawnictwo Helion

ul. Chopina 6

44-100 Gliwice

tel. (32)230-98-63

e-mail: [email protected]

PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£

IDZ DOIDZ DO

ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EKKATALOG KSI¥¯EK

TWÓJ KOSZYKTWÓJ KOSZYK

CENNIK I INFORMACJECENNIK I INFORMACJE

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW CENNIKZAMÓW CENNIK

CZYTELNIACZYTELNIA

FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE

SPIS TRE�CISPIS TRE�CI

DODAJ DO KOSZYKADODAJ DO KOSZYKA

KATALOG ONLINEKATALOG ONLINE

PHP, MySQL i Apachedla ka¿dego. Wydanie II

Stwórz w³asn¹ dynamiczn¹ witrynê WWW

• Zainstaluj i skonfiguruj PHP oraz serwery Apache i MySQL

• Naucz siê zasad programowania w PHP

• Po³¹cz aplikacjê WWW z baz¹ danych

• Poznaj sekrety zabezpieczania i optymalizowania aplikacji sieciowych

Dynamiczne witryny WWW spotykamy w sieci coraz czê�ciej. Po mechanizmy

bazodanowe i technologie skryptowe dzia³aj¹ce po stronie serwera siêgaj¹ ju¿ nie

tylko twórcy portali i sklepów internetowych, ale tak¿e ci, którym jeszcze do niedawna

wystarcza³ zwyk³y, statyczny HTML. W�ród technologii wykorzystywanych do

tworzenia dynamicznych stron WWW od dawna prym wiedzie duet PHP i MySQL,

instalowany na serwerach WWW pracuj¹cych pod kontrol¹ Apache’a. Te w³a�nie

narzêdzia s¹ najczê�ciej wykorzystywane do tworzenia galerii, forów dyskusyjnych,

gie³d og³oszeniowych i wielu innych aplikacji WWW.

„PHP, MySQL i Apache dla ka¿dego. Wydanie II” to podrêcznik dla wszystkich,

którzy chc¹ poznaæ zasady tworzenia dynamicznych witryn WWW z wykorzystaniem

najpopularniejszych obecnie technologii. Ksi¹¿ka opisuje proces instalacji i konfiguracji

Apache’a, MySQL-a i PHP na serwerze oraz na stacji roboczej, elementy jêzyka PHP

oraz zasady stosowania jêzyka SQL. Na praktycznych przyk³adach przedstawia

mo¿liwo�ci wykorzystywania PHP i bazy danych do tworzenia elementów

dynamicznych stron WWW oraz ca³ych projektów. Czytaj¹c j¹, nauczysz siê

zabezpieczaæ aplikacje WWW oraz poprawiaæ wydajno�æ ich dzia³ania.

• Instalowanie i konfigurowanie narzêdzi

• Programowanie w jêzyku PHP

• Funkcje, tablice i obiekty

• Przetwarzanie danych z formularzy

• Obs³uga sesji oraz systemu plików

• Dynamiczne generowanie grafiki

• Integracja PHP z MySQL

• Operacje na danych w tabelach i jêzyk SQL

• Tworzenie prostych projektów aplikacji WWW

• Monitorowanie pracy aplikacji

• Mechanizmy bezpieczeñstwa i uwierzytelniania u¿ytkowników

• Poprawa wydajno�ci aplikacji

Autor: Julie C. Meloni

T³umaczenie: Adam Byrtek (wprowadzenie, rozdz. 1 – 14),

Jaros³aw Dobrzañski (rozdz. 15 – 32)

ISBN: 83-7361-877-5

Tytu³ orygina³u: Sams Teach Yourself PHP,

MySQL and Apache All in One, 2nd Edition

Format: B5, stron: 588

Page 2: PHP, MySQL i Apache dla każdego. Wydanie II

Spis treści

O Autorach ..................................................................................... 15

Podziękowania ................................................................................ 17

Wprowadzenie ................................................................................ 19

Część I Podstawy ......................................................................23

Rozdział 1. Szybka instalacja ............................................................................ 25Instalacja w systemie Linux/Unix .................................................................................. 25

Instalacja MySQL .................................................................................................... 26Instalacja Apache ..................................................................................................... 27Instalacja PHP .......................................................................................................... 27

Instalacja w systemie Windows ...................................................................................... 29Instalacja MySQL .................................................................................................... 29Instalacja Apache ..................................................................................................... 30Instalacja PHP .......................................................................................................... 32

Rozwiązywanie problemów ........................................................................................... 34

Rozdział 2. Instalacja i konfiguracja MySQL ...................................................... 37Wersja aktualna i przyszłe wersje MySQL ................................................................... 37Jak zdobyć MySQL ........................................................................................................ 38Instalacja MySQL w systemie Linux/Unix .................................................................... 38Instalacja MySQL w systemie Windows ........................................................................ 39Rozwiązywanie problemów instalacji ............................................................................ 43Podstawy bezpieczeństwa .............................................................................................. 44

Uruchamianie MySQL ............................................................................................. 45Zabezpieczanie połączenia MySQL ......................................................................... 45

Wprowadzenie do systemu uprawnień MySQL ............................................................. 46Dwustopniowa autoryzacja ...................................................................................... 47

Korzystanie z systemu uprawnień .................................................................................. 48Dodawanie użytkowników ....................................................................................... 48Usuwanie uprawnień ................................................................................................ 50

Podsumowanie ............................................................................................................... 51Pytania i odpowiedzi ...................................................................................................... 51Warsztaty ........................................................................................................................ 52

Test ........................................................................................................................... 52Odpowiedzi .............................................................................................................. 52Ćwiczenia ................................................................................................................. 52

Page 3: PHP, MySQL i Apache dla każdego. Wydanie II

4 PHP, MySQL i Apache dla każdego

Rozdział 3. Instalacja i konfiguracja Apache ..................................................... 53Wersja aktualna i przyszłe wersje Apache ...................................................................... 53Wybór sposobu instalacji ............................................................................................... 54

Kompilacja kodu źródłowego .................................................................................. 54Instalacja dystrybucji binarnej ................................................................................. 54

Instalacja Apache w systemie Linux/Unix ..................................................................... 55Pobieranie kodu źródłowego .................................................................................... 55Rozpakowanie kodu źródłowego ............................................................................. 55Przygotowania do kompilacji Apache ...................................................................... 56Budowanie i instalacja Apache ................................................................................ 57

Instalacja Apache w systemie Windows ......................................................................... 57Format pliku konfiguracyjnego Apache ......................................................................... 60

Dyrektywy ................................................................................................................ 60Pojemniki ................................................................................................................. 62Instrukcje warunkowe .............................................................................................. 63ServerRoot ............................................................................................................... 64Pliki konfiguracyjne dla katalogów .......................................................................... 64

Pliki dziennika Apache ................................................................................................... 65access_log ................................................................................................................ 65error_log ................................................................................................................... 66Pozostałe pliki .......................................................................................................... 66

Polecenia związane z Apache ......................................................................................... 66Serwer Apache ......................................................................................................... 66Skrypt kontrolny Apache ......................................................................................... 68

Pierwsze uruchomienie Apache ...................................................................................... 68Sprawdzanie pliku konfiguracyjnego ....................................................................... 68Uruchamianie Apache .............................................................................................. 69

Rozwiązywanie problemów ........................................................................................... 69Inny serwer WWW .................................................................................................. 69Brak uprawnień do portu .......................................................................................... 70Dostęp zabroniony ................................................................................................... 70Złe parametry grupy ................................................................................................. 71

Podsumowanie ............................................................................................................... 71Pytania i odpowiedzi ...................................................................................................... 71Warsztaty ........................................................................................................................ 72

Test ........................................................................................................................... 72Odpowiedzi .............................................................................................................. 72Ćwiczenia ................................................................................................................. 72

Rozdział 4. Instalacja i konfiguracja PHP .......................................................... 73Wersja aktualna i przyszłe wersje PHP .......................................................................... 73Kompilacja PHP w systemie Linux/Unix ....................................................................... 74

Dodatkowe opcje konfiguracyjne ............................................................................. 75Integracja PHP z Apache w systemie Linux/Unix ................................................... 75

Instalacja PHP w systemie Windows ............................................................................. 76Integracja PHP z Apache w systemie Windows ....................................................... 76

Plik php.ini ..................................................................................................................... 77Testowanie ..................................................................................................................... 78Gdzie znaleźć pomoc ...................................................................................................... 78Podstawy skryptów PHP ................................................................................................ 80

Początek i koniec bloku instrukcji PHP ................................................................... 81Instrukcja echo i funkcja print() ............................................................................... 82Łączenie HTML i PHP ............................................................................................. 83Komentarze w kodzie PHP ...................................................................................... 83

Podsumowanie ............................................................................................................... 85Pytania i odpowiedzi ...................................................................................................... 85

Page 4: PHP, MySQL i Apache dla każdego. Wydanie II

Spis treści 5

Warsztaty ........................................................................................................................ 86Test ........................................................................................................................... 86Odpowiedzi .............................................................................................................. 86Ćwiczenia ................................................................................................................. 86

Część II Struktura języka PHP ....................................................87

Rozdział 5. Podstawowe elementy języka PHP .................................................. 89Zmienne .......................................................................................................................... 89

Zmienne globalne i superglobalne ........................................................................... 91Typy danych ................................................................................................................... 92

Zmiana typu za pomocą settype() ............................................................................. 94Zmiana typu poprzez rzutowanie ............................................................................. 95Po co sprawdzać typ? ............................................................................................... 97

Operatory i wyrażenia .................................................................................................... 97Operator przypisania ................................................................................................ 98Operatory arytmetyczne ........................................................................................... 98Operator konkatenacji .............................................................................................. 98Złożony operator przypisania ................................................................................... 99Inkrementacja i dekrementacja wartości zmiennej całkowitej ............................... 100Operatory porównania ............................................................................................ 101Tworzenie złożonych wyrażeń za pomocą operatorów logicznych ........................ 102Kolejność operatorów ............................................................................................ 103

Stałe .............................................................................................................................. 104Stałe predefiniowane .............................................................................................. 105

Podsumowanie ............................................................................................................. 105Pytania i odpowiedzi .................................................................................................... 105Warsztaty ...................................................................................................................... 106

Test ......................................................................................................................... 106Odpowiedzi ............................................................................................................ 107Ćwiczenia ............................................................................................................... 107

Rozdział 6. Sterowanie przepływem w PHP ...................................................... 109Zmiana przepływu ........................................................................................................ 110

Instrukcja if ............................................................................................................ 110Użycie klauzuli else w instrukcji if ........................................................................ 111Użycie klauzuli else if w instrukcji if ..................................................................... 111Instrukcja switch .................................................................................................... 113Operator ? ............................................................................................................... 114

Pętle .............................................................................................................................. 115Instrukcja while ...................................................................................................... 115Instrukcja do…while .............................................................................................. 116Instrukcja for .......................................................................................................... 117Przerywanie pętli za pomocą instrukcji break ........................................................ 118Pomijanie iteracji za pomocą instrukcji continue ................................................... 120Zagnieżdżone pętle ................................................................................................ 121

Bloki kodu PHP ............................................................................................................ 122Podsumowanie ............................................................................................................. 124Pytania i odpowiedzi .................................................................................................... 124Warsztaty ...................................................................................................................... 124

Test ......................................................................................................................... 125Odpowiedzi ............................................................................................................ 125Ćwiczenie ............................................................................................................... 126

Page 5: PHP, MySQL i Apache dla każdego. Wydanie II

6 PHP, MySQL i Apache dla każdego

Rozdział 7. Funkcje ........................................................................................ 127Czym jest funkcja? ....................................................................................................... 127Wywoływanie funkcji .................................................................................................. 128Definiowanie funkcji .................................................................................................... 129Zwracanie wartości przez funkcje użytkownika ........................................................... 131Zasięg zmiennych ......................................................................................................... 132

Wywoływanie zmiennych za pomocą instrukcji global ......................................... 133Przechowywanie wartości pomiędzy wywołaniami funkcji za pomocą instrukcji static .......135Więcej o argumentach .................................................................................................. 137

Przypisywanie zmiennym wartości domyślnych .................................................... 137Przekazywanie zmiennych przez referencję ........................................................... 139

Sprawdzanie istnienia funkcji ....................................................................................... 140Podsumowanie ............................................................................................................. 142Pytania i odpowiedzi .................................................................................................... 142Warsztaty ...................................................................................................................... 142

Test ......................................................................................................................... 142Odpowiedzi ............................................................................................................ 143Ćwiczenie ............................................................................................................... 143

Rozdział 8. Tablice i obiekty ........................................................................... 145Czym jest tablica? ........................................................................................................ 145Tworzenie tablic ........................................................................................................... 146

Tworzenie tablic asocjacyjnych ............................................................................. 147Tworzenie tablic wielowymiarowych .................................................................... 147

Niektóre funkcje operujące na tablicach .......................................................................... 149Tworzenie obiektu ........................................................................................................ 151

Własności obiektów ............................................................................................... 152Metody obiektów ................................................................................................... 153Konstruktor ............................................................................................................ 155

Dziedziczenie ............................................................................................................... 155Podsumowanie ............................................................................................................. 157Pytania i odpowiedzi .................................................................................................... 157Warsztaty ...................................................................................................................... 157

Test ......................................................................................................................... 157Odpowiedzi ............................................................................................................ 158Ćwiczenia ............................................................................................................... 158

Część III Pierwsze kroki z kodem ...............................................159

Rozdział 9. Ciągi znaków, data i czas .............................................................. 161Formatowanie ciągów znaków ..................................................................................... 162

Funkcja printf() ...................................................................................................... 162Zamiana argumentów ............................................................................................. 168Przechowywanie sformatowanych ciągów znaków ............................................... 169

Analizowanie ciągów znaków ...................................................................................... 170Uwaga na temat indeksowania ciągów znaków ..................................................... 170Sprawdzanie długości ciągu za pomocą funkcji strlen() ........................................ 170Znajdowanie podciągu za pomocą strstr() .............................................................. 171Określanie pozycji podciągu za pomocą funkcji strpos() ....................................... 171Pobieranie części ciągu za pomocą funkcji substr() ............................................... 172Podział ciągu na słowa za pomocą funkcji strtok() ................................................ 172

Operacje na ciągach znaków ........................................................................................ 174Oczyszczanie ciągu za pomocą funkcji trim(), ltrim(), rtrim() i strip_tags() .......... 174Zmiana fragmentu ciągu za pomocą funkcji substr_replace() ................................ 175Zamiana podciągów za pomocą funkcji str_replace() ............................................ 176

Page 6: PHP, MySQL i Apache dla każdego. Wydanie II

Spis treści 7

Zmiana wielkości liter ............................................................................................ 176Zawijanie tekstu za pomocą funkcji wordwrap() i nl2br() ..................................... 177Dzielenie ciągów za pomocą funkcji explode() ...................................................... 179

Funkcje operujące na dacie i czasie .............................................................................. 179Pobieranie bieżącej daty za pomocą funkcji time() ................................................ 179Konwersja znacznika czasu za pomocą funkcji getdate() ....................................... 180Formatowanie znacznika czasu za pomocą funkcji date() ...................................... 181Tworzenie znacznika czasu za pomocą funkcji mktime() ...................................... 183Weryfikacja daty za pomocą funkcji checkdate() ................................................... 184

Podsumowanie ............................................................................................................. 185Pytania i odpowiedzi .................................................................................................... 185Warsztaty ...................................................................................................................... 185

Test ......................................................................................................................... 185Odpowiedzi ............................................................................................................ 186Ćwiczenia ............................................................................................................... 186

Rozdział 10. Formularze ................................................................................... 189Tworzenie prostego formularza .................................................................................... 189Przekazywanie informacji w tablicach ......................................................................... 191Łączenie kodu HTML i PHP w jednym skrypcie ......................................................... 194Zapisywanie informacji o stanie w ukrytym polu ......................................................... 196Przekierowania ............................................................................................................. 197Wysyłanie poczty elektronicznej .................................................................................. 199

Konfiguracja systemu ............................................................................................. 199Tworzenie formularza ............................................................................................ 200Skrypt wysyłający wiadomość ............................................................................... 201Formatowanie wiadomości za pomocą HTML ...................................................... 202

Przesyłanie plików ....................................................................................................... 204Tworzenie formularza wysyłającego plik ............................................................... 204Skrypt obsługujący przesłany plik .......................................................................... 206

Podsumowanie ............................................................................................................. 207Warsztaty ...................................................................................................................... 208

Test ......................................................................................................................... 208Odpowiedzi ............................................................................................................ 208Ćwiczenia ............................................................................................................... 208

Rozdział 11. Cookies i sesje ............................................................................. 209Wprowadzenie do cookies ............................................................................................ 209

Anatomia cookie .................................................................................................... 210Tworzenie cookie ......................................................................................................... 211

Usuwanie cookie .................................................................................................... 212Wprowadzenie do sesji ................................................................................................. 212Otwieranie sesji ............................................................................................................ 213Zmienne sesyjne ........................................................................................................... 214Przekazywanie identyfikatora sesji w adresie ............................................................... 218Niszczenie sesji i usuwanie zmiennych ........................................................................ 218Zastosowania sesji ........................................................................................................ 219

Obsługa zarejestrowanych użytkowników ............................................................. 219Obsługa ustawień użytkownika .............................................................................. 219

Podsumowanie ............................................................................................................. 220Pytania i odpowiedzi .................................................................................................... 220Warsztaty ...................................................................................................................... 220

Test ......................................................................................................................... 220Odpowiedzi ............................................................................................................ 221Ćwiczenie ............................................................................................................... 221

Page 7: PHP, MySQL i Apache dla każdego. Wydanie II

8 PHP, MySQL i Apache dla każdego

Rozdział 12. Pliki i katalogi .............................................................................. 223Dołączanie plików za pomocą funkcji include() .......................................................... 223

Zwracanie wartości z dołączonego dokumentu ...................................................... 224Instrukcja include() wewnątrz struktur sterujących ................................................ 225Użycie include_once() ........................................................................................... 226Dyrektywa include_path ........................................................................................ 226

Weryfikacja plików ...................................................................................................... 227Sprawdzanie, czy dany plik istnieje, za pomocą funkcji file_exists() .................... 227Plik czy katalog? .................................................................................................... 228Sprawdzanie uprawnień pliku ................................................................................ 228Sprawdzanie rozmiaru pliku za pomocą funkcji filesize() ..................................... 229Pobieranie informacji o datach związanych z plikiem ........................................... 229Funkcja wyświetlająca informacje o pliku ............................................................. 230

Tworzenie i usuwanie plików ....................................................................................... 231Otwieranie plików do zapisu, odczytu i dopisywania ................................................... 232Odczytywanie danych z pliku ...................................................................................... 233

Odczytywanie wierszy za pomocą funkcji fgets() i feof() ...................................... 233Odczytywanie określonej ilości danych za pomocą funkcji fread() ....................... 234Odczytywanie kolejnych znaków za pomocą funkcji fgetc() ................................. 236

Zapisywanie i dopisywanie danych do pliku ................................................................ 237Zapisywanie danych do pliku za pomocą funkcji fwrite() i fputs() ........................ 237Blokowanie plików za pomocą funkcji flock() ...................................................... 238

Operacje na katalogach ................................................................................................. 239Tworzenie katalogów za pomocą funkcji mkdir() .................................................. 239Usuwanie katalogu za pomocą rmdir() ................................................................... 240Otwieranie katalogu za pomocą funkcji opendir() ................................................. 240Odczytywanie zawartości katalogu za pomocą funkcji readdir() ........................... 240

Podsumowanie ............................................................................................................. 242Pytania i odpowiedzi .................................................................................................... 242Warsztaty ...................................................................................................................... 242

Test ......................................................................................................................... 242Odpowiedzi ............................................................................................................ 243Ćwiczenia ............................................................................................................... 243

Rozdział 13. Środowisko serwera ...................................................................... 245Otwieranie potoku za pomocą funkcji popen() ............................................................. 245Przekazywanie poleceń do powłoki za pomocą funkcji exec() ..................................... 247Wykonywanie poleceń za pomocą funkcji system() lub passthru() .............................. 249Podsumowanie ............................................................................................................. 250Pytania i odpowiedzi .................................................................................................... 250Warsztaty ...................................................................................................................... 251

Test ......................................................................................................................... 251Odpowiedzi ............................................................................................................ 251

Rozdział 14. Obrazki ......................................................................................... 253Proces powstawania obrazka ........................................................................................ 253

Kilka słów o kolorze .............................................................................................. 253Konieczne zmiany w PHP ............................................................................................ 254

Pobieranie dodatkowych bibliotek ......................................................................... 254Rysowanie nowego obrazka ......................................................................................... 255

Rysowanie kształtów i linii .................................................................................... 255Wypełnianie kształtów kolorem ............................................................................. 257

Rysowanie wykresów ................................................................................................... 258Modyfikacja istniejących obrazków ............................................................................. 262Tworzenie obrazków na podstawie danych przesłanych przez użytkownika ............... 264Podsumowanie ............................................................................................................. 268

Page 8: PHP, MySQL i Apache dla każdego. Wydanie II

Spis treści 9

Pytania i odpowiedzi .................................................................................................... 268Warsztaty ...................................................................................................................... 268

Test ......................................................................................................................... 269Odpowiedzi ............................................................................................................ 269Ćwiczenie ............................................................................................................... 269

Część IV Integracja PHP i MySQL ..............................................271

Rozdział 15. Tajniki procesu projektowania bazy danych .................................... 273Rola dobrego projektu bazy danych ............................................................................. 273Typy relacji między tabelami ....................................................................................... 274

Relacje jeden do jednego ....................................................................................... 275Relacje jeden do wielu ........................................................................................... 275Relacje wiele do wielu ........................................................................................... 276

Normalizacja ................................................................................................................ 277Problemy z tabelą prostą ........................................................................................ 278Pierwsza postać normalna ...................................................................................... 278Druga postać normalna .......................................................................................... 279Trzecia postać normalna ......................................................................................... 280

Postępowanie zgodnie z procesem projektowania ........................................................ 280Podsumowanie ............................................................................................................. 281Pytania i odpowiedzi .................................................................................................... 282Warsztaty ...................................................................................................................... 282

Test ......................................................................................................................... 282Odpowiedzi ............................................................................................................ 282Ćwiczenie ............................................................................................................... 282

Rozdział 16. Podstawowe polecenia SQL .......................................................... 283Typy danych w MySQL ............................................................................................... 284

Liczbowe typy danych ........................................................................................... 284Typy czasu i daty ................................................................................................... 285Typy łańcuchowe ................................................................................................... 286

Składnia tworzenia tabel .............................................................................................. 287Używanie polecenia INSERT ....................................................................................... 288

Bliższe spojrzenie na INSERT ............................................................................... 288Stosowanie polecenia SELECT .................................................................................... 290

Porządkowanie wyników zwracanych przez SELECT ........................................... 291Ograniczanie wyników ........................................................................................... 291

Używanie WHERE w zapytaniach ............................................................................... 292Stosowanie operatorów w klauzuli WHERE .......................................................... 293Porównywanie łańcuchów za pomocą LIKE .......................................................... 294

Selekcja z kilku tabel .................................................................................................... 294Używanie JOIN ...................................................................................................... 296

Modyfikowanie rekordów za pomocą polecenia UPDATE .......................................... 298Warunkowe instrukcje UPDATE ........................................................................... 300Stosowanie bieżących wartości kolumn z UPDATE .............................................. 300

Używanie polecenia REPLACE ................................................................................... 301Stosowanie polecenia DELETE ................................................................................... 302

Warunkowa instrukcja DELETE ............................................................................ 303Często stosowane funkcje MySQL operujące na ciągach tekstowych .......................... 304

Funkcje długości i konkatenacji ............................................................................. 304Funkcje przycinające i dopełniające ....................................................................... 306Funkcje lokalizacji i pozycji ................................................................................... 308Funkcje operujące na podciągach ........................................................................... 308Funkcje modyfikujące ciągi ................................................................................... 309

Page 9: PHP, MySQL i Apache dla każdego. Wydanie II

10 PHP, MySQL i Apache dla każdego

Korzystanie z funkcji daty i czasu w MySQL .............................................................. 310Operowanie na dniach ............................................................................................ 311Operowanie na miesiącach i latach ........................................................................ 313Operowanie na tygodniach ..................................................................................... 314Operowanie na godzinach, minutach i sekundach .................................................. 315Formatowanie daty i czasu w MySQL ................................................................... 316Działania arytmetyczne na datach w MySQL ........................................................ 318Funkcje specjalne i możliwości w zakresie konwersji ........................................... 320

Podsumowanie ............................................................................................................. 322Pytania i odpowiedzi .................................................................................................... 323Warsztaty ...................................................................................................................... 324

Test ......................................................................................................................... 324Odpowiedzi ............................................................................................................ 325Ćwiczenie ............................................................................................................... 325

Rozdział 17. Interakcja z MySQL z poziomu PHP ................................................ 327Łączenie się z MySQL poprzez PHP ............................................................................ 327

Używanie mysql_connect() .................................................................................... 328Wykonywanie zapytań ........................................................................................... 329Odbieranie komunikatów o błędach ....................................................................... 330

Operowanie na danych z bazy MySQL ........................................................................ 331Wstawianie danych z poziomu PHP ...................................................................... 331Pobieranie danych z bazy w PHP ........................................................................... 335Pozostałe funkcje MySQL w PHP ......................................................................... 336

Podsumowanie ............................................................................................................. 337Warsztaty ...................................................................................................................... 337

Test ......................................................................................................................... 337Odpowiedzi ............................................................................................................ 337

Część V Proste projekty ...........................................................339

Rozdział 18. Zarządzanie prostą listą mailingową .............................................. 341Opracowywanie mechanizmu subskrypcji ................................................................... 341

Tworzenie tabeli subskrybentów ............................................................................ 342Tworzenie formularza subskrypcji ......................................................................... 342

Budowa mechanizmu mailingu .................................................................................... 348Podsumowanie ............................................................................................................. 351Pytania i odpowiedzi .................................................................................................... 352Warsztaty ...................................................................................................................... 352

Test ......................................................................................................................... 352Odpowiedzi ............................................................................................................ 352

Rozdział 19. Tworzenie internetowej książki adresowej ...................................... 353Planowanie i tworzenie tabel w bazie danych .............................................................. 353Tworzenie menu ........................................................................................................... 356Tworzenie mechanizmu dodawania rekordów ............................................................. 356Przeglądanie rekordów ................................................................................................. 361Tworzenie mechanizmu usuwania rekordów ................................................................ 367Uzupełnianie istniejących rekordów ............................................................................. 369Podsumowanie ............................................................................................................. 374Warsztaty ...................................................................................................................... 375

Test ......................................................................................................................... 375Odpowiedzi ............................................................................................................ 375Ćwiczenia ............................................................................................................... 375

Page 10: PHP, MySQL i Apache dla każdego. Wydanie II

Spis treści 11

Rozdział 20. Tworzenie prostego forum dyskusyjnego ........................................ 377Projektowanie tabel w bazie danych ............................................................................. 377Tworzenie formularzy wprowadzania danych i skryptów ............................................ 378Wyświetlanie listy tematów .......................................................................................... 381Wyświetlanie postów w temacie .................................................................................. 385Dodawanie postu w wybranym temacie ....................................................................... 388Podsumowanie ............................................................................................................. 391Pytania i odpowiedzi .................................................................................................... 392Warsztaty ...................................................................................................................... 392

Test ......................................................................................................................... 392Odpowiedzi ............................................................................................................ 392Ćwiczenie ............................................................................................................... 393

Rozdział 21. Tworzenie witryny sklepu internetowego ........................................ 395Planowanie i tworzenie tabel w bazie danych .............................................................. 395

Wstawianie rekordów do tabeli sklep_kategorie .................................................... 397Wstawianie rekordów do tabeli sklep_artykuly ..................................................... 397Wstawianie rekordów do tabeli sklep_art_rozmiar ................................................ 398Wstawianie rekordów do tabeli sklep_art_kolor .................................................... 399

Wyświetlanie kategorii artykułów ................................................................................ 399Wyświetlanie artykułów ............................................................................................... 402Podsumowanie ............................................................................................................. 405Warsztaty ...................................................................................................................... 405

Test ......................................................................................................................... 405Odpowiedzi ............................................................................................................ 406

Rozdział 22. Tworzenie mechanizmu koszyka z zakupami ................................... 407Planowanie i tworzenie tabel ........................................................................................ 407Integracja koszyka z witryną sklepową ........................................................................ 409

Dodawanie artykułów do koszyka .......................................................................... 412Przeglądanie zawartości koszyka ........................................................................... 413Usuwanie artykułów z koszyka .............................................................................. 416

Sposoby dokonywania płatności i sekwencja kasowa .................................................. 416Tworzenie formularza kasowego ........................................................................... 417Realizowanie czynności kasowych ........................................................................ 417

Podsumowanie ............................................................................................................. 418Warsztaty ...................................................................................................................... 418

Test ......................................................................................................................... 419Odpowiedzi ............................................................................................................ 419

Rozdział 23. Tworzenie prostego kalendarza ...................................................... 421Tworzenie prostego kalendarza wyświetlanego na ekranie .......................................... 421

Sprawdzenie danych przesłanych przez użytkownika ............................................ 422Tworzenie formularza HTML ................................................................................ 423Tworzenie tabeli kalendarza ................................................................................... 425Dodawanie terminów do kalendarza ...................................................................... 428

Tworzenie biblioteki kalendarza .................................................................................. 435Podsumowanie ............................................................................................................. 440Pytania i odpowiedzi .................................................................................................... 441Warsztaty ...................................................................................................................... 441

Test ......................................................................................................................... 441Odpowiedzi ............................................................................................................ 441Ćwiczenie ............................................................................................................... 441

Page 11: PHP, MySQL i Apache dla każdego. Wydanie II

12 PHP, MySQL i Apache dla każdego

Rozdział 24. Ograniczanie dostępu do aplikacji ................................................. 443Istota uwierzytelniania ................................................................................................. 443

Uwierzytelnianie klienta ........................................................................................ 444Możliwości funkcjonalne modułu uwierzytelniającego serwera Apache ..................... 445

Uwierzytelnianie bazujące na plikach .................................................................... 446Kontrola dostępu bazująca na pliku bazy danych ................................................... 448

Apache jako narzędzie kontroli dostępu ........................................................................ 449Wprowadzanie reguł dostępu ................................................................................. 449Interpretacja reguł dostępu ..................................................................................... 451

Wiązane zastosowanie metod kontroli dostępu ............................................................ 452Ograniczenie dostępu na podstawie metod HTTP ........................................................ 453Ograniczenie dostępu na podstawie wartości cookies .................................................. 454

Tworzenie tabeli uprawnionych użytkowników ..................................................... 454Tworzenie formularza logowania i skryptu ............................................................ 455Sprawdzanie cookie uwierzytelniającego ............................................................... 458

Podsumowanie ............................................................................................................. 459Pytania i odpowiedzi .................................................................................................... 459Warsztaty ...................................................................................................................... 460

Test ......................................................................................................................... 460Odpowiedzi ............................................................................................................ 460Ćwiczenie ............................................................................................................... 460

Rozdział 25.Monitorowanie i prowadzenie dzienników aktywności serwera ........ 461Standardowe odnotowywanie dostępu do serwera ....................................................... 461

Ustalanie treści dzienników ................................................................................... 462Odnotowywanie dostępów w plikach ..................................................................... 465Odnotowywanie dostępów w programie ................................................................ 466

Standardowy tryb odnotowywania błędów serwera Apache ........................................ 467Odnotowywanie błędów w pliku ............................................................................ 467Odnotowywanie błędów w programie .................................................................... 467Demon syslog jako argument ................................................................................. 467Dyrektywa LogLevel ............................................................................................. 468

Zarządzanie dziennikami serwera Apache .................................................................... 468Ustalanie nazw hostów ........................................................................................... 469Rotacja dzienników ................................................................................................ 469Łączenie i podział dzienników ............................................................................... 470Analiza dzienników ................................................................................................ 470Monitorowanie dzienników błędów ....................................................................... 470

Odnotowywanie informacji w bazie danych ................................................................. 471Tworzenie tabeli w bazie danych ........................................................................... 471Tworzenie skryptu PHP odnotowującego dane ...................................................... 471Tworzenie przykładowych raportów ...................................................................... 472

Podsumowanie ............................................................................................................. 475Pytania i odpowiedzi .................................................................................................... 475Warsztaty ...................................................................................................................... 475

Test ......................................................................................................................... 475Odpowiedzi ............................................................................................................ 475

Rozdział 26. Lokalizacja aplikacji ...................................................................... 477Internacjonalizacja i lokalizacja ................................................................................... 477Zestawy znaków ........................................................................................................... 478Modyfikacje środowiska .............................................................................................. 479

Zmiany w konfiguracji serwera Apache ................................................................. 479Zmiany w konfiguracji PHP ................................................................................... 480Zmiany w konfiguracji MySQL ............................................................................. 480

Tworzenie zlokalizowanej struktury strony .................................................................. 481Podsumowanie ............................................................................................................. 486

Page 12: PHP, MySQL i Apache dla każdego. Wydanie II

Spis treści 13

Pytania i odpowiedzi .................................................................................................... 487Warsztaty ...................................................................................................................... 487

Test ......................................................................................................................... 487Odpowiedzi ............................................................................................................ 487

Część VI Administrowanie i dostrajanie ......................................489

Rozdział 27. Poprawianie wydajności i wirtualny hosting na serwerze Apache .... 491Kwestie skalowalności ................................................................................................. 492

Ograniczenia systemu operacyjnego ...................................................................... 492Ustawienia serwera Apache związane z wydajnością ............................................ 494

Testowanie serwera pod obciążeniem przy użyciu ApacheBench ................................ 495Aktywne dostrajanie wydajności .................................................................................. 497

Odwzorowywanie plików w pamięci ..................................................................... 497Rozkład obciążenia ................................................................................................ 498Buforowanie ........................................................................................................... 498Redukcja ilości transmitowanych danych .............................................................. 498Ustawienia sieci ..................................................................................................... 499

Zapobieganie nadużyciom ............................................................................................ 499Roboty .................................................................................................................... 499

Implementacja wirtualnego hostingu ............................................................................ 500Wirtualny hosting bazujący na adresach IP ............................................................ 501Wirtualny hosting bazujący na nazwach ................................................................ 501Masowy hosting wirtualny ..................................................................................... 503

Podsumowanie ............................................................................................................. 504Pytania i odpowiedzi .................................................................................................... 505Warsztaty ...................................................................................................................... 506

Test ......................................................................................................................... 506Odpowiedzi ............................................................................................................ 506

Rozdział 28. Bezpieczny serwer WWW .............................................................. 507Potrzeba bezpieczeństwa .............................................................................................. 507Protokół SSL ................................................................................................................ 508

Rozwiązanie kwestii poufności .............................................................................. 508Rozwiązanie kwestii nienaruszalności ................................................................... 510Rozwiązanie kwestii uwierzytelniania ................................................................... 510

Uzyskiwanie i instalacja narzędzi SSL ......................................................................... 513OpenSSL ................................................................................................................ 513Moduł mod_ssl serwera Apache ............................................................................ 514

Zarządzanie certyfikatami ............................................................................................ 515Tworzenie pary kluczy ........................................................................................... 515Tworzenie prośby o podpisanie certyfikatu ............................................................ 517Tworzenie certyfikatu podpisanego przez nas samych ........................................... 518

Konfiguracja SSL ......................................................................................................... 518Uruchamianie serwera ............................................................................................ 519

Podsumowanie ............................................................................................................. 519Pytania i odpowiedzi .................................................................................................... 519Warsztaty ...................................................................................................................... 520

Test ......................................................................................................................... 520Odpowiedzi ............................................................................................................ 520

Rozdział 29. Optymalizacja i dostrajanie MySQL ................................................ 521Tworzenie zoptymalizowanej platformy ...................................................................... 521

Stosowanie funkcji benchmark() ............................................................................ 522Opcje inicjalizacyjne MySQL ...................................................................................... 523

Kluczowe parametry startowe ................................................................................ 524

Page 13: PHP, MySQL i Apache dla każdego. Wydanie II

14 PHP, MySQL i Apache dla każdego

Optymalizacja struktury tabel ....................................................................................... 525Optymalizacja zapytań ................................................................................................. 525Korzystanie z polecenia FLUSH .................................................................................. 527Korzystanie z polecenia SHOW ................................................................................... 528

Pobieranie informacji o bazach danych i tabelach ................................................. 529Pobieranie informacji o strukturze tabel ................................................................. 530Pobieranie statusu systemu ..................................................................................... 531

Podsumowanie ............................................................................................................. 533Pytania i odpowiedzi .................................................................................................... 534Warsztaty ...................................................................................................................... 534

Test ......................................................................................................................... 534Odpowiedzi ............................................................................................................ 535Ćwiczenia ............................................................................................................... 535

Rozdział 30. Aktualizacja oprogramowania ........................................................ 537Trzymanie ręki na pulsie .............................................................................................. 537

Kiedy aktualizować? .............................................................................................. 538Aktualizacja MySQL .................................................................................................... 539Aktualizacja Apache ..................................................................................................... 539

Modyfikowanie Apache bez dokonywania aktualizacji ......................................... 540Aktualizacja PHP ......................................................................................................... 541Podsumowanie ............................................................................................................. 541Warsztaty ...................................................................................................................... 541

Test ......................................................................................................................... 542Odpowiedzi ............................................................................................................ 542

Część VII Spojrzenie w przyszłość ...............................................543

Rozdział 31.Możliwości funkcjonalne i wsteczna kompatybilność PHP 5.0 ................. 545Co było złe w PHP 4? ................................................................................................... 545Nowy model obiektowy ............................................................................................... 546Pozostałe nowe możliwości .......................................................................................... 548

SQLite .................................................................................................................... 548Obsługa XML-a ..................................................................................................... 549

A więc kiedy instalować PHP 5? .................................................................................. 549Kompatybilność wsteczna ...................................................................................... 549

Podsumowanie ............................................................................................................. 550Pytania i odpowiedzi .................................................................................................... 550

Rozdział 32. Możliwości funkcjonalne i wsteczna kompatybilność MySQL 4.1 ............. 551Korzystanie z podzapytań ............................................................................................. 551

Przykład systemu śledzącego czas pracy z zastosowaniem podzapytań ................. 552Ulepszenia dotyczące internacjonalizacji ..................................................................... 555Inne nowe możliwości funkcjonalne ............................................................................ 555Spojrzenie w przyszłość — MySQL 5.0 ...................................................................... 556Podsumowanie ............................................................................................................. 556Pytania i odpowiedzi .................................................................................................... 557Warsztaty ...................................................................................................................... 557

Test ......................................................................................................................... 557Odpowiedzi ............................................................................................................ 557

Dodatki ......................................................................................559

Skorowidz ..................................................................................... 561

Page 14: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5.

Podstawowe elementyjęzyka PHP

W tym rozdziale zaczniemy poznawać język skryptowy PHP. Czytelnicy niebędącyprogramistami z początku mogą poczuć się nieco przytłoczeni liczbą informacji, niema jednak powodów do obaw, zawsze można wrócić do tego rozdziału później. Lepiejskupić się na zrozumieniu głównych pojęć, niż starać się dokładnie zapamiętać omó-wione konstrukcje. Na pewno pojawią się one w tej książce jeszcze nie raz, więc będziejeszcze szansa ich przyswojenia.

Doświadczeni programiści powinni przynajmniej przejrzeć ten rozdział, gdyż omawiamyw nim kilka cech szczególnych dla PHP, dotyczących zmiennych globalnych, typówdanych i ich konwersji.

W tym rozdziale omówimy:

� Zmienne — czym są, dlaczego są potrzebne i jak z nich korzystać

� Definiowanie zmiennych i odczytywanie ich wartości

� Typy danych

� Niektóre często używane operatory

� Tworzenie wyrażeń za pomocą operatorów

� Definiowanie stałych i korzystanie z nich

Zmienne

Zmienne to zdefiniowane przez programistę „pojemniki”, które mogą przechowywaćjakąś wartość: liczbę, ciąg znaków, obiekt, tablicę czy wartość logiczną. Zmienna topodstawowe pojęcie w programowaniu. Gdyby nie istniały zmienne, wszystkie wartości

Page 15: PHP, MySQL i Apache dla każdego. Wydanie II

90 Część II ♦ Struktura języka PHP

należałoby zapisać bezpośrednio w skrypcie. Dodanie do siebie dwóch liczb i wy-świetlenie rezultatu to już skrypt, rozwiązujący jakiś problem:

�������������

Jednak ten fragment kodu jest przydatny tylko dla tych, którzy chcą znać sumę liczb 2i 4. Można oczywiście napisać kolejny skrypt, wyświetlający sumę liczb, powiedzmy,3 i 5. Oczywiście takie podejście do programowania staje się absurdalne, wtedy wła-śnie przychodzą z pomocą zmienne.

Dzięki zmiennym możemy tworzyć szablony operacji (takich jak dodawanie dwóchliczb) bez zwracania uwagi na to, na jakich dokładnie wartościach operujemy. War-tość zostanie przypisana zmiennej w trakcie działania skryptu, być może na podstawiedanych dostarczonych przez użytkownika, pobranych z bazy danych, czy w zależno-ści od wcześniejszego przebiegu skryptu. Innymi słowy, zmiennych należy używaćwszędzie tam, gdzie dane mogą ulec zmianie.

Zmienna składa się z wybranej przez programistę nazwy, poprzedzonej znakiem dola-ra (�). Nazwy zmiennych mogą składać się z liter, cyfr i znaku podkreślenia (�), niemogą zawierać spacji. Nazwa musi zaczynać się literą lub znakiem podkreślenia. Otokilka prawidłowo nazwanych zmiennych:

����� �������������������������������

Nazwy zmiennych powinny coś mówić o ich zawartości, dobrze też, gdy ich nazewnic-two jest spójne. Na przykład, jeśli skrypt przechowuje informacje o nazwie użytkow-

nika i haśle, nie należy umieszczać nazwy w zmiennej ��, a hasła w zmiennej ��, tenazwy zmiennych niewiele mówią o ich zawartości. Modyfikując skrypt kilka tygodni

później, możesz pomyśleć, że �� oznacza „numer”, nie „nazwę”, a �� oznacza „histo-rię”, nie „hasło”. A jak współpracownik ma się domyślić, co oznaczają nazwy �� i ��?Zmienne można nazywać zgodnie z dowolną konwencją, jeśli tylko nazwy będą opi-sowe i zgodne z jakąś regułą, którą mogą stosować inni.

Średnik (�), nazywany także terminatorem instrukcji, służy do zakończenia instrukcjiPHP. Średniki w poprzednim fragmencie kodu nie były częścią nazwy zmiennej, stano-wiły koniec opcjonalnej instrukcji, informującej PHP o tym, że zmienna jest „gotowa dodziałania”. Aby zadeklarować zmienną, wystarczy w skrypcie umieścić odwołanie do niej.Na ogół w momencie deklaracji zmiennej przypisywana jest jakaś wartość początkowa:

���������������������

Powyżej zadeklarowaliśmy dwie zmienne i przypisaliśmy im wartość za pomocą ope-ratora przypisania (�). Przypisywanie wartości zmiennym omawiamy bardziej szcze-gółowo w podrozdziale „Operatory i wyrażenia”, w dalszej części tego rozdziału. Poprzypisaniu, zmienne można traktować w ten sam sposób, jak wartość, którą reprezen-tują. Innymi słowy, instrukcja

�����������

Page 16: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 91

jest równoznaczna z instrukcją

�������

tak długo, jak długo ���� ma wartość .

Zmienne globalne i superglobalne

Oprócz zasad nazywania zmiennych istnieją także zasady określające dostępność zmien-nych. Przede wszystkim wartość każdej zmiennej jest widoczna tylko wewnątrz funk-cji lub skryptu, w którym się znajduje. Na przykład, jeśli w pliku skryptA.php zmien-nej ����� została przypisana wartość ��, a w pliku skryptB.php także korzystamy zezmiennej �����, możemy bez obaw przypisać jej wartość ����, nie będzie to miałowpływu na skryptA.php. Zmienna ����� jest lokalna w obrębie każdego skryptu, a jejwartości w różnych skryptach są od siebie niezależne.

Zmienną ����� można też zdefiniować jako globalną. Jeśli zmienna ����� zostaniezdefiniowana jako globalna zarówno w pliku skryptA.php, jak i skryptB.php, a te dwaskrypty będą w jakiś sposób powiązane (na przykład jeden z nich wywołuje lub dołączadrugi), zmienna będzie miała jedną wspólną wartość. Zmienne globalne omówimybardziej szczegółowo w rozdziale 6., „Sterowanie przepływem w PHP”.

Oprócz zdefiniowanych przez programistę zmiennych globalnych, PHP zawiera kilkapredefiniowanych zmiennych, nazywanych superglobalnymi. Są one dostępne we wszyst-kich skryptach. Każda ze zmiennych superglobalnych to tak naprawdę tablica:

� ����� zawiera zmienne przesłane do skryptu za pomocą metody GET.

� ������ zawiera zmienne przesłane do skryptu za pomocą metody POST.

� �������� zawiera zmienne przesłane do skryptu za pomocą cookies.

� ������� zawiera zmienne przesłane do skryptu poprzez wysłanie pliku.

� �������� zawiera informacje takie jak wysłane nagłówki, ścieżkę do plikuczy adres skryptu.

� ����� zawiera wartości zmiennych środowiskowych serwera.

� ��������� zawiera zmienne przesłane do skryptu przez użytkownika.

� ��������� zawiera zmienne zarejestrowane w aktualnej sesji.

W treści książki będziemy korzystać ze zmiennych superglobalnych wszędzie tam, gdzieto tylko możliwe. Korzystanie ze zmiennych superglobalnych poprawia bezpieczeń-stwo aplikacji, zmniejszając prawdopodobieństwo wstawienia obcych danych do skryptu.Pisząc skrypty tak, aby akceptowały tylko dane, których się spodziewamy, przekaza-ne w odpowiedni sposób (na przykład za pomocą formularza wysyłanego metodąPOST, czy sesji), możemy uniknąć wielu problemów.

Page 17: PHP, MySQL i Apache dla każdego. Wydanie II

92 Część II ♦ Struktura języka PHP

Typy danych

Różne typy danych zajmują różną ilość pamięci, mogą też być traktowane w różnysposób w trakcie wykonywania skryptu. Dlatego właśnie niektóre języki zobowiązująprogramistę do wcześniejszego określenia typu danych, które zmienna może przecho-wywać. Jednak PHP jest językiem z luźnym typowaniem, a więc typ zmiennej jestokreślany w momencie przypisywania jej wartości.

Takie automatyczne typowanie ma swoje wady i zalety. Z jednej strony daje dużą ela-styczność w użyciu zmiennych — zmienna przechowująca ciąg znaków w dalszej czę-ści skryptu może zawierać liczbę lub dowolny inny typ danych. Z drugiej strony, mo-że to prowadzić do problemów w przypadku większych skryptów, gdy spodziewamysię konkretnego typu zmiennej, a zmienna zawiera dane innego typu. Na przykładzałóżmy, że napisaliśmy kod operujący na tablicy. Jeśli odpowiednia zmienna zamiasttablicy zawiera wartość liczbową, każda operacja tablicowa na tej zmiennej spowo-duje błąd.

W tabeli 5.1 opisujemy podstawowe typy danych, dostępne w PHP.

Tabela 5.1. Podstawowe typy danych

Typ Przykład Opis

!!��� "#�� Wartość logiczna, określona jedną ze specjalnych stałych:

"#�� (prawda) albo $��� (fałsz).

%�"� �# � Liczba całkowita.

&�!" lub '!�(�� �)��� Liczba zmiennopozycyjna.

*"#�� +��"�+ Ciąg znaków.

,(���" Obiekt, egzemplarz klasy.

-##� Tablica, uporządkowany zbiór kluczy i wartości.

.��!�#�� Odnośnik do zewnętrznego zasobu (na przykład bazy danych).

/011 Niezdefiniowana zmienna.

Zmienne typu �� !��"� są często zwracane przez funkcje odpowiadające za współpracęz zewnętrznymi aplikacjami lub plikami. Na przykład w rozdziale 17., „Interakcja z My-SQL z poziomu PHP” wspominamy o „identyfikatorze zasobu MySQL”. Typ ����jest zarezerwowany dla zmiennych, które zostały zadeklarowane, ale nie przypisanoim żadnej wartości.

Aby sprawdzić typ zmiennej, można użyć wbudowanej funkcji #�$$%&�'(. Zwróci onaciąg znaków reprezentujący typ zmiennej, umieszczonej w nawiasie funkcji. Na li-stingu 5.1 przypisujemy zmiennej wartości różnych typów, a następnie wyświetlamyrezultat funkcji #�$$%&�'(. Komentarze mówią, jakiego typu jest zmienna w danymmomencie.

Page 18: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 93

Wywoływanie funkcji omawiamy bardziej szczegółowo w rozdziale 7., „Funkcje”.

Listing 5.1. Sprawdzanie typu zmiennej

��2�34�5���2��"��"��66�deklaracja bez przypisania wartości��2������ �""�����"��"���66�null��2������+3(#7+���2��"��"������82������ �""�����"��"���66�integer�92������+3(#7+���2��"��"���+��:;+��<2������ �""�����"��"���66�string�=2������+3(#7+���2��"��"����)=�����2������ �""�����"��"���66�double��2������+3(#7+���2��"��"���"#�����2������ �""�����"��"���66�boolean�82������+3(#7+��92��"��"���������+�(>?!+@�+�!�#A��+@�+ #���?+����2������ �""�����"��"���66�array�<2������+3(#7+��=2�47

Powyższy kod należy umieścić w pliku gettype.php, w katalogu nadrzędnym serweraWWW. Po otwarciu skryptu w przeglądarce internetowej, powinien pojawić się na-stępujący rezultat:

/011��"� �#�"#�� !�(��(!!���##�

Deklarując zmienną �$� $ w linii 2., nie przypisaliśmy jej żadnej wartości, a więc pierw-sze wywołanie funkcji #�$$%&�'( w linii 3. zwraca wartość ����. Następnie, za pomocąoperatora przypisania (�), nadajemy zmiennej kolejne wartości, wyświetlając rezultatfunkcji #�$$%&�'(. W linii 5. zmiennej została przypisana wartość całkowita, mówiąckrótko, liczba bez wartości dziesiętnej1. W linii 8. zmiennej przypisujemy ciąg zna-ków, który zawsze powinien być otoczony pojedynczymi lub podwójnymi znakamicudzysłowu () lub *). Wartość +!�,-�, przypisana zmiennej �$� $ w linii 11., to licz-ba zmiennopozycyjna (zawierająca kropkę dziesiętną). Wartość logiczna, przypisanazmiennej �$� $ w linii 14., może przyjmować jedną z dwóch możliwych wartości:$��� lub .�- �. W linii 17. do utworzenia tablicy wykorzystano funkcję �����'(, któ-rą omówimy dokładniej w rozdziale 8., „Tablice i obiekty”. Przykładowa tablica za-wiera trzy elementy, a funkcja #�$$%&�'( zgodnie z prawdą zwraca wartość „array”.

1 W PHP, podobnie jak w języku angielskim, część całkowita oddzielana jest od części dziesiętnej

kropką, nie przecinkiem — przyp. red.

Page 19: PHP, MySQL i Apache dla każdego. Wydanie II

94 Część II ♦ Struktura języka PHP

Zmiana typu za pomocą settype()

Język PHP posiada funkcję �$$%&�'(, umożliwiającą zmianę typu zmiennej. Zmiennąi nazwę nowego typu należy przekazać jako argumenty funkcji �$$%&�'( (w nawiasie,oddzielone przecinkiem), jak w poniższym przykładzie:

��""������������@������ ���

Kod na listingu 5.2 konwertuje wartość /01 (typu .-!�$) do każdego z czterech omó-wionych wcześniej typów danych.

Listing 5.2. Zmiana typu zmiennej za pomocą settype()

��2�34�5���2�����!?#���!�����)�����2������ �""��������!?#���!����66�double��2������+����#"!B;�����!?#���!�3(#7+��66�3.14��2���""��������!?#���!�@�C�"#�� C���82������ �""��������!?#���!����66�string�92������+����#"!B;�����!?#���!�3(#7+��66�3.14��2���""��������!?#���!�@�C��"� �#C���<2������ �""��������!?#���!����66�integer�=2������+����#"!B;�����!?#���!�3(#7+��66�3��2���""��������!?#���!�@�C!�(��C����2������ �""��������!?#���!����66�double��2������+����#"!B;�����!?#���!�3(#7+��66�3��2���""��������!?#���!�@�C(!!�C����2������ �""��������!?#���!����66�boolean�82������+����#"!B;�����!?#���!�3(#7+��66�1�92�47

Zgodnie z podręcznikiem PHP, wartość „double” (a nie „float”) zostanie zwrócona na-

wet wtedy, gdy zmienna jest typu .-!�$.

Za każdym razem za pomocą funkcji #�$$%&�'( sprawdzamy nowy typ zmiennej, a na-stępnie wyświetlamy jej wartość. Gdy ciąg */01* zostanie zamieniony w linii 8. naliczbę całkowitą, części dziesiętnej nie można już odzyskać. To właśnie dlatego zmien-na ����!2�� -!��, gdy zamienimy ją z powrotem na +!�,-� w linii 11., ma wartość /.Wreszcie w linii 14. konwertujemy zmienną na wartość logiczną. Wartość $��� jestreprezentowana przez , a wartość .�- � — przez pusty ciąg znaków. A więc w linii 16.zostanie wyświetlona wartość .

Powyższy kod należy umieścić w pliku settype.php, w katalogu nadrzędnym serweraWWW. Po otwarciu skryptu w przeglądarce internetowej, powinien pojawić się na-stępujący rezultat:

!�(������#"!B;��)���"#�� ����#"!B;��)����"� �#����#"!B;��!�(������#"!B;��(!!�������#"!B;��

Page 20: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 95

Zmiana typu poprzez rzutowanie

Zmiana typu zmiennej za pomocą funkcji #�$$%&�'( różni się od zmiany typu poprzezrzutowanie przede wszystkim tym, że w tym drugim przypadku tworzona jest kopiazmiennej, a oryginał pozostaje bez zmian. Aby zmienić typ za pomocą rzutowania,należy podać jego nazwę, zawartą w nawiasie, przed zmienną, której dotyczy rzutowa-nie. Na przykład poniższa instrukcja tworzy kopię zmiennej �!�%#���-�� odpowied-niego typu (��$�#��) i przypisuje jej wartość do zmiennej ��!3�. Zmienna �!�%#���-��będzie wciąż dostępna, a jej typ nie ulegnie zmianie:

��!�������"� �#���!#� �����

Kod na listingu 5.3 zmienia typ za pomocą rzutowania.

Listing 5.3. Rzutowanie zmiennej

�2�34�5��2�����!?#���!�����)����2���5�������!�(��������!?#���!���2������ �""������5������66�double�2������+����#"!B;���5���3(#7+��66�3.1482���5��������"#�� ������!?#���!��92������ �""������5������66�string�2������+����#"!B;���5���3(#7+��66�3.14<2���5���������"� �#������!?#���!���=2������ �""������5������66�integer��2������+����#"!B;���5���3(#7+��66�3��2���5�������!�(��������!?#���!����2������ �""������5������66�double��2������+����#"!B;���5���3(#7+��66�3.14��2���5�������(!!���������!?#���!���82������ �""������5������66�boolean�92������+����#"!B;���5���3(#7+��66�1��2������+35#7+��<2������+"�������������!��D"?!���2�+��=2������ �""��������!?#���!����66�double��2�47

Typ zmiennej ����!2�� -!�� pozostaje bez zmian (+!�,-�) w trakcie działania skryptu,czego dowodzi funkcja #�$$%&�'( w linii 20., wyświetlająca typ zmiennej.

W praktyce w trakcie rzutowania zmiennej ����!2�� -!�� tworzona jest jej kopia,skonwertowana na odpowiedni typ, która następnie zostaje przypisana zmiennej�"�3�-�. Rzutowania występują w liniach 3., 6., 9., 12. i 15. Operujemy jedynie na kopiizmiennej ����!2�� -!��, a więc początkowa wartość zmiennej pozostaje bez zmian(w przeciwieństwie do kodu na listingu 5.2, gdzie w linii 8. zmienna została skonwer-towana na typ ��$�#��).

Powyższy kod należy umieścić w pliku testtype.php, w katalogu nadrzędnym serweraWWW. Po otwarciu skryptu w przeglądarce internetowej, powinien pojawić się nastę-pujący rezultat:

Page 21: PHP, MySQL i Apache dla każdego. Wydanie II

96 Część II ♦ Struktura języka PHP

!�(������#"!B;��)���"#�� ����#"!B;��)����"� �#����#"!B;��!�(������#"!B;��)��(!!�������#"!B;��"�������������!��D"?!���2�!�(��

Teraz, gdy już zaprezentowaliśmy dwa sposoby zmiany typu zmiennej, zastanówmysię, w jakich sytuacjach może to być użyteczne. Na pewno nie będziemy korzystać z tejmożliwości zbyt często, PHP automatycznie rzutuje zmienne w zależności od kontek-stu, w jakim zostaną użyte. Jednak takie automatyczne rzutowanie jest tymczasowe,a czasem zachodzi potrzeba permanentnej zmiany typu zmiennej.

Na przykład liczby, wpisane przez użytkownika w formularzu HTML, zostaną prze-kazane do skryptu jako ciągi znaków. Przy próbie dodania do siebie dwóch takichciągów, PHP w celu przeprowadzenia dodawania skonwertuje je na liczby. A więc

+�=��+���+�=��+

w rezultacie da 45.

Ogólnym terminem „liczba” określamy zarówno liczby całkowite, jak i zmiennopozycyj-ne. A więc jeśli użytkownik w formularzu poda wartości zmiennopozycyjne, reprezen-towane przez ciągi „3.14cm” i „4.12cm”, rezultatem dodawania będzie 7.26.

Podczas rzutowania ciągu znaków na liczbę całkowitą lub zmiennopozycyjną, PHPzignoruje wszystkie znaki nienumeryczne. Fragment od pierwszego znaku nienume-rycznego do końca ciągu zostanie obcięty. A więc ciąg „30cm” zostanie zamienionyna „30”, jednak ciąg „6m2cm” będzie miał wartość liczbową „6”, cała reszta zostanieobcięta.

Czasem warto samodzielnie „oczyścić” dane przesłane przez użytkownika przed ichużyciem w skrypcie. Załóżmy, że użytkownik miał przesłać liczbę. Możemy zasy-mulować taką sytuację, nadając wartość odpowiedniej zmiennej:

�"��"���+�=��+�

Jak widać, użytkownik dodał do liczby jednostkę — zamiast wpisać „30”, podałwartość „30cm”. Aby upewnić się, że wartość zmiennej będzie całkowita, można do-konać rzutowania:

��!��"��"������"� �#���"��"������+E��>?!������#!?!B;���!��"��"����"���"#F�)+�

Oto rezultat działania powyższego kodu:

E��>?!������#!?!B;��=����"���"#F�)

Gdyby nie zastosowano rzutowania i wyświetlono początkową wartość zmiennej �$� $,rezultat byłby inny:

E��>?!������#!?!B;��=������"���"#F�)

Trzeba przyznać, że to zdanie wygląda trochę dziwnie.

Page 22: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 97

Po co sprawdzać typ?

Kiedy znajomość typu zmiennej może okazać się przydatna? Zdarzają się sytuacje,gdy operujemy na danych pobranych z jakiegoś obcego źródła. W rozdziale 7. omó-wimy, jak korzystać z funkcji. Dane są często przekazywane pomiędzy funkcjami,które mogą odbierać informacje za pomocą argumentów. Aby zapewnić poprawnedziałanie funkcji, dobrze wcześniej sprawdzić, czy dane do niej przekazane są odpo-wiedniego typu. Na przykład funkcja spodziewająca się argumentu typu „resource”nie będzie dobrze działała, gdy otrzyma zamiast tego ciąg znaków.

Operatory i wyrażenia

Pokazaliśmy, jak przypisywać zmiennym wartości, a także jak sprawdzać i zmieniaćtyp zmiennych. Jednak bez możliwości przeprowadzania operacji na danych, żadenjęzyk programowania nie byłby zbyt użyteczny. Operatory to symbole, za pomocąktórych można manipulować danymi przechowywanymi w zmiennych. Dzięki temuna podstawie istniejących danych można otrzymać nową wartość, sprawdzić popraw-ność danej i tak dalej. Wartość, na której działa operator nazywamy operandem.

Operator to symbol (lub kilka symboli), który użyty wraz z pewnymi wartościami tworzynową wartość.

Operand to wartość wykorzystywana w operatorze. Operator posiada na ogół co naj-mniej dwa operandy.

W tym prostym przykładzie operator, wraz z dwoma operandami, tworzy nową wartość:

�������

Liczby całkowite 1 i 6 to operandy. Zastosowany na nich operator dodawania (7)zwraca wartość całkowitą 8. Operator na ogół znajduje się pomiędzy dwoma operan-dami, choć od tej zasady jest kilka wyjątków.

Operator wraz z operandami tworzy wyrażenie, choć wyrażenie nie musi zawierać opera-tora. Tak naprawdę w PHP wyrażenie jest zdefiniowane jako wszystko to, co możezostać użyte jako wartość. A więc wyrażeniami są stałe całkowite — np. 961, zmienne— np. �� ��, i wywołania funkcji — np. #�$$%&�'(. Na przykład wyrażenie '1:7:6(w rzeczywistości składa się z dwóch wyrażeń składowych (1 i 6) i operatora (7). Gdy wy-rażenie tworzy nową wartość, mówimy, że zwraca tę wartość. A więc wyrażenie możnatakże traktować jako wartość. W naszym przykładzie wyrażenie '1:7:6( zwraca 8.

Wyrażenie to dowolna kombinacja wywołań funkcji, wartości i operatorów, zwracają-ca wartość. Łatwo zapamiętać, że jeśli pewnego fragmentu można użyć jako wartości,to jest to wyrażenie.

Po wstępie teoretycznym omówimy najpopularniejsze operatory występujące w ję-zyku PHP.

Page 23: PHP, MySQL i Apache dla każdego. Wydanie II

98 Część II ♦ Struktura języka PHP

Operator przypisania

Operator przypisania, reprezentowany przez symbol �, był już przez nas wykorzysty-wany podczas deklaracji zmiennych. Odczytuje on wartość operandu po prawej stronieoperatora i przypisuje do zmiennej po lewej stronie:

��������+�+�

Po wykonaniu tego fragmentu zmienna ����� będzie zawierała wartość *�+��*. Takakonstrukcja to także wyrażenie, choć z pozoru może się wydawać, że operator po prostumodyfikuje zmienną, nic nie zwracając. W rzeczywistości takie wyrażenie zawszezwraca kopię prawego operandu. A więc

�������������+�+�

przypisze zmiennej ����� wartość *�+��*, ale także wyświetli ciąg znaków *�+��*.

Operatory arytmetyczne

Operatory arytmetyczne robią dokładnie to, czego można się spodziewać po ich na-zwie — przeprowadzają działania arytmetyczne. W tabeli 5.2 podajemy ich listę,wraz z przykładami użycia.

Tabela 5.2. Operatory arytmetyczne

Operator Nazwa Przykład Rezultat

� dodawanie �=�� ��

G odejmowanie �=G� 9

6 dzielenie �=6� �)�������������

H mnożenie �=H� �=

Operator konkatenacji

Operator konkatenacji oznaczamy pojedynczą kropką (0). Traktując oba operandy jakociągi znaków, operator skleja lewy operand z prawym. A więc wyrażenie

+��"�+)+�B������+

zwróci wartość

+��"��B������+

Warto zauważyć, że oba słowa są oddzielone spacją tylko dlatego, że występuje onaw drugim operandzie („ świecie” zamiast „świecie”). Operator konkatenacji po prostudołącza jeden ciąg do drugiego, nie rozdzielając ich w żaden sposób. A więc próbapołączenia dwóch ciągów niepoprzedzonych lub zakończonych spacją, np.

+��"�+)+B������+

da następujący rezultat:

+��"�B������+

Page 24: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 99

Niezależnie od typów zawartych w operandach, oba są traktowane jako ciągi znaków,a więc rezultat zawsze będzie ciągiem znaków. Operatora konkatenacji w treści książkibardzo często używamy do sklejenia ciągu znaków z wartością jakiegoś wyrażenia:

���������������+���#!?!B;2�+)����6�==�)+���"#F�+�

Złożony operator przypisaniaIstnieje tylko jeden operator przypisania, jednak PHP posiada kilka operatorów zło-żonych, modyfikujących wartość zmiennej po lewej stronie operatora i zwracającychjej nową wartość. Regułą jest, że operatory nie zmieniają wartości operandów — tareguła nie dotyczy złożonych operatorów przypisania (i oczywiście standardowegooperatora przypisania). Operatory złożone składają się z odpowiedniego symbolu, poktórym następuje znak równości. Są znacznym ułatwieniem w sytuacjach, w którychkonieczne byłoby użycie dwóch osobnych operatorów. Na przykład chcąc zwiększyćwartość zmiennej, której początkowa wartość to 1, o kolejne 1, możemy napisać:

�I������I����I������66�$x ma teraz wartość 8

Można też użyć złożonego operatora przypisania (7�), aby zwiększyć wartość zmiennej:

�I������I�������66�$x ma teraz wartość 8

Każdy operator arytmetyczny, a także operator konkatenacji, posiada odpowiadającymu operator złożony. W tabeli 5.3 podajemy ich listę wraz z przykładami użycia.

Tabela 5.3. Niektóre złożone operatory przypisania

Operator Przykład Zapis równoważny

�� �I����� �I����I����

G� �I�G��� �I����I�G��

6� �I�6��� �I����I�6��

H� �I�H��� �I����I�H��

J� �I�J��� �I����I�J��

)� �I�)��+�"��"+ �I����I)+�"��"+

W każdym z przykładów w tabeli 5.3 wartość zmiennej �; zostaje zmodyfikowana napodstawie wartości prawego operandu. Od tej pory zmienna �; będzie zawierała nowąwartość. Na przykład:

�I������I�������66�$x ma teraz wartość 8�I�������66�$x ma teraz wartość 12�I�G�����66�$x ma teraz wartość 9

W dalszej części książki będziemy często stosowali operatory złożone. Złożony ope-rator konkatenacji często występuje we fragmentach, w których tekst konstruowanyjest dynamicznie. Dobry przykład to zastosowanie pętli do dynamicznego tworzeniakodu HTML reprezentującego tabelę.

Page 25: PHP, MySQL i Apache dla każdego. Wydanie II

100 Część II ♦ Struktura języka PHP

Inkrementacja i dekrementacjawartości zmiennej całkowitej

Podczas programowania w PHP często zachodzi potrzeba zwiększenia lub zmniejszeniao jeden wartości zmiennej całkowitej. Dobrym przykładem jest zliczanie iteracji pętli.Znamy już dwa sposoby osiągnięcia tego — użycie operatora dodawania

�I����I������66�wartość $x zostaje zwiększona o 1

lub złożonego operatora przypisania

�I�������66�wartość $x zostaje zwiększona o 1

W każdym z tych przypadków nowa wartość zostaje przypisana do zmiennej �;.Wyrażenia tego typu są bardzo często spotykane, dlatego PHP zawiera specjalne ope-ratory, służące do zwiększania i zmniejszania wartości zmiennej o 1. To operatorypostinkrementacji oraz postdekrementacji, pierwszy z nich składa się z dwóch symboliplus, umieszczonych za nazwą zmiennej:

�I����66�wartość $x zostaje zwiększona o 1

Powyższe wyrażenie zwiększa wartość zmiennej �; o jeden. Użycie dwóch symboliminus spowoduje zmniejszenie wartości zmiennej:

�IGG��66�wartość $x zostaje zmniejszona o 1

Warto pamiętać, że operatory postinkrementacji i postdekrementacji najpierw zwracająwartość operandu, a dopiero potem ją modyfikują (stąd przedrostek „post”):

�I�����������I�������

W takiej sytuacji �% przyjmuje wartość 6 (3 + 3), a dopiero wtedy zmienna �; zostajezwiększona.

W niektórych wyrażeniach warunkowych zachodzi potrzeba zmniejszenia (lub zwięk-szenia) wartości zmiennej jeszcze przed przeprowadzeniem testu. W tym celu PHPzapewnia operatory preinkrementacji i predekrementacji. Działają w ten sam sposób,jak wcześniej omówione operatory, jednak symbole je reprezentujące muszą poprze-dzać zmienną:

���I��66�wartość $x zostaje zwiększona o 1GG�I��66�wartość $x zostaje zmniejszona o 1

Gdyby użyć tych operatorów w wyrażeniu warunkowym, wartość zmiennej zostaniezmniejszona jeszcze przed przeprowadzeniem testu. Na poniższym przykładziezmienna �; zostaje zwiększona przed sprawdzeniem, czy jest mniejsza od 1:

�I��������I�3����66�zwraca wartość logiczną false

Liczba 1 nie jest mniejsza od 1, a więc wyrażenie warunkowe zwraca .�- �.

Page 26: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 101

Operatory porównania

Operatory porównania sprawdzają wartość operandów, zwracając wartość logiczną$���, jeśli test się powiódł, a .�- � w przeciwnym razie. Takie wyrażenia są bardzoprzydatne w strukturach sterujących, takich jak instrukcje �� czy ����. Omówimy jew rozdziale 6.

Na przykład, aby sprawdzić, czy wartość zmiennej �; jest mniejsza niż 6, można użyćoperatora „mniejsze niż”:

�I�3��

Jeśli �; ma wartość /, wyrażenie zwróci wartość $���. Jeśli �; zawiera wartość 4, wy-rażenie zwróci .�- �.

W tabeli 5.4 prezentujemy dostępne operatory porównania.

Tabela 5.4. Operatory porównania

Operator Nazwa Zwraca prawdę, jeśli… Przykład ($x = 4) Rezultat

�� równe lewa strona jest równa prawej �I����� $���

K� różne lewa strona nie jest równa

prawej

�I�K��� "#��

��� identyczne lewa strona jest równa prawej

i są tego samego typu

�I������ "#��

K�� nie identyczne lewa strona jest różna prawej

lub są różnego typu

�I�K���+�+ $���

7 większe lewa strona jest większa niż

prawa

�I�7�� $���

7� większe lub

równe

lewa strona jest większa lub

równa prawej

�I�7��� "#��

3 mniejsze lewa strona jest mniejsza niż

prawa

�I�3�� $���

3� mniejsze lub

równe

lewa strona jest mniejsza lub

równa prawej

�I�3��� "#��

Powyższe operatory najczęściej stosuje się wraz z wartościami całkowitymi lubzmiennopozycyjnymi, jednak operatora równości można użyć także do porównaniadwóch ciągów znaków. Warto poświęcić chwilę, aby dobrze zrozumieć różnicę międzyoperatorami �� i �. Operator �� sprawdza równość, podczas gdy � przypisuje zmiennejwartość. Dobrze też zapamiętać, że operator ��� sprawdza równość zarówno wartości,jak i typów.

Page 27: PHP, MySQL i Apache dla każdego. Wydanie II

102 Część II ♦ Struktura języka PHP

Tworzenie złożonych wyrażeńza pomocą operatorów logicznych

Operatory logiczne przeprowadzają działania logiczne na operandach. Na przykładoperator alternatywy, oznaczany dwiema kreskami (<<) lub po prostu słowem � (lub),zwraca wartość logiczną „prawda”, jeśli którykolwiek z operandów jest prawdziwy:

"#���LL�$���

Powyższe wyrażenie zwróci wartość $���.

Operator koniunkcji, oznaczany dwoma znakami ampersand (==) lub po prostu sło-wem ��� (i), zwraca wartość logiczną „prawda” tylko wówczas, gdy oba operandy sąprawdziwe:

"#���MM�$���

Powyższe wyrażenie zwróci wartość .�- �. W rzeczywistości operatorów logicznychnie używa się na stałych, ale na dwóch lub więcej wyrażeniach, mających wartośćlogiczną. Na przykład:

��I�7����MM���I�3����

Powyższe wyrażenie zwróci wartość $��� tylko wtedy, gdy wartość �; jest większaod > i mniejsza od 6. Używamy nawiasów, aby zwiększyć czytelność kodu i określićkolejność obliczania wartości wyrażeń. W tabeli 5.5 prezentujemy dostępne operatorylogiczne.

Tabela 5.5. Operatory logiczne

Operator Nazwa Zwraca prawdę, jeśli… Przykład Rezultat

LL alternatywa

(lub)

lewa lub prawa strona jest

prawdziwa

"#���LL�$��� "#��

�� alternatywa

(lub)

lewa lub prawa strona jest

prawdziwa

"#������$��� "#��

��� różnica

symetryczna

(xor)

lewa lub prawa strona jest

prawdziwa, ale nie obie

"#�������"#�� $���

MM koniunkcja (i) lewa i prawa strona jest

prawdziwa

"#���MM�$��� $���

� koniunkcja (i) lewa i prawa strona jest

prawdziwa

"#�����$��� $���

K negacja (nie) pojedynczy operand nie jest

prawdziwy

K�"#�� $���

Dociekliwi na pewno zastanawiają się, czemu istnieją dwie wersje operatora koniunkcjii alternatywy. To dobre pytanie, odpowiemy na nie w następnym podrozdziale.

Page 28: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 103

Kolejność operatorów

PHP zazwyczaj odczytuje wyrażenia od lewej do prawej. Jednak w przypadku wyra-żeń składających się z więcej niż jednego operatora, stosowanie tej zasady może pro-wadzić do niejasności. Rozważmy prosty przykład:

�����

Nie ma tu miejsca na żadne niejasności, PHP po prostu doda 1 do 6. Co jednak w przy-padku takiego wyrażenia, złożonego z dwóch operatorów:

������H��

Tutaj pojawia się problem. Czy silnik PHP powinien dodać 1 do 6, a następnie pomno-żyć całość przez >, co da rezultat ? A może oznacza to, że do 1 należy dodać wynikmnożenia 6 razy >, co da rezultat 1? Gdyby czytać wyrażenie od lewej do prawej,prawdziwe byłoby pierwsze stwierdzenie. Jednak PHP przypisuje poszczególnymoperatorom różne priorytety, a ponieważ operator mnożenia ma większy priorytet niżdodawania, to właśnie drugie stwierdzenie jest prawdziwe. A więc wynikiem wyrażeniajest 1 plus rezultat mnożenia 6 razy >.

Możemy jednak zmienić kolejność operatorów, zawierając wyrażenia w nawiasach.W poniższym przykładzie najpierw przeprowadzone zostanie dodawanie, a dopieropotem mnożenie:

��������H��

W przypadku wyrażeń złożonych, niezależnie od priorytetów operatorów, warto stoso-wać nawiasy, aby uczynić kod bardziej czytelnym i uchronić się od poważnych błę-dów, takich jak naliczenie w sklepie internetowym podatku od niewłaściwej kwoty.Oto lista dotychczas omówionych operatorów, w kolejności priorytetów (od najwięk-szego do najmniejszego):

��@�GG@��� �6@�H@�J�@�G3@�3�@��7@�7��@����@�K�MMLL�@���@�G�@�6�@�H�@�J�@�)��I!#!#

Jak widać, operatory � i ��� mają mniejszy priorytet niż odpowiadające im operatory<< i ==. A więc można użyć odpowiedniej wersji, aby określić kolejność obliczaniawyrażenia złożonego. Poniższe wyrażenia są równoważne, ale drugie z nich jest o wielebardziej czytelne:

�I������LL����I�MM�����LL����

Page 29: PHP, MySQL i Apache dla każdego. Wydanie II

104 Część II ♦ Struktura języka PHP

Co więcej, poniższe wyrażenie jest jeszcze bardziej czytelne:

�I�MM�����������

Podkreślmy jeszcze raz, wszystkie trzy wersje są równoważne.

Priorytety to jedyne, co odróżnia operatory == i ��� (a także << i �), nie zawsze jednakwarto polegać na priorytetach. W większości sytuacji użycie nawiasów sprawia, że kodstaje się bardziej czytelny i mniej podatny na błędy. A więc w dalszej części książkibędziemy stosowali operatory << i ==, kolejność wyrażeń oznaczając za pomocą na-wiasów.

Stałe

Użycie zmiennych to bardzo elastyczny sposób przechowywania danych, ich wartośćmożna zmieniać w każdym miejscu skryptu. Czasem jednak zachodzi potrzeba sto-sowania wartości niezmiennych w trakcie działania skryptu — wtedy przydatne stająsię stałe. Aby utworzyć stałą, należy użyć wbudowanej funkcji PHP +�.���'(. Wartośćstałej pozostaje niezmieniona, aż do następnego użycia +�.���'(. Aby zdefiniowaćstałą, w nawiasie w wywołaniu funkcji należy umieścić nazwę stałej i jej wartość, od-dzielone przecinkiem:

�$����+/-�N-�*O-1PQ+@�����

Wartością stałej może być liczba, ciąg znaków czy wartość logiczna. Warto postępowaćzgodnie z konwencją i nazywać stałe wielkimi literami. Aby poznać wartość stałej,wystarczy użyć jej nazwy (nie należy poprzedzać jej symbolem dolara). Na listingu 5.4pokazujemy, jak zdefiniować i sprawdzić wartość stałej:

Listing 5.4. Definiowanie stałej

�2�34�5��2��$����+ %P�-RS�.,T+@�+�==�+���2������+U���"�#��#!?�+) %P�-RS�.,T��2�47

Korzystając ze stałych, powinniśmy pamiętać, że można użyć ich w dowolnym miejscuskryptu, a także w dołączanych skryptach zewnętrznych.

Warto zauważyć, że w linii 3. użyliśmy operatora konkatenacji, aby skleić wartość stałejz ciągiem *?��%:$���@:�!2:*. Jest to możliwe dzięki temu, że PHP traktuje stałą w takisam sposób, jak ciąg znaków, który reprezentuje.

Powyższy kod należy umieścić w pliku stala.php, w katalogu nadrzędnym serweraWWW. Po otwarciu skryptu w przeglądarce internetowej, powinien pojawić się na-stępujący rezultat:

U���"�#��#!?��==�

Page 30: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 105

Funkcja +�.���'( może przyjmować jeszcze trzeci argument, będący wartością lo-giczną. Określa on, czy w nazwie stałej powinna być rozróżniana wielkość liter. Do-myślnie wielkość liter ma znaczenie, jednak przekazując $��� jako trzeci argument,możesz to zmienić. Wtedy wartość stałej, zdefiniowanej w następujący sposób:

�$����+ %P�-RS�.,T+@�+�==�+@�"#����

możemy otrzymać, nie zwracając uwagi na wielkość liter:

�����(������#!?������ �P��S�.!?������ %P�-RS�.,T�

Powyższe wyrażenia są równoważne, każde z nich wypisze wartość >556. Dzięki temumożemy uczynić kod nieco bardziej przyjaznym dla innych programistów, korzysta-jących z naszych stałych. Jednak z drugiej strony, biorąc pod uwagę to, że w nazwachstałych domyślnie jest rozróżniana wielkość liter, może to tylko przysporzyć kłopotówinnym programistom. A więc jeśli nie ma ważnego powodu, aby postępować inaczej,lepiej w nazwach stałych brać pod uwagę wielkość liter, a także nazywać stałe wiel-kimi literami. To prosta (i ogólnie przyjęta) konwencja.

Stałe predefiniowane

PHP daje dostęp do pewnych wbudowanych stałych. Na przykład ���� zwraca na-zwę pliku, zawierającego obecnie wykonywany skrypt. Stała ���� zwraca bieżącąlinię w pliku. Te stałe są szczególnie użyteczne do wyświetlenia komunikatu o błędzie.Aby poznać wersję PHP działającą na serwerze, można użyć stałej �A���������.

Podsumowanie

W tym rozdziale omówiliśmy niektóre podstawowe cechy języka PHP. Opisaliśmyzmienne, zastosowanie operatora przypisania do zmiany ich wartości, wspomnieliśmyo zasięgu zmiennych oraz wbudowanych zmiennych superglobalnych. Omówiliśmynajpopularniejsze operatory i pokazaliśmy, jak za ich pomocą tworzyć złożone wyra-żenia. Wreszcie pokazaliśmy, jak definiować i pobierać wartość stałych.

Teraz, gdy już opanowaliśmy podstawy PHP, w następnym rozdziale możemy ruszyćdo przodu. Pokażemy, jak pisać skrypty podejmujące decyzje i powtarzające pewnezadania. Będziemy opierać się na wiedzy zdobytej w tym rozdziale.

Pytania i odpowiedzi

P: Kiedy przydaje się znajomość typu zmiennej?

O: Często typ zmiennej ma wpływ na to, jakie operacje można na niej przeprowadzać.Na przykład nie można stosować operacji tablicowych na ciągu znaków. Warto

Page 31: PHP, MySQL i Apache dla każdego. Wydanie II

106 Część II ♦ Struktura języka PHP

też przed wykonaniem operacji arytmetycznych sprawdzić, czy odpowiedniezmienne są typu całkowitego czy zmiennopozycyjnego (nawet jeśli silnikPHP sam przeprowadzi odpowiednią konwersję).

P: Czy nazywając zmienne, powinienem stosować się do jakichś konwencji?

O: Podstawowym celem powinno zawsze być zwiększenie czytelności kodu.Nazwa zmiennej ��,>/>16 nic nie mówi o jej znaczeniu w skrypcie, łatwoteż o pomyłkę w zapisie takiej nazwy. Nazwy zmiennych powinny być krótkiei opisowe.

Nazwa zmiennej �� najprawdopodobniej nie będzie nic znaczyć, gdy wrócimydo kodu po miesiącu. O wiele lepszą nazwą dla zmiennej jest ���@3�&-�2�.

P: Czy priorytetów operatorów należy uczyć się na pamięć?

O: Czemu nie, chociaż najprawdopodobniej szkoda na to czasu. Korzystającz nawiasów, możemy zarówno uczynić kod bardziej czytelnym, jak i wybraćswoją własną kolejność obliczania wyrażeń.

Warsztaty

Warsztaty mają na celu utrwalenie i sprawdzenie zdobytej wiedzy, powinny też poka-zać, jak zastosować ją w praktyce.

Test

1. Która z poniższych nazw zmiennych nie jest poprawna?

��#"!���!����"?!���?�888888I���I��888888������������?�������!������ !����G���?�

2. Jaki będzie rezultat działania poniższego kodu?

�����������(!!��������������������

3. Jaki będzie rezultat działania poniższej instrukcji?

����� �""����+�+��

4. Jaki będzie rezultat działania poniższego fragmentu?

�"��"����)��88���""�����"��"@�+��"� �#+��������"��"�

Page 32: PHP, MySQL i Apache dla każdego. Wydanie II

Rozdział 5. ♦ Podstawowe elementy języka PHP 107

5. Które z poniższych instrukcji nie są wyrażeniami?

�� �""���������6���

6. Które z instrukcji w pytaniu 5. zawierają operator?

7. Co zwróci poniższe wyrażenie?

��3��

Jaki będzie typ zwróconej wartości?

Odpowiedzi

1. Nazwa zmiennej �999999;%@ nie jest poprawna, gdyż nie zaczyna się literą lubznakiem podkreślenia. Nazwa zmiennej �"! :3�@��#! nie jest poprawna, gdyżzawiera spację. Zmienna ���@3�B&-�2� jest także niepoprawna, gdyż zawieraniedozwolony znak (B).

2. Kod wyświetli liczbę //. W czasie rzutowania na wartość logiczną tworzonajest kopia wartości zmiennej ����, jednak sama zmienna nie jestmodyfikowana.

3. Instrukcja wyświetli ciąg znaków * $���#*.

4. Kod wyświetli wartość 6. Gdy liczba zmiennopozycyjna zostaje zamienionana całkowitą, obcięta zostaje cała część dziesiętna.

5. Każda z tych instrukcji to wyrażenie, każda zwraca jakąś wartość.

6. Instrukcja 6C> zawiera operator dzielenia.

7. Wyrażenie zwróci wartość logiczną .�- �.

Ćwiczenia

1. Utwórz skrypt zawierający co najmniej pięć różnych zmiennych. Wypełnijje wartościami różnych typów, a następnie zastosuj funkcję #�$$%&�'(,aby poznać ich typ.

2. Przypisz wartości dwóm zmiennym. Użyj operatorów porównania,aby sprawdzić, czy pierwsza wartość jest

� taka sama jak druga,

� mniejsza niż druga,

� większa niż druga,

� mniejsza lub równa drugiej.

Rezultat każdego z testów wyświetl w przeglądarce. Zmień wartościzmiennych i uruchom skrypt ponownie.