PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ......

67

Transcript of PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ......

Page 1: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...
Page 2: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

Idź do

• Spis treści• Przykładowy rozdział• Skorowidz

• Katalog online

• Dodaj do koszyka

• Zamów cennik

• Zamów informacjeo nowościach

• Fragmenty książekonline

Helion SAul. Kościuszki 1c44-100 Gliwicetel. 32 230 98 63e-mail: [email protected]© Helion 1991–2011

Katalog książek

Twój koszyk

Cennik i informacje

Czytelnia

Kontakt

• Zamów drukowanykatalog

PHP i MySQL.Od podstaw. Wydanie IV Autor: W. Jason Gilmore

Tłumaczenie: Piotr Rajca

ISBN: 978-83-246-3056-1

Tytuł oryginału: Beginning PHP and MySQL:

From Novice to Professional, Fourth Edition

Format: 172×245, stron: 668

Świat zaawansowanych stron WWW w zasięgu Twoich rąk!

• Jak przygotować środowisko pracy?

• Jak wykorzystać technologię AJAX w połączeniu z PHP?

• Jak połączyć PHP i MySQL w jedną całość?

PHP i MySQL to duet, na którym opiera się ogromna większość ciut bardziej zaawansowanych

stron w sieci. Czemu zawdzięcza on swą popularność? Niezwykłemu dopasowaniu do potrzeb,

łatwej konfiguracji oraz ogromnej społeczności, zawsze chętnej do pomocy. Kiedy zaprzęgniesz

ten zestaw do pracy, już po kilku godzinach zobaczysz jej pierwsze efekty!

Co zrobić, żeby osiągnąć jeszcze więcej? Nic prostszego! Sięgnij po tę książkę i zacznij swoją

przygodę z PHP oraz MySQL. Na samym początku dowiesz się, jak przygotować środowisko pracy,

oraz poznasz podstawy programowania w języku PHP. Potem płynnie przejdziesz do zdobywania

wiedzy na temat programowania obiektowego, wyrażeń regularnych, obsługi formularzy HTML

oraz integracji z usługami katalogowymi LDAP. Nauczysz się wykorzystywać mechanizm sesji,

technologię AJAX oraz Zend Framework. Po przeprowadzeniu Cię przez komplet informacji na

temat PHP autor przedstawi Ci bazę danych MySQL. Poznasz jej mocne elementy, sposoby

podłączania klientów oraz podstawy administracji. Może w to nie wierzysz, ale po przeczytaniu

tej książki nawet skomplikowane mechanizmy bazy MySQL nie będą Ci obce! Na sam koniec

odkryjesz, jak wiedzę na temat PHP oraz MySQL połączyć w całość i zrealizować Twój nawet

najbardziej ambitny projekt! Książka ta jest obowiązkową pozycją na półce każdego entuzjasty

tworzenia dynamicznych stron WWW!

• Przygotowanie środowiska do pracy

• Podstawy PHP – typy danych, zmienne, funkcje, tablice

• Programowanie obiektowe w PHP, obsługa wyjątków i błędów

• Operacje na łańcuchach znaków, wyrażenia regularne

• Obsługa plików i korzystanie z funkcji systemu operacyjnego

• Wykorzystanie pakietów PEAR, szablony stron – pakiet Smarty

• Operacje na dacie i czasie i obsługa formularzy HTML

• Uwierzytelnianie użytkowników i zarządzanie sesją

• Integracja PHP z LDAP

• Zabezpieczanie witryn WWW

• Zastosowanie technologii AJAX z jQuery oraz wykorzystanie Zend Framework

• Możliwości bazy danych MySQL, instalacja i konfiguracja serwera MySQL

• Mechanizmy składowania i typy danych w MySQL, zabezpieczanie serwerów MySQL

• Pobieranie danych z bazy i operacje na nich w PHP

• Wykorzystanie widoków i mechanizm transakcji

Sprawdź, jak wykorzystać możliwości PHP i MySQL

w zakresie projektowania stron internetowych!

Page 3: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

Spis tre�ci

O autorze ......................................................................................................... 19

O recenzencie technicznym .............................................................................. 21

Podzi�kowania ................................................................................................ 23

Wprowadzenie ................................................................................................ 25

Rozdzia� 1. Prezentacja PHP ............................................................................................... 27Historia ........................................................................................................................................... 28

PHP 4 ....................................................................................................................................... 28PHP 5 ....................................................................................................................................... 29PHP 5.3 .................................................................................................................................... 30PHP 6 ....................................................................................................................................... 30

Ogólne cechy języka ..................................................................................................................... 31Praktyczność ........................................................................................................................... 31Możliwości .............................................................................................................................. 32Potencjał .................................................................................................................................. 32Cena ......................................................................................................................................... 33

Podsumowanie .............................................................................................................................. 33

Rozdzia� 2. Konfiguracja �rodowiska ................................................................................. 35Wymagania wstępne instalacji .................................................................................................... 36

Pobieranie serwera Apache .................................................................................................. 36Pobieranie PHP ...................................................................................................................... 36Pobieranie dokumentacji ...................................................................................................... 37

Instalacja Apache i PHP w systemie Linux ............................................................................... 38Instalacja Apache i PHP w systemie Windows ........................................................................ 39Instalacja serwera IIS i PHP w systemie Windows .................................................................. 41Testowanie instalacji .................................................................................................................... 41Konfiguracja PHP ......................................................................................................................... 43

Konfiguracja PHP w trakcie tworzenia w systemach Linux ............................................ 43Modyfikowanie PHP budowanego w systemie Windows ............................................... 44

Konfiguracja PHP w trakcie jego działania ............................................................................... 44Korzystanie z dyrektyw konfiguracyjnych PHP ................................................................ 44Dyrektywy konfiguracyjne PHP .......................................................................................... 46

Page 4: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

4

Wybór edytora .............................................................................................................................. 59Adobe Dreamweaver CS5 ..................................................................................................... 59Notepad++ .............................................................................................................................. 60PDT (PHP Development Tools) .......................................................................................... 60Zend Studio ............................................................................................................................ 60

Wybór firmy udostępniającej serwery WWW ......................................................................... 60Siedem pytań do firm udostępniających serwery WWW ................................................ 61

Podsumowanie .............................................................................................................................. 62

Rozdzia� 3. Podstawy PHP ................................................................................................. 63Umieszczanie kodu PHP na stronach WWW .......................................................................... 63

Domyślna składnia ................................................................................................................ 64Krótkie znaczniki ................................................................................................................... 64Skrypt ....................................................................................................................................... 65Składnia ASP .......................................................................................................................... 65Osadzanie wielu fragmentów kodu ..................................................................................... 65

Komentowanie kodu .................................................................................................................... 66Jednowierszowe komentarze w stylu C++ ......................................................................... 66Składnia skryptów powłoki .................................................................................................. 66Komentarze wielowierszowe, składnia C ........................................................................... 67

Generowanie danych wyjściowych ............................................................................................ 67Instrukcja print() ................................................................................................................... 67Instrukcja echo() .................................................................................................................... 68Instrukcja printf() .................................................................................................................. 69Instrukcja sprintf() ................................................................................................................ 70

Typy danych dostępne w PHP .................................................................................................... 70Skalarne typy danych ............................................................................................................ 70Złożone typy danych ............................................................................................................. 72Konwersja typów danych przy użyciu rzutowania ........................................................... 73Adaptacja typów danych poprzez ich zmienianie ............................................................. 74Funkcje związane z typami danych ..................................................................................... 75Funkcje identyfikujące typ ................................................................................................... 75

Identyfikatory ................................................................................................................................ 76Zmienne ......................................................................................................................................... 76

Deklaracje zmiennych ........................................................................................................... 76Zasięg zmiennych .................................................................................................................. 78Zmienne superglobalne ........................................................................................................ 80

Stałe ................................................................................................................................................. 84Definiowanie stałych ............................................................................................................. 85

Wyrażenia ...................................................................................................................................... 85Operandy ................................................................................................................................ 85Operatory ................................................................................................................................ 85

Umieszczanie wartości w łańcuchach znaków ......................................................................... 91Cudzysłowy ............................................................................................................................. 91Sekwencje sterujące ............................................................................................................... 91Apostrofy ................................................................................................................................ 92Nawiasy klamrowe ................................................................................................................. 92

Page 5: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

5

Składnia heredoc .................................................................................................................... 93Składnia nowdoc .................................................................................................................... 93

Struktury sterujące ........................................................................................................................ 93Instrukcje warunkowe ........................................................................................................... 94Pętle .......................................................................................................................................... 96Instrukcje dołączania plików ............................................................................................. 101

Podsumowanie ............................................................................................................................ 103

Rozdzia� 4. Funkcje .......................................................................................................... 105Wywoływanie funkcji ................................................................................................................. 105Tworzenie funkcji ....................................................................................................................... 106

Przekazywanie argumentów przez wartość ..................................................................... 107Przekazywanie przez referencję ......................................................................................... 107Domyślne wartości argumentów ....................................................................................... 108Stosowanie informacji o typie ............................................................................................ 109Zwracanie wartości z funkcji .............................................................................................. 109Funkcje rekurencyjne .......................................................................................................... 110

Biblioteki funkcji ......................................................................................................................... 113Podsumowanie ............................................................................................................................ 113

Rozdzia� 5. Tablice ........................................................................................................... 115Czym jest tablica? ........................................................................................................................ 115Tworzenie tablic .......................................................................................................................... 116

Tworzenie tablic przy użyciu array() ................................................................................ 117Odczytywanie elementów tablicy przy użyciu list() ....................................................... 118Zapisywanie w tablicy predefiniowanego zakresu wartości .......................................... 118Sprawdzanie, czy zmienna jest tablicą .............................................................................. 119

Wyświetlanie zawartości tablic ................................................................................................. 119Wyświetlanie tablic w ramach testowania skryptu ......................................................... 120

Dodawanie i usuwanie elementów tablic ................................................................................ 121Dodawanie wartości na początku tablicy ......................................................................... 121Dodawanie elementów na końcu tablicy .......................................................................... 121Usuwanie elementu z początku tablicy ............................................................................. 121

Odnajdywanie elementów w tablicach .................................................................................... 122Przeszukiwanie tablic .......................................................................................................... 122Przeszukiwanie tablic z kluczami asocjacyjnymi ............................................................ 122Poszukiwanie wartości w tablicach asocjacyjnych .......................................................... 123Pobieranie kluczy tablicy .................................................................................................... 123Pobieranie wartości z tablicy .............................................................................................. 123

Przeglądanie tablic ...................................................................................................................... 124Pobieranie klucza aktualnego elementu tablicy .............................................................. 124Pobieranie wartości aktualnego elementu tablicy ........................................................... 124Pobieranie aktualnego klucza i wartości .......................................................................... 125Przesuwanie wskaźnika tablicy .......................................................................................... 125Przekazywanie wartości z tablicy do funkcji .................................................................... 126

Określanie wielkości oraz unikalności tablicy ........................................................................ 127Określanie wielkości tablicy ............................................................................................... 127Określanie częstotliwości występowania wartości .......................................................... 127Określanie unikalnych elementów tablicy ....................................................................... 128

Page 6: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

6

Sortowanie tablic ......................................................................................................................... 128Zmiana kolejności elementów tablicy ............................................................................... 129Zamiana kluczy i wartości .................................................................................................. 129Sortowanie tablic .................................................................................................................. 129

Łączenie i dzielenie tablic na różne sposoby ........................................................................... 134Łączenie tablic ...................................................................................................................... 134Rekurencyjne łączenie tablic .............................................................................................. 134Łączenie dwóch tablic ......................................................................................................... 135Pobieranie fragmentu tablicy ............................................................................................. 135Wycinanie elementów z tablicy ......................................................................................... 136Wyznaczanie części wspólnej tablic .................................................................................. 136Określanie części wspólnej tablic asocjacyjnych ............................................................. 137Określanie różnicy tablic .................................................................................................... 137Określanie różnicy tablic asocjacyjnych ........................................................................... 138

Inne przydatne funkcje operujące na tablicach ...................................................................... 139Zwracanie losowego zbioru kluczy ................................................................................... 139Losowa zmiana kolejności elementów tablicy ................................................................. 139Dodawanie wartości tablicy ................................................................................................ 139Dzielenie tablicy ................................................................................................................... 140

Podsumowanie ............................................................................................................................ 140

Rozdzia� 6. Programowanie obiektowe ........................................................................... 141Zalety programowania obiektowego ........................................................................................ 141

Hermetyzacja ........................................................................................................................ 141Dziedziczenie ........................................................................................................................ 142Polimorfizm .......................................................................................................................... 142

Kluczowe pojęcia programowania obiektowego .................................................................... 143Klasy ....................................................................................................................................... 143Obiekty .................................................................................................................................. 144Właściwości .......................................................................................................................... 144Stałe ........................................................................................................................................ 149Metody ................................................................................................................................... 150

Konstruktory i destruktory ....................................................................................................... 153Konstruktory ........................................................................................................................ 153Destruktory ........................................................................................................................... 156

Składowe statyczne ..................................................................................................................... 156Słowo kluczowe instanceof ........................................................................................................ 157Funkcje pomocnicze ................................................................................................................... 158

Sprawdzanie, czy istnieje metoda ...................................................................................... 159Automatyczne wczytywanie klas .............................................................................................. 159Podsumowanie ............................................................................................................................ 160

Rozdzia� 7. Zaawansowane zagadnienia programowania obiektowego ......................... 161Zaawansowane mechanizmy obiektowe niedostępne w PHP .............................................. 162Klonowanie obiektów .................................................................................................................. 162

Przykład klonowania obiektu ............................................................................................. 162Metoda __clone() ................................................................................................................. 163

Page 7: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

7

Dziedziczenie ............................................................................................................................... 164Dziedziczenie klas ................................................................................................................ 165Dziedziczenie i konstruktory .............................................................................................. 166Dziedziczenie i późne wiązanie statyczne ...................................................................... 168

Interfejsy ....................................................................................................................................... 168Implementacja pojedynczego interfejsu ........................................................................... 170Implementacja kilku interfejsów ....................................................................................... 170

Klasy abstrakcyjne ...................................................................................................................... 171Prezentacja przestrzeni nazw .................................................................................................... 172Podsumowanie ............................................................................................................................ 174

Rozdzia� 8. Obs�uga b��dów i wyj�tków .......................................................................... 175Dyrektywy konfiguracyjne ........................................................................................................ 176Rejestracja błędów ...................................................................................................................... 178Obsługa wyjątków ....................................................................................................................... 181

Dlaczego obsługa wyjątków jest wygodna? ...................................................................... 181Implementacja obsługi wyjątków w języku PHP ............................................................ 182Wyjątki SPL .......................................................................................................................... 186

Podsumowanie ............................................................................................................................ 187

Rozdzia� 9. �a�cuchy znaków i wyra�enia regularne ....................................................... 189Wyrażenia regularne .................................................................................................................. 190

Składnia wyrażeń regularnych (w stylu POSIX) ............................................................. 190Funkcje obsługi wyrażeń regularnych (rozszerzony standard POSIX) ....................... 192Składnia wyrażeń regularnych (zgodnych z Perl) ........................................................... 195

Inne funkcje operujące na łańcuchach znaków ...................................................................... 201Określanie długości łańcucha znaków .............................................................................. 202Porównywanie dwóch łańcuchów znaków ...................................................................... 202Zmiana wielkości liter ......................................................................................................... 204Konwersja łańcucha znaków na kod HTML i na odwrót .............................................. 206

Alternatywy dla funkcji używających wyrażeń regularnych ................................................ 210Dopełnianie oraz przycinanie łańcuchów znaków ......................................................... 216Zliczanie znaków i słów ...................................................................................................... 217

Stosowanie PEAR — pakiet Validate_US ............................................................................... 219Instalowanie pakietu Validate_US .................................................................................... 220Stosowanie pakietu Validate_US ....................................................................................... 220

Podsumowanie ............................................................................................................................ 221

Rozdzia� 10. Obs�uga plików i korzystanie z systemu operacyjnego ................................. 223Pobieranie informacji o plikach i katalogach ......................................................................... 224

Przetwarzanie ścieżki .......................................................................................................... 224Określanie wielkości pliku, katalogu i dysku ................................................................... 225Określanie czasu dostępu i modyfikacji ........................................................................... 228

Operacje na plikach .................................................................................................................... 229Pojęcie zasobu ...................................................................................................................... 229Rozpoznawanie znaków nowego wiersza ......................................................................... 229Rozpoznawanie znaku końca pliku ................................................................................... 229Otwieranie i zamykanie pliku ............................................................................................ 230Odczytywanie zawartości plików ...................................................................................... 231

Page 8: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

8

Przesuwanie wskaźnika pliku ............................................................................................. 237Odczytywanie zawartości katalogu ................................................................................... 238

Wykonywanie poleceń systemowych ...................................................................................... 239Usuwanie katalogu .............................................................................................................. 239

Wykonywanie programów z poziomu systemu operacyjnego ............................................ 240Zabezpieczanie danych wejściowych ................................................................................ 241Funkcje do wykonywania programów ............................................................................. 242

Podsumowanie ............................................................................................................................ 244

Rozdzia� 11. PEAR .............................................................................................................. 245Potęga PEAR — konwersja formatów liczbowych ................................................................ 246Instalacja i aktualizacja PEAR ................................................................................................... 246

Instalacja PEAR .................................................................................................................... 247PEAR i firmy udostępniające serwery .............................................................................. 248Aktualizacja PEAR ............................................................................................................... 248

Korzystanie z menedżera pakietów PEAR .............................................................................. 248Przeglądanie zainstalowanych pakietów PEAR .............................................................. 249Pobieranie informacji o zainstalowanych pakietach ...................................................... 249Instalacja wybranego pakietu PEAR ................................................................................. 250Dołączanie pakietów do skryptów .................................................................................... 251Aktualizacja pakietów ......................................................................................................... 252Odinstalowanie pakietu ...................................................................................................... 253Użycie wcześniejszej wersji pakietu .................................................................................. 253

Menedżer pakietów Pyrus ......................................................................................................... 253Instalacja menedżera Pyrus ................................................................................................ 253

Podsumowanie ............................................................................................................................ 254

Rozdzia� 12. Data i czas ..................................................................................................... 255Uniksowy znacznik czasu .......................................................................................................... 255Biblioteka funkcji do obsługi dat i czasu ................................................................................. 256

Weryfikacja dat .................................................................................................................... 256Formatowanie dat i czasu ................................................................................................... 256Konwersja znacznika czasu na zrozumiałą postać .......................................................... 259Posługiwanie się znacznikami czasu ................................................................................. 260

Sztuka czasu ................................................................................................................................. 261Wyświetlanie zlokalizowanych dat i czasu ....................................................................... 261Wyświetlanie daty ostatniej modyfikacji witryny ........................................................... 265Określanie liczby dni w bieżącym miesiącu ..................................................................... 265Określanie liczby dni w podanym miesiącu .................................................................... 265Wyliczanie daty na podstawie różnicy w dniach ............................................................ 266

Usprawnienia obsługi dat i czasu w PHP 5.1+ ....................................................................... 266Konstruktor klasy DateTime .............................................................................................. 267Formatowanie dat ................................................................................................................ 267Określanie daty po utworzeniu obiektu ........................................................................... 267Określanie czasu po utworzeniu obiektu ......................................................................... 268Modyfikowanie dat i czasu ................................................................................................. 268Obliczanie różnicy pomiędzy dwiema datami ................................................................ 268

Podsumowanie ............................................................................................................................ 269

Page 9: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

9

Rozdzia� 13. Obs�uga formularzy HTML ............................................................................. 271PHP i formularze HTML ........................................................................................................... 271

Prosty przykład .................................................................................................................... 272Weryfikacja danych z formularzy ............................................................................................ 273

Usuwanie plików .................................................................................................................. 273Cross-site scripting .............................................................................................................. 274Zabezpieczanie danych wprowadzanych przez użytkowników .................................... 275Weryfikacja i zabezpieczanie danych przy użyciu rozszerzenia Filter ......................... 277Korzystanie ze złożonych komponentów formularzy .................................................... 278

Wykorzystanie PEAR — HTML_QuickForm2 ..................................................................... 280Instalacja pakietu HTML_QuickForm2 ........................................................................... 281Tworzenie i weryfikacja danych prostego formularza ................................................... 281

Podsumowanie ............................................................................................................................ 283

Rozdzia� 14. Uwierzytelnianie u�ytkowników .................................................................... 285Uwierzytelnianie w oparciu o protokół HTTP ....................................................................... 285

Korzystanie z plików .htaccess serwera Apache .............................................................. 286Uwierzytelnianie przy użyciu możliwości PHP ..................................................................... 287

Zmienne PHP związane z uwierzytelnianiem ................................................................. 287Użyteczne funkcje ................................................................................................................ 287Uwierzytelnianie w oparciu o stałe dane .......................................................................... 289Uwierzytelnianie w oparciu o pliki ................................................................................... 289Uwierzytelnianie z wykorzystaniem bazy danych .......................................................... 291Wykorzystanie możliwości PEAR — pakiet Auth_HTTP ............................................ 292

Zarządzanie danymi uwierzytelniającymi ............................................................................... 294Testowanie siły hasła przy użyciu biblioteki CrackLib .................................................. 294Odzyskiwanie haseł przy użyciu jednorazowych adresów URL ................................... 296

Podsumowanie ............................................................................................................................ 298

Rozdzia� 15. Obs�uga przesy�ania plików na serwer ........................................................ 299Przesyłanie plików przy użyciu protokołu HTTP .................................................................. 299Obsługa przesyłanych plików przy użyciu PHP ..................................................................... 300

Dyrektywy konfiguracyjne związane z przesyłaniem plików ........................................ 300Tablica $_FILES ................................................................................................................... 302Funkcje PHP do obsługi przesyłanych plików ................................................................ 302Komunikaty błędów ............................................................................................................ 304Prosty przykład .................................................................................................................... 304

Wykorzystanie PEAR — HTTP_Upload ................................................................................ 305Instalacja pakietu HTTP_Upload ...................................................................................... 305Przesyłanie pliku na serwer ................................................................................................ 306Uzyskiwanie informacji o przesłanym pliku ................................................................... 306Obsługa przesyłania większej liczby plików ..................................................................... 307

Podsumowanie ............................................................................................................................ 308

Rozdzia� 16. Zagadnienia sieciowe .................................................................................... 309DNS, usługi i serwery ................................................................................................................. 310

DNS ........................................................................................................................................ 310Usługi ..................................................................................................................................... 313Tworzenie połączeń używających gniazd ......................................................................... 314

Page 10: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

10

Poczta elektroniczna ................................................................................................................... 316Dyrektywy konfiguracyjne ................................................................................................. 316Wysyłanie wiadomości ze skryptów PHP ........................................................................ 317

Popularne operacje sieciowe ..................................................................................................... 321Testowanie połączenia z serwerem ................................................................................... 321Tworzenie skanera portów ................................................................................................. 322Tworzenie konwertera podsieci ......................................................................................... 322Testowanie przepustowości łącza użytkownika .............................................................. 324

Podsumowanie ........................................................................................................................... 324

Rozdzia� 17. PHP i LDAP ..................................................................................................... 325Stosowanie LDAP w języku PHP ............................................................................................. 326

Konfiguracja LDAP w PHP ................................................................................................ 326Nawiązywanie połączenia z serwerem LDAP .................................................................. 326Pobieranie danych z serwera LDAP .................................................................................. 329Określanie liczby zwróconych rekordów ......................................................................... 331Sortowanie rekordów LDAP .............................................................................................. 332Wstawianie danych LDAP ................................................................................................. 332Aktualizacja danych LDAP ................................................................................................ 334Usuwanie danych z serwera LDAP ................................................................................... 334Operacje na rozpoznawalnych nazwach .......................................................................... 335Obsługa błędów .................................................................................................................... 336

Podsumowanie ............................................................................................................................ 337

Rozdzia� 18. Obs�uga sesji ................................................................................................. 339Czym jest obsługa sesji? ............................................................................................................. 339

Proces obsługi sesji .............................................................................................................. 340Dyrektywy konfiguracyjne ........................................................................................................ 340

Zarządzanie sposobem przechowywania danych sesyjnych ......................................... 340Określanie ścieżki do plików sesji ..................................................................................... 341Automatyczne włączanie sesji ............................................................................................ 341Określanie nazwy sesji ........................................................................................................ 342Wybór ciasteczek lub przepisywania adresów URL ....................................................... 342Automatyczne przepisywanie adresów URL ................................................................... 342Określanie czasu istnienia ciasteczka ................................................................................ 342Określanie ścieżki ciasteczka .............................................................................................. 342Określanie katalogów do przechowywania stron wykorzystujących sesje ..................... 343

Korzystanie z sesji ....................................................................................................................... 344Rozpoczynanie sesji ............................................................................................................. 344Usuwanie sesji ...................................................................................................................... 345Ustawianie i pobieranie identyfikatora sesji .................................................................... 345Tworzenie i usuwanie zmiennych sesyjnych ................................................................... 346Kodowanie i dekodowanie danych sesyjnych ................................................................. 346

Praktyczne przykłady stosowania sesji .................................................................................... 348Automatyczne logowanie powracających użytkowników ............................................. 348Generowanie listy ostatnio odwiedzonych stron ............................................................ 350

Tworzenie własnych procedur obsługi sesji ........................................................................... 351Określanie funkcji stosowanych w obsłudze sesji ........................................................... 352Obsługa sesji z użyciem bazy danych MySQL ................................................................. 352

Podsumowanie ............................................................................................................................ 355

Page 11: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

11

Rozdzia� 19. Stosowanie szablonów z pakietem Smarty ................................................... 357Czym jest mechanizm obsługi szablonów? ............................................................................. 357Przedstawienie mechanizmu Smarty ....................................................................................... 359Instalacja Smarty ......................................................................................................................... 360Korzystanie ze Smarty ................................................................................................................ 361Logika prezentacji w szablonach Smarty ................................................................................. 363

Komentarze .......................................................................................................................... 363Modyfikatory zmiennych ................................................................................................... 363Struktury sterujące ............................................................................................................... 366Instrukcje .............................................................................................................................. 369

Tworzenie plików konfiguracyjnych ....................................................................................... 371Korzystanie ze zmiennych konfiguracyjnych .................................................................. 372

Stosowanie arkuszy stylów w szablonach Smarty .................................................................. 373Wykorzystanie pamięci podręcznej ......................................................................................... 374

Określanie czasu przechowywania stron .......................................................................... 374Eliminowanie narzutów dzięki użyciu metody isCached() ........................................... 375Przechowywanie w pamięci podręcznej wielu wersji tego samego szablonu .......... 375Kilka ostatnich uwag o stosowaniu pamięci podręcznej ............................................... 376

Podsumowanie ............................................................................................................................ 377

Rozdzia� 20. Us�ugi sieciowe ............................................................................................. 379Dlaczego powstały usługi sieciowe? ......................................................................................... 380RSS ................................................................................................................................................ 381

Format RSS ........................................................................................................................... 382Prezentacja SimplePie ................................................................................................................ 383

Instalacja SimplePie ............................................................................................................. 384Przetwarzanie kanału RSS przy użyciu SimplePie .......................................................... 384Przetwarzanie większej liczby kanałów ............................................................................ 386

SimpleXML .................................................................................................................................. 387Wczytywanie dokumentów XML ...................................................................................... 387Analiza XML ......................................................................................................................... 389

Podsumowanie ............................................................................................................................ 391

Rozdzia� 21. Zabezpieczanie witryn WWW ........................................................................ 393Bezpieczna konfiguracja PHP ................................................................................................... 394

Dyrektywy konfiguracyjne związane z bezpieczeństwem ............................................. 394Ukrywanie szczegółów konfiguracji ........................................................................................ 395

Ukrywanie serwera Apache ................................................................................................ 396Ukrywanie PHP ................................................................................................................... 396

Ukrywanie wrażliwych danych ................................................................................................. 398Ukrywanie głównego katalogu dokumentów .................................................................. 398Zabronienie dostępu do plików z określonymi rozszerzeniami ................................... 398

Szyfrowanie danych .................................................................................................................... 399Funkcje szyfrujące PHP ...................................................................................................... 399Pakiet MCrypt ...................................................................................................................... 400

Podsumowanie ............................................................................................................................ 401

Page 12: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

12

Rozdzia� 22. Korzystanie z technologii Ajax przy u�yciu jQuery i PHP ................................ 403Przedstawienie Ajaksa ................................................................................................................ 403Prezentacja jQuery ...................................................................................................................... 405

Instalacja jQuery .................................................................................................................. 405Prosty przykład .................................................................................................................... 405Odpowiadanie na zdarzenia ............................................................................................... 406Biblioteka jQuery i DOM ................................................................................................... 407

Mechanizm weryfikacji dostępności nazwy użytkownika ................................................. 409Określanie, czy nazwa użytkownika jest dostępna ......................................................... 410

Podsumowanie ............................................................................................................................ 412

Rozdzia� 23. Tworzenie witryn dla odbiorców z ca�ego �wiata ......................................... 415Tłumaczenie witryn przy użyciu pakietu Gettext .................................................................. 416

Etap 1. Aktualizacja skryptów ............................................................................................ 416Etap 2. Tworzenie repozytorium lokalizacji .................................................................... 417Etap 3. Tworzenie plików tłumaczeń ................................................................................ 418Etap 4. Przetłumaczenie tekstów ....................................................................................... 418Etap 5. Generowanie plików binarnych ........................................................................... 419Etap 6. Określanie odpowiedniego języka w skryptach ................................................. 419

Lokalizacja dat, liczb i godzin ................................................................................................... 420Podsumowanie ............................................................................................................................ 421

Rozdzia� 24. Wprowadzenie do stosowania Zend Framework ........................................... 423Przedstawienie wzorca MVC .................................................................................................... 423Szkielety aplikacji PHP ............................................................................................................... 425

CakePHP ............................................................................................................................... 426Solar ....................................................................................................................................... 426Symfony ................................................................................................................................. 426Zend Framework .................................................................................................................. 426

Przedstawienie Zend Framework ............................................................................................. 427Instalacja Zend Framework ................................................................................................ 428Tworzenie pierwszej witryny używającej Zend Framework ......................................... 428

Podsumowanie ............................................................................................................................ 439

Rozdzia� 25. Prezentacja bazy danych MySQL ................................................................... 441Dlaczego MySQL jest tak popularny? ...................................................................................... 441

Elastyczność .......................................................................................................................... 442Moc ........................................................................................................................................ 442Elastyczne opcje licencyjne ................................................................................................. 444(Hiper)aktywna społeczność użytkowników ................................................................... 445

Ewolucja serwera MySQL .......................................................................................................... 445MySQL 4 ............................................................................................................................... 445MySQL 5 ............................................................................................................................... 446MySQL 5.1 ............................................................................................................................ 447MySQL 5.4 oraz 5.5 ............................................................................................................. 447

Najważniejsi użytkownicy serwerów MySQL ......................................................................... 448craigslist ................................................................................................................................. 448Wikipedia .............................................................................................................................. 448Inni znaczący użytkownicy ................................................................................................. 448

Podsumowanie ............................................................................................................................ 448

Page 13: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

13

Rozdzia� 26. Instalacja i konfiguracja serwera MySQL ....................................................... 451Pobieranie serwera MySQL ....................................................................................................... 451Instalacja MySQL ........................................................................................................................ 452

Instalacja serwera MySQL w systemie Linux ................................................................... 452Instalacja i konfiguracja MySQL w systemie Windows ................................................. 455

Określanie hasła administratora ............................................................................................... 457Uruchamianie i zatrzymywanie serwera MySQL .................................................................. 458

Ręczna kontrola pracy procesu .......................................................................................... 458Konfiguracja i optymalizacja serwera MySQL ....................................................................... 459

Skrypt mysqld_safe .............................................................................................................. 459Parametry konfiguracyjne i optymalizacyjne .................................................................. 460

Plik my.cnf ................................................................................................................................... 463Konfiguracja PHP pod kątem współpracy z MySQL ............................................................ 465

Rekonfiguracja PHP w systemie Linux ............................................................................ 465Rekonfiguracja PHP w systemie Windows ...................................................................... 465

Podsumowanie ............................................................................................................................ 466

Rozdzia� 27. Wiele klientów MySQL ................................................................................... 467Prezentacja klientów obsługiwanych z wiersza poleceń ............................................................ 467

Klient mysql .......................................................................................................................... 467Klient mysqladmin .............................................................................................................. 475Inne przydatne klienty ........................................................................................................ 477Opcje klientów ..................................................................................................................... 480

Klienty MySQL z graficznym interfejsem użytkownika ....................................................... 482Aplikacja phpMyAdmin ............................................................................................................ 483Podsumowanie ............................................................................................................................ 484

Rozdzia� 28. Mechanizmy sk�adowania i typy danych MySQL ........................................... 485Mechanizmy składowania ......................................................................................................... 485

MyISAM ................................................................................................................................ 486IBMDB2I ............................................................................................................................... 488InnoDB .................................................................................................................................. 488MEMORY ............................................................................................................................. 489MERGE ................................................................................................................................. 490FEDERATED ....................................................................................................................... 490ARCHIVE ............................................................................................................................. 492CSV ........................................................................................................................................ 492EXAMPLE ............................................................................................................................. 492BLACKHOLE ....................................................................................................................... 492Pytania i odpowiedzi dotyczące mechanizmów składowania ....................................... 493

Typy danych i atrybuty .............................................................................................................. 494Typy danych ......................................................................................................................... 494

Operacje na bazach danych i tabelach ..................................................................................... 502Operacje na bazach danych ................................................................................................ 502Operacje na tabelach ........................................................................................................... 504Modyfikowanie struktury tabel ......................................................................................... 506Baza danych INFORMATION_SCHEMA ...................................................................... 507

Podsumowanie ............................................................................................................................ 509

Page 14: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

14

Rozdzia� 29. Zabezpieczanie serwerów MySQL .................................................................. 511Co należy zrobić na samym początku? .................................................................................... 512Zabezpieczanie procesu serwera MySQL ................................................................................ 513System uprawnień serwera MySQL .......................................................................................... 513

Sposób działania systemu uprawnień ............................................................................... 514Gdzie są przechowywane informacje o uprawnieniach? ............................................... 516

Zarządzanie użytkownikami i uprawnieniami ....................................................................... 523Tworzenie użytkowników .................................................................................................. 524Usuwanie użytkowników .................................................................................................... 524Zmiana nazwy istniejących użytkowników ..................................................................... 524Polecenia GRANT i REVOKE ........................................................................................... 525Przeglądanie posiadanych uprawnień .............................................................................. 530

Ograniczanie dostępu do zasobów ........................................................................................... 530Bezpieczne połączenia z serwerem MySQL ............................................................................ 531

Opcje polecenia GRANT .................................................................................................... 531Opcje SSL .............................................................................................................................. 533Uruchamianie serwera MySQL obsługującego bezpieczne połączenia ....................... 534Nawiązywanie połączenia przy użyciu klienta obsługującego SSL ............................... 534Określanie opcji SSL w pliku konfiguracyjnym my.cnf ................................................. 534

Podsumowanie ............................................................................................................................ 535

Rozdzia� 30. Wspó�praca PHP i MySQL .............................................................................. 537Wymagania instalacji ................................................................................................................. 538

Włączanie rozszerzenia mysqli w systemach Linux oraz Unix ..................................... 538Włączanie rozszerzenia mysqli w systemie Windows .................................................... 538Stosowanie sterownika MySQL ......................................................................................... 538Zarządzanie uprawnieniami użytkowników .................................................................... 539Korzystanie z przykładowych danych .............................................................................. 539

Praktyczne wykorzystanie rozszerzenia mysqli ..................................................................... 540Konfiguracja i nawiązywanie połączenia ........................................................................... 540Obsługa błędów połączenia ................................................................................................ 541Pobieranie informacji o błędach ........................................................................................ 541Przechowywanie informacji o połączeniu w osobnym pliku ........................................ 542

Operacje na bazie danych .......................................................................................................... 543Przesyłanie zapytań do bazy danych ................................................................................. 543Przetwarzanie wyników zapytania .................................................................................... 546Określanie liczby zwróconych oraz zmodyfikowanych wierszy ................................... 547Korzystanie z poleceń przygotowanych ........................................................................... 548

Stosowanie transakcji ................................................................................................................. 552Włączanie trybu automatycznego zatwierdzania ........................................................... 553Zatwierdzanie transakcji ..................................................................................................... 553Wycofywanie transakcji ...................................................................................................... 553

Podsumowanie ............................................................................................................................ 553

Rozdzia� 31. Prezentacja PDO ............................................................................................ 555Kolejna warstwa abstrakcji bazy danych? ............................................................................... 556Stosowanie PDO ......................................................................................................................... 557

Instalacja PDO ..................................................................................................................... 557Obsługiwane bazy danych .................................................................................................. 558

Page 15: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

15

Nawiązywanie połączenia z serwerem i wybór bazy danych ........................................ 558Obsługa błędów .................................................................................................................... 560Pobieranie i ustawianie atrybutów .................................................................................... 562Wykonywanie zapytań ........................................................................................................ 563Prezentacja poleceń przygotowanych ............................................................................... 564Pobieranie danych ............................................................................................................... 567Tworzenie powiązanych kolumn ...................................................................................... 569Stosowanie transakcji .......................................................................................................... 570

Podsumowanie ............................................................................................................................ 571

Rozdzia� 32. Podprogramy sk�adowane ............................................................................. 573Czy warto używać podprogramów składowanych? ............................................................... 574

Zalety podprogramów składowanych ............................................................................... 574Wady podprogramów składowanych ............................................................................... 574

Implementacja podprogramów składowanych w serwerze MySQL ................................... 575Tworzenie podprogramów składowanych ....................................................................... 575Deklarowanie i ustawianie zmiennych ............................................................................. 578Wykonywanie podprogramu składowanego ................................................................... 579Tworzenie i stosowanie złożonych podprogramów składowanych ............................. 579Wywoływanie podprogramu z innego podprogramu .................................................... 586Modyfikowanie podprogramów składowanych .............................................................. 586Usuwanie podprogramów składowanych ........................................................................ 586Wyświetlanie informacji o statusie podprogramu .......................................................... 587Wyświetlanie polecenia użytego do utworzenia podprogramu .................................... 588Obsługa warunków .............................................................................................................. 588

Integracja podprogramów składowanych w aplikacjach internetowych ........................... 589Strona do wyliczania i prezentacji premii ........................................................................ 589Pobieranie wielu wierszy wyników ................................................................................... 590

Podsumowanie ............................................................................................................................ 590

Rozdzia� 33. Wyzwalacze ................................................................................................... 591Prezentacja wyzwalaczy ............................................................................................................. 591

Jakie są zastosowania wyzwalaczy? ................................................................................... 592Wykonywanie akcji przed zdarzeniem ............................................................................. 592Wykonywanie akcji po zdarzeniu ..................................................................................... 592Wyzwalacze wykonywane przed zdarzeniem (BEFORE) i po nim (AFTER) ................ 593

Obsługa wyzwalaczy w serwerze MySQL ................................................................................ 594Tworzenie wyzwalaczy ........................................................................................................ 594Wyświetlanie istniejących wyzwalaczy ............................................................................. 596Modyfikacja wyzwalaczy ..................................................................................................... 598Usuwanie wyzwalaczy ......................................................................................................... 598

Wykorzystanie wyzwalaczy w aplikacjach internetowych ............................................... 598Podsumowanie ............................................................................................................................ 599

Rozdzia� 34. Widoki ........................................................................................................... 601Przedstawienie widoków ........................................................................................................... 602Korzystanie z widoków w serwerze MySQL ........................................................................... 602

Tworzenie i wykonywanie widoków.................................................................................. 602Wyświetlanie informacji o widokach................................................................................. 607

Page 16: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

16

Modyfikowanie widoków .................................................................................................... 609Usuwanie widoków .............................................................................................................. 609Widoki aktualizujące............................................................................................................ 609

Stosowanie widoków w aplikacjach internetowych................................................................ 610Podsumowanie ............................................................................................................................. 611

Rozdzia� 35. Praktyczne przyk�ady stosowania zapyta� .................................................... 613Przykładowe dane ....................................................................................................................... 614Tabelaryczna prezentacja danych przy wykorzystaniu PEAR ........................................... 614

Instalacja pakietu HTML_Table ........................................................................................ 615Tworzenie prostej tabeli ...................................................................................................... 615Tworzenie czytelniejszych wierszy .................................................................................... 616Generowanie tabel na podstawie informacji z bazy danych .......................................... 617

Sortowanie wyników .................................................................................................................. 618Podział wyników na strony ....................................................................................................... 619Wyświetlanie numerów stron ................................................................................................... 621Pobieranie danych z wielu tabel przy użyciu podzapytań .................................................. 623

Porównywanie przy użyciu podzapytań ........................................................................... 624Stosowanie podzapytań do sprawdzania istnienia danych ............................................ 624Pielęgnacja baz danych przy użyciu podzapytań ............................................................ 625Stosowanie podzapytań w skryptach PHP ....................................................................... 625

Przeglądanie wyników przy wykorzystaniu kursora ............................................................. 626Podstawowe informacje o kursorach ................................................................................ 626Tworzenie kursora ............................................................................................................... 627Otwieranie kursora .............................................................................................................. 627Korzystanie z kursora .......................................................................................................... 627Zamykanie kursora .............................................................................................................. 628Stosowanie kursorów w skryptach PHP ........................................................................... 628

Podsumowanie ............................................................................................................................ 629

Rozdzia� 36. Indeksacja i wyszukiwanie ............................................................................ 631Indeksacja baz danych ................................................................................................................ 631

Indeks główny ...................................................................................................................... 632Indeksy unikalne .................................................................................................................. 633Indeksy normalne ................................................................................................................ 634Indeksy pełnotekstowe ........................................................................................................ 635Indeksacja — najlepsze praktyki ....................................................................................... 639

Wyszukiwanie z użyciem formularzy HTML ......................................................................... 639Realizacja prostego wyszukiwania ..................................................................................... 639Rozszerzanie możliwości wyszukiwania ........................................................................... 640Stosowanie wyszukiwania pełnotekstowego .................................................................... 642

Podsumowanie ............................................................................................................................ 643

Rozdzia� 37. Transakcje ..................................................................................................... 645Co to jest transakcja? .................................................................................................................. 645Możliwości stosowania transakcji na serwerze MySQL ........................................................ 646

Wymagania systemowe ....................................................................................................... 646Tworzenie tabeli ................................................................................................................... 646

Page 17: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SPIS TRE�CI

17

Przykładowy projekt ................................................................................................................... 647Tworzenie tabel i przykładowych danych ........................................................................ 647Realizacja przykładowej transakcji .................................................................................... 648Rady dotyczące korzystania z transakcji .......................................................................... 650

Tworzenie aplikacji transakcyjnych w PHP ........................................................................... 650Modyfikacja wyprzedaży .................................................................................................... 650

Podsumowanie ............................................................................................................................ 652

Rozdzia� 38. Importowanie i eksportowanie danych ......................................................... 653Przykładowa tabela ..................................................................................................................... 653Separacja poszczególnych elementów danych ........................................................................ 654Importowanie danych ................................................................................................................ 654

Importowanie danych przy użyciu polecenia LOAD DATA INFILE ......................... 655Importowanie danych przy użyciu klienta mysqlimport ............................................... 658Wczytywanie danych przy użyciu skryptu PHP ............................................................. 660

Eksportowanie danych ............................................................................................................... 661Polecenie SELECT INTO OUTFILE ................................................................................ 661

Podsumowanie ............................................................................................................................ 664

Skorowidz ..................................................................................................... 665

Page 18: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

R O Z D Z I A � 2

���

Konfiguracja �rodowiska

Czytelnik ma zapewne zamiar uruchamiać swoje aplikacje, używając istniejącej infrastruktury lub korzystającz usług firmy zajmującej się prowadzeniem i udostępnianiem serwerów WWW. W ten sposób można uniknąćkonieczności dogłębnego poznawania tajników konfiguracji i administracji serwerów WWW. Niemniej większośćprogramistów preferuje tworzenie aplikacji na lokalnym komputerze lub laptopie bądź na dedykowanymserwerze. Można zatem przypuszczać, że znajomość instalacji PHP i serwera WWW (w naszym przypadkubędą to serwery Apache i IIS) i tak będzie konieczna.

Podstawowa znajomość tego procesu ma także jeszcze jedną zaletę: zapewnia możliwość dokładniejszegopoznania wielu możliwości i cech PHP oraz serwera WWW, o których zapewnie nie wspominano by w większościwstępnych prezentacji języka. Wiedza ta może się okazać bardzo przydatna podczas określania, czy środowiskoserwera spełnia wymagania konkretnego projektu, oraz podczas rozwiązywania problemów, jakie mogą siępojawić podczas instalowania dodatkowego oprogramowania, a mogą wynikać z niewłaściwej lub błędnejinstalacji PHP.

W tym rozdziale Czytelnik przejdzie proces instalacji PHP na serwerach działających zarówno w systemachWindows, jak i Linux. Ponieważ w przypadku braku serwera WWW PHP jest raczej bezużyteczne, zostanątakże przedstawione sposoby instalacji serwera Apache w systemach Windows i Linux oraz serwera IIS w systemieWindows.

Pod koniec rozdziału zamieszono informacje dotyczące edytorów oraz zintegrowanych środowiskprogramistycznych (IDE), umożliwiających pisanie programów w języku PHP. Podałem także listę kluczowychpytań, jakie należy zadać każdej firmie udostępniającej serwery WWW, z której usług potencjalnie chcemyskorzystać.

Konkretnie rzecz ujmując, w tym rozdziale zostały opisane następujące zagadnienia:� Instalacja serwera Apache i języka PHP w systemie Linux.� Instalacja serwerów Apache i IIS oraz języka PHP w systemie Windows.� Testowanie instalacji w celu sprawdzenia, czy wszystkie komponenty środowiska dobrze działają,

oraz sposoby rozwiązywania najczęściej występujących problemów.� Konfiguracja PHP w celu zaspokojenia praktycznie wszystkich wymagań, jakie można by sobie

wyobrazić.� Wybór odpowiedniego środowiska programistycznego, które sprawi, że pisanie kodu PHP będzie

szybsze i bardziej wydajne.� Wybór firmy udostępniającej serwery WWW, której oferta spełnia konkretne wymagania.

Page 19: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

36

Wymagania wst�pne instalacjiZacznijmy proces instalacji od pobrania niezbędnego oprogramowania. W najprostszym przypadku koniecznebędzie pobranie języka PHP oraz odpowiedniego serwera WWW (w zależności od używanej platformy systemoweji preferencji będzie to serwer Apache lub IIS 7). Jeśli używana platforma systemowa zmusza do pobraniadodatkowego oprogramowania, to informacje na ten temat zostaną podane w odpowiedniej części rozdziału.

� Wskazówka W tym rozdziale Czytelnik zostanie przeprowadzony przez proces r�cznej instalacji i konfiguracji niezb�dnego�rodowiska. Samodzielna instalacja PHP i serwera Apache jest dobrym pomys�em, gdy umoliwia poznanie wieludost�pnych opcji konfiguracyjnych, co z kolei pozwala uzyska� wi�ksz� kontrol� nad sposobem dzia�ania witryny.Je�li jednak Czytelnik i tak ma zamiar skorzysta� z us�ug firmy prowadz�cej serwery WWW i zaley mu na szybkimuruchomieniu �rodowiska oraz zabraniu si� do pracy, to warto rozway� zastosowanie pakietu XAMPP(www.apachefriends.org/en/xampp.html) — bezp�atnej, zautomatyzowanej instalacji zawieraj�cej serwer Apacheoraz kilka innych komponentów, takich jak PHP, Perl oraz MySQL. XAMPP jest dost�pny w wersjach przeznaczonychdla systemów Windows oraz Linux, a aktualnie trwaj� prace nad wersjami dla systemów Mac OS X oraz Solaris. Je�liCzytelnik planuje korzysta� z PHP wraz z serwerem IIS, sugeruj� post�powa� zgodnie z informacjami zamieszczonymiw podrozdziale „Instalacja serwera IIS i PHP w systemie Windows”.

Pobieranie serwera ApacheObecnie pakiety z serwerem Apache są dostępne we wszystkich najpopularniejszych dystrybucjachsystemu Linux. Jeśli zatem Czytelnik używa jednej z tych platform systemowych, to istnieje całkiem dużeprawdopodobieństwo, że serwer ten już jest zainstalowany na jego komputerze, a jeśli nie, to można to łatwozrobić, korzystając z systemu zarządzania pakietami używanego w danej dystrybucji Linuksa (na przykładw systemie Ubuntu będzie to polecenie apt-get). Jeśli Czytelnik używa systemu Mac OS X, to serwer Apachejest w nim instalowany domyślnie. W każdym z tych przypadków można przejść bezpośrednio do kolejnegopodrozdziału, „Pobieranie PHP”. Jeśli jednak Czytelnik zdecyduje się samodzielnie zainstalować serwerApache, to proszę czytać dalej.

Ze względu na ogromne obciążenie zaleca się, by podczas pobierania serwera Apache skorzystać z jegokopii (ang. mirror) zlokalizowanej możliwie jak najbliżej naszego miejsca pobytu. Samo wyświetlenie stronyo adresie http://httpd.apache.org/download.cgi spowoduje, że witryna Apache spróbuje samodzielnie określićnajbliższy serwer. Sugeruję wybór najnowszej stabilnej wersji serwera Apache, co umożliwi pobranie jegokodów źródłowych w formie plików tar.gz lub bz2 bądź pliku binarnego przygotowanego w kilku wersjachprzeznaczonych dla różnych systemów operacyjnych. Jeśli Czytelnik używa systemu Linux i planujeprzygotowanie serwera ze źródeł, to powinien pobrać archiwum z jego kodami.

Jeśli Czytelnik używa systemu Windows i chciałby zainstalować na nim serwer Apache, powinien pobraćjego najnowszą stabilną, binarną wersję z katalogu binaries/win32. Dostępne są dwie binarne wersje serwera —wyposażona w mechanizmy obsługi SSL oraz pozbawiona tych możliwości. Obie wersje posiadają adekwatnenazwy, które ułatwią ich rozróżnienie. Na potrzeby środowiska używanego do tworzenia aplikacji PHPsugeruję pobranie wersji bez obsługi SSL.

Pobieranie PHPPodobnie jak Apache, także język PHP jest obecnie dostępny we wszystkich dystrybucjach systemu Linux,a w systemie Mac OS X jest instalowany domyślnie. W tych przypadkach sugeruję, by Czytelnik postępowałzgodnie z wytycznymi dotyczącymi instalacji i konfiguracji środowiska, dostosowanymi do używanegosystemu operacyjnego. W pozostałych przypadkach należy pobrać najnowszą stabilną wersję PHP, klikającłącze Downloads umieszczone u góry witryny PHP, a następnie wybierając jedną z dostępnych wersji:

Page 20: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

WYMAGANIA WST�PNE INSTALACJI

37

� Pliki źródłowe (ang. source): jeśli Czytelnik nie chce korzystać z systemu zarządzania pakietamisystemu Linux bądź jeśli ma zamiar skompilować PHP ze źródeł w systemie Windows, to powinienwybrać archiwum odpowiedniego typu. Przygotowywanie środowiska PHP ze źródeł w systemieWindows nie jest rozwiązaniem zalecanym i nie zostało ono opisane w tej książce. Za wyjątkiembardzo szczególnych sytuacji gotowa wersja binarna PHP przygotowana dla systemu Windowspowinna spełnić wszystkie nasze potrzeby i wymagania. Wersje te są dostępne w archiwach zapisanychw formatach bzip2 lub gzip. Warto pamiętać, że ich zawartość jest taka sama — różne formatykompresji zastosowano wyłącznie dla wygody użytkownika.

� Pakiet zip dla systemu Windows (ang. zip package): jeśli Czytelnik planuje używać PHP wraz z serweremApache w systemie Windows, powinien wybrać tę wersję, gdyż to właśnie ona została opisana w dalszejczęści rozdziału.

� Instalator dla systemu Windows (ang. Windows installer): ta wersja udostępnia wygodny programinstalacyjny, który nie tylko instaluje i konfiguruje środowisko PHP, ale pozwala także na konfiguracjęserwerów IIS, Apache oraz Xitami. Choć można jej używać w przypadku korzystania z serwera Apache,to jednak mnie nie udało się doprowadzić instalacji do pomyślnego zakończenia, a program zasugerowałpobranie binarnego pakietu przeznaczonego dla systemu Windows. Dodatkowo, jeśli Czytelnikma zamiar skonfigurować PHP do współpracy z serwerem IIS, powinien zajrzeć do podrozdziału„Instalacja serwera IIS i PHP w systemie Windows”. Dzięki współpracy firm Microsoft i ZendTechnologies Ltd. proces ten został znacznie usprawniony, co szczegółowo opisałem.

Po wybraniu odpowiedniej wersji witryna określi kopię serwera położoną najbliżej naszego miejscapobytu. Aby rozpocząć pobieranie, wystarczy wybrać jeden z dostępnych serwerów.

� Wskazówka Je�li mamy zamiar poeksperymentowa� z najnowsz�, jeszcze rozwijan� wersj� PHP, to mona j� pobra�(zarówno w formie róde�, jak i plików binarnych) z witryny http://snaps.php.net/. Naley pami�ta�, e niektóre z tychwersji nie s� przeznaczone do zastosowania w �rodowiskach produkcyjnych.

Pobieranie dokumentacjiZarówno serwer Apache, jak i język PHP udostępniają doskonałą, wręcz wzorcową dokumentację, szczegółowoopisującą praktycznie każdy ich aspekt. Można je przeglądać w internecie (odpowiednio na stronachhttp://httpd.apache.org oraz www.php.net) lub pobrać i czytać na lokalnym komputerze.

Pobieranie dokumentacji serwera ApacheW skład każdej dystrybucji serwera Apache wchodzi najnowsza wersja jego dokumentacji, zapisana w formatachXML oraz HTML i dostępna w różnych wersjach językowych. Jest ona umieszczana w katalogu docs w kataloguinstalacyjnym.

W razie konieczności uaktualnienia posiadanej wersji dokumentacji, pobrania jej w innym formacie(takim jak PDF lub CHM — format pomocy systemu Windows) lub przeglądnięcia jej na internecie należyzajrzeć na stronę http://httpd.apache.org/docs-project.

Pobieranie dokumentacji PHPDokumentacja języka PHP jest dostępna w ponad 20 językach i w wielu różnych formatach, takich jakpojedynczy plik HTML, grupa wielu stron HTML czy też plik CHM. Wszystkie te wersje są generowane napodstawie głównych plików zapisanych w formacie DocBook, które można pobrać z serwera CVS projektuPHP (na przykład po to, by wygenerować dokumentację w jeszcze innym formacie). Dokumentacja jestumieszczona w katalogu manual wewnątrz katalogu instalacyjnego PHP.

Page 21: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

38

Jeśli Czytelnik będzie musiał zaktualizować lokalną wersję dokumentacji lub zechce pobrać ją w innymformacie, powinien przejść na stronę http://www.php.net/docs.php i kliknąć odpowiednie łącze.

Instalacja Apache i PHP w systemie LinuxTen podrozdział opisuje proces budowania serwera Apache oraz PHP ze źródeł w systemach Linux.Potrzebny będzie do tego odpowiedni kompilator ANSI-C oraz system budowania; oba te komponenty sądostępne w systemach zarządzania pakietami we wszystkich głównych dystrybucjach Linuksa. Oprócz tegoPHP wymaga dodatkowo narzędzi Flex (http://flex.sourceforge.net/) oraz Bison(http://www.gnu.org/software/bison/bison.html), natomiast serwer Apache wymaga języka Perl (w wersji conajmniej 5.003). Poza tym przeprowadzenie całego procesu wymaga dostępu do konta superużytkownika(root) na serwerze docelowym.

Dla wygody przed rozpoczęciem całego procesu warto przenieść oba pakiety do wybranego, jednegokatalogu, na przykład: usr/src/. Poniżej opisano czynności, jakie należy wykonać w ramach procesu instalacji:

1. Rozpakować archiwa zip i tar z kodami źródłowymi serwera Apache i PHP. W zamieszczonychponiżej przykładowych poleceniach litery X reprezentują numer najnowszej stabilnej wersji pobranejzgodnie z informacjami podanymi we wcześniejszej części rozdziału.%>gunzip httpd-2_X_XX.tar.gz%>tar xvf httpd-2_X_XX.tar%>gunzip php-XX.tar.gz%>tar xvf php-XX.tar

2. Skonfigurować i zbudować serwer Apache. W najprostszym przypadku warto zastosować opcję--enable-so, która nakazuje włączenie możliwości wczytywania wspólnych modułów.%>cd httpd-2_X_XX%>./configure --enable-so [other options]%>make

3. Zainstalować Apache (tę operację trzeba będzie wykonać z konta superużytkownika):%>make install

4. Skonfigurować, zbudować i zainstalować PHP (dodatkowe informacje, dotyczące modyfikowaniadomyślnych ustawień instalacji oraz dołączania dodatkowych rozszerzeń, można znaleźć w punkcie„Konfiguracja PHP w trakcie budowania w systemach Linux”). W poniższym przykładzieAPACHE_INSTALL_DIR należy zastąpić ścieżką dostępu do katalogu instalacyjnego serwera Apache, np./usr/local/apache2:%>cd ../php-X_XX%>./configure --with-apxs2=APACHE_INSTALL_DIR/bin/apxs [other options]%>make%>make install

5. PHP jest dostarczany wraz z plikiem konfiguracyjnym, kontrolującym wiele aspektów działania języka.Plik ten jest znany jako php.ini, jednak w pakiecie z kodami źródłowymi nosi on nazwę php.ini-dist.Należy go skopiować do odpowiedniego katalogu i zmienić jego nazwę na php.ini. Podrozdział„Konfiguracja PHP”, zamieszczony nieco dalej, zawiera szczegółowe informacje na temat przeznaczeniaoraz zawartości tego pliku. Warto zauważyć, że można go umieścić w dowolnym miejscu, jeśli jednakwybierzemy lokalizację inną niż domyślna, to należy odpowiednio skonfigurować PHP, używającw tym celu opcji --with-config-file-path. Warto także pamiętać, że mamy do dyspozycji równieżinny plik konfiguracyjny — php.ini-recommended. Określa on wartości różnych niestandardowychustawień, a jego przeznaczeniem jest lepsze zabezpieczenie i zoptymalizowanie konfiguracji PHP,choć może się zdarzyć, że nie będzie ona w pełni zgodna z niektórymi starszymi aplikacjami PHP.Warto zastanowić się nad zastosowaniem tego pliku konfiguracyjnego zamiast, wspominanegowcześniej, php.ini-dist. Jeśli Czytelnik zdecyduje się na to, powinien wykonać następujące polecenie:%> cp php.ini-recommended /usr/local/lib/php.ini

Page 22: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

INSTALACJA APACHE I PHP W SYSTEMIE WINDOWS

39

6. Otworzyć plik konfiguracyjny serwera Apache, noszący nazwę httpd.conf, i upewnić się, że sąw nim umieszczone przedstawione poniżej wiersze kodu. (Plik ten znajduje się w kataloguAPACHE_INSTALL_DIR/conf/httpd.conf). Gdyby ich nie było, to należy je dodać. Warto zapisać je w tychmiejscach pliku konfiguracyjnego, gdzie są umieszczone inne dyrektywy LoadModule oraz AddType:LoadModule php5_module modules/libphp5.soAddType application/x-httpd-php .php

Można mi wierzyć lub nie, ale to już wszystko. Teraz wystarczy ponownie uruchomić serwer Apache,wydając w tym celu polecenie:

%>/usr/local/apache/bin/apachectl restart

A teraz proszę kontynuować lekturę od rozdziału „Testowanie instalacji”.

� Wskazówka Zastosowana w punkcie 6. dyrektywa AddType kojarzy konkretny typ MIME z konkretnym rozszerzeniemlub ich grup�. Rozszerzenie .php jest jedynie sugesti�, zamiast niego mona zastosowa� dowolne inne, na przyk�ad.html, .php5 lub .jason. Oprócz tego z danym typem mona skojarzy� wi�cej rozszerze�, wystarczy je wszystkie zapisa�w jednym wierszu, oddzielaj�c od siebie znakami odst�pu. Cho� niektórzy preferuj� stosowanie PHP wraz z rozszerzeniem.html, to naley pami�ta�, e w razie zastosowania takiego rozwi�zania kade odebrane przez serwer �daniedotycz�ce pliku HTML spowoduje przetworzenie jego zawarto�ci przez interpreter PHP. Cho� niektórzy mog� uzna�takie rozwi�zanie za wygodne, to jednak trzeba pami�ta�, e spowoduje ono obnienie wydajno�ci serwera.

Instalacja Apache i PHP w systemie WindowsWcześniejsze wersje serwera Apache przeznaczone dla systemów Windows nie były w żaden sposóboptymalizowane pod ich kątem. Jednak serwer Apache2 został całkowicie przepisany właśnie w celuwykorzystania specyficznych cech tej platformy. Nawet jeśli Czytelnik nie planuje docelowo uruchamiaćswojej aplikacji w systemie Windows, to jednak serwer ten będzie stanowił doskonałą platformę testowądla tych wszystkich osób, które preferują system Windows. Oto czynności, jakie należy wykonać w celuzainstalowania serwera Apache i PHP w systemie Windows:

1. Uruchomić program instalacyjny serwera Apache, dwukrotnie klikając ikonę plikuapache_X.X.XX-win32-x86-no_ssl.msi. Litery X w tej nazwie reprezentują numer najnowszej stabilnejwersji serwera, pobranej zgodnie z informacjami zamieszczonymi we wcześniejszej części rozdziału.

2. Proces instalacji rozpocznie się od wyświetlenia ekranu powitalnego. Warto poświęcić chwilęna przeczytanie zamieszczonych na nim informacji, a następnie należy kliknąć przycisk Next.

3. W następnym oknie zostanie wyświetlona umowa licencyjna. Należy ją uważnie przeczytać. Jeślizgadzamy się z jej postanowieniami, można kliknąć przycisk Next.

4. Kolejne okno zawiera różne informacje dotyczące serwera. Należy je przeczytać i kliknąć przycisk Next. 5. Następnie program poprosi o podanie różnych informacji związanych z działaniem serwera, takich jak:

nazwa domeny sieciowej, nazwa serwera oraz adres poczty elektronicznej administratora serwera. JeśliCzytelnik zna te informacje, to powinien je podać; w przeciwnym razie w pierwszych dwóch polachwystarczy wpisać localhost, a w trzecim podać dowolny adres. Informacje te można później zmienićw dowolnym momencie w pliku konfiguracyjnym httpd.conf. Dodatkowo będziemy musieli podjąćdecyzję, czy serwer Apache ma działać jako usługa dostępna dla wszystkich użytkowników sytemuWindows, czy tylko dla bieżącego. Jeśli chcemy, by Apache był uruchamiany automatycznie podczasstartu systemu, to należy wybrać opcję usługi dostępnej dla wszystkich użytkowników. Po dokonaniuwyboru należy przejść dalej, klikając przycisk Next.

6. Wybrać typ instalacji: Typical (typowa) lub Custom (dowolna). Jeśli Czytelnik chce wybrać instalowaneelementy serwera, to należy wybrać opcję Custom — w kolejnym oknie dialogowym będzie można naprzykład zaznaczyć, by nie instalować dokumentacji serwera. Jeśli jednak nie chcemy wprowadzaćżadnych zmian, wystarczy zaznaczyć opcję Typical i kliknąć przycisk Next.

Page 23: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

40

7. Program poprosi o wskazanie docelowego folderu. Domyślnie jest nim folder C:\Program Files\ApacheGroup. Warto jednak zastanowić się nad zmianą jego nazwy na C:\apache. Cokolwiek Czytelnikwybierze, powinien pamiętać, że w tej książce zostanie opisana instalacja serwera w katalogu C:\apache.

8. Kliknąć przycisk Install, by dokończyć proces instalacji. W ten sposób instalacja serwera Apachezostała zakończona. Teraz kolej na PHP.

9. Rozpakować pakiet instalacyjny PHP i umieścić jego zawartość w katalogu C:\php. Katalog instalacyjnymoże mieć dowolną nazwę, przy czym warto zwrócić uwagę, by nie zawierała ona znaków odstępu.W książce opisałem instalację w katalogu C:\php.

10. Przejść do katalogu C:\apache\conf i otworzyć plik httpd.conf w edytorze. 11. Dodać do pliku konfiguracyjnego trzy przedstawione poniżej wiersze. Warto umieścić je bezpośrednio

pod blokiem dyrektyw LoadModule, umieszczonym w sekcji Global Environment (środowisko ogólne).LoadModule php_module c:/php/php5apache2_2.dllAddType application/x-httpd-php .phpPHPIniDir "c:\php"

� Wskazówka Zastosowana w punkcie 11. dyrektywa AddType kojarzy konkretny typ MIME z konkretnym rozszerzeniemlub ich grup�. Rozszerzenie .php jest jedynie sugesti�, zamiast niego mona zastosowa� dowolne inne, na przyk�ad.html, .php5 lub .jason. Oprócz tego z danym typem mona skojarzy� wi�cej rozszerze�, wystarczy je wszystkie zapisa�w jednym wierszu, oddzielaj�c od siebie znakami odst�pu. Cho� niektórzy preferuj� stosowanie PHP wraz z rozszerzeniem.html, to naley pami�ta�, e w razie zastosowania takiego rozwi�zania kade odebrane przez serwer �danie dotycz�ce plikuHTML spowoduje przetworzenie jego zawarto�ci przez interpreter PHP. Cho� niektórzy mog� uzna� takie rozwi�zanieza wygodne, to jednak trzeba pami�ta�, e spowoduje ono obnienie wydajno�ci serwera. Dlatego te zalecane jestskorzystanie z ogólnie przyj�tej konwencji i zastosowanie rozszerzenia .php.

12. Zmienić nazwę pliku php.ini-dist na php.ini i skopiować go do katalogu C:\php (w przypadku wersji 5.3.0PHP zmieniono nazwy plików konfiguracyjnych, które noszą teraz odpowiednio nazwy php.ini-developmentoraz php.ini-production; a zatem w razie korzystania z tej wersji PHP należy wybrać jeden z tych plikówi zmienić jego nazwę). Plik konfiguracyjny php.ini zawiera setki dyrektyw odpowiedzialnych za określaniei dostosowywanie działania PHP. Opis jego przeznaczenia oraz szczegółowe informacje na tematzawartości można znaleźć w dalszej części rozdziału, w podrozdziale „Konfiguracja PHP”. Warto takżepamiętać, że mamy do dyspozycji również inny plik konfiguracyjny — php.ini-recommended. Określaon wartości różnych niestandardowych ustawień, a jego przeznaczeniem jest lepsze zabezpieczeniei zoptymalizowanie konfiguracji PHP, choć może się zdarzyć, że nie będzie ona w pełni zgodnaz niektórymi starszymi aplikacjami PHP. Warto zastanowić się nad zastosowaniem tego plikukonfiguracyjnego zamiast, wspominanego wcześniej, php.ini-dist.

13. Jeśli Czytelnik używa jednego z systemów Windows NT, Windows 2000, XP, Vista1, to należy wybraćopcję Start/Panel sterowania/Wydajność i konserwacja/Narzędzia administracyjne/Usługi. W razieużywania systemu Windows 98 proszę zajrzeć od informacji podanych pod koniec kolejnego punktu.

14. Odszukać Apache na liście i upewnić się, że usługa jest uruchomiona. Jeśli nie jest, to należy jązaznaczyć i kliknąć opcję Uruchom usługę wyświetloną w lewej kolumnie. Jeśli serwer jest jużuruchomiony, to należy zaznaczyć go na liście i kliknąć łącze Uruchom ponownie usługę; w ten sposóbzostaną uwzględnione zmiany wprowadzone w pliku konfiguracyjnym httpd.conf. Następnie należykliknąć pozycję serwera Apache prawym przyciskiem myszy i wybrać opcję Właściwości. Należy sięupewnić, że na liście Typ uruchamiania jest wybrana opcja Automatyczny. Jeśli Czytelnik wciąż jeszczeużywa systemu Windows 95/98, to konieczne będzie samodzielne ponowne uruchomienie serweraprzy użyciu skrótu umieszczonego w menu Start.

1 W systemie Windows 7 należy wybrać opcję Start/Panel sterowania/System i zabezpieczenia/Narzędzia administracyjne/Usługi

— przyp. tłum.

Page 24: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

INSTALACJA SERWERA IIS I PHP W SYSTEMIE WINDOWS

41

Instalacja serwera IIS i PHP w systemie WindowsMicrosoft Windows wciąż pozostaje preferowanym systemem operacyjnym, nawet wśród programistówwspierających i promujących oprogramowanie otwarte; w końcu, wziąwszy pod uwagę jego dominującąpozycję rynkową, całkiem sensowne jest to, że większość osób preferuje korzystanie z tego dobrze znanegośrodowiska. Jednak ze względów stabilności oraz wydajności zdecydowanie najlepszym rozwiązaniem wciążpozostanie wdrażanie aplikacji napisanych w PHP na serwerze Apache działającym w systemie operacyjnymLinux.

Rozwiązanie to niesie jednak ze sobą pewien problem, jeśli programista lubi pisać, a nawet wdrażaćaplikacje na serwerze IIS działającym w systemie Windows. W ostatnich latach Microsoft, we współpracyz firmą Zend Technologies Ltd., poczynił ogromne starania mające na celu poprawienie zarówno stabilności,jak i wydajności środowiska PHP uruchamianego na IIS i Windows.

W 2009 roku Microsoft wykonał kolejny znaczący krok w kierunku bezproblemowego uruchamianiaśrodowiska PHP na serwerze IIS, oddając do dyspozycji programistów produkt Microsoft Web PlatformInstaller. Produkt ten znacznie ułatwia instalację środowiska do tworzenia aplikacji internetowych w różnychkonfiguracjach, także składających się z serwera IIS i PHP. Aby zainstalować IIS i PHP w systemie Windows 7,Vista, Server 2003 lub Server 2008, wystarczy wejść na witrynę http://php.iis.net/ i kliknąć ogromny przyciskInstall PHP.

Zakładając, że Czytelnik jeszcze nie zainstalował produktu Web Platform Installer, to niebawem powiniento zrobić. Zazwyczaj uruchomienie tego instalatora wymaga posiadania uprawnień administracyjnych.Po pobraniu programu Czytelnik zostanie poproszony o zainstalowanie PHP. W tej książce zostanie zastosowananieco starsza wersja PHP (5.2.14), niemniej powinna ona w zupełności wystarczyć do wykonania przeważającejwiększości zamieszczonych przykładów. Aby kontynuować proces instalacji, proszę kliknąć przycisk Install,a następnie przeczytać i zaakceptować licencję. Można mi wierzyć lub nie, jednak po zakończeniu instalacji naużywanym komputerze znajdzie się prawidłowo skonfigurowane środowisko PHP. Sposób jego przetestowaniazostał opisany w kolejnym podrozdziale.

� Wskazówka Microsoft Web Platform Installer nie dzia�a w systemie Windows XP, nie oznacza to jednak, e osobykorzystaj�ce z tego systemu maj� pecha. W lipcu 2010 roku Microsoft udost�pni� darmowy produkt o nazwie IISDeveloper Express (http://learn.iis.net), który obs�uguje system Windows XP oraz wszystkie najnowsze modu�y serweraIIS 7, w tym take FastCGI, konieczny do uruchomienia PHP. Konfiguracja �rodowiska PHP i IIS jest nieco bardziejz�oona w przypadku uruchamiania PHP i nie opisz� jej w tej ksi�ce, niemniej bardzo wiele informacji na ten tematmona znale� w internecie.

W czasie gdy pisałem tę książkę, konsola Web Platform Installer nie potrafiła zainstalować języka PHP,co oznacza, że należało instalować go ręcznie, korzystając z narzędzia do zarządzania programami systemuWindows. W systemie Windows 7 można je było uruchomić, klikając opcję Odinstaluj program w panelusterowania.

Testowanie instalacjiNajlepszym sposobem na sprawdzenie instalacji PHP jest próba wykonania skryptu napisanego w tym języku.A zatem należy uruchomić edytor tekstów, utworzyć nowy plik i wpisać w nim poniższe wiersze kodu:

<?php phpinfo();?>

Proszę zapisać plik, nadając mu nazwę phpinfo.php. W przypadku korzystania z serwera Apache plik tennależy umieścić w katalogu htdocs. W razie korzystania z serwera IIS — w katalogu C:\inetpub\wwwroot.

Page 25: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

42

Teraz pozostaje tylko otworzyć przeglądarkę i wyświetlić plik, podając adres http://localhost/phpinfo.php.Należy zwrócić uwagę, że nie można otworzyć tego skryptu, korzystając z opcji Plik/Otwórz przeglądarki,gdyż w takim przypadku nie zostanie on przetworzony i wykonany przez serwer.

Jeśli wszystko pójdzie dobrze, to w przeglądarce powinny zostać wyświetlone wyniki podobne do tychz rysunku 2.1. Jeśli Czytelnik próbuje uruchomić skrypt w witrynie działającej na serwerze WWW jakiegośdostawcy usług internetowych i w efekcie uzyskuje komunikat informujący, że funkcja phpinfo() zostaławyłączona z powodów bezpieczeństwa, to konieczne będzie stworzenie innego skryptu testowego. W takimprzypadku można skorzystać ze skryptu przedstawionego poniżej, którego wykonanie spowoduje wyświetlenieprostego komunikatu.

<?php echo "Prosty, lecz efektywny test dzia�ania PHP!";?>

� Wskazówka Wykonanie funkcji phpinfo() jest doskona�ym sposobem zdobycia informacji na temat zainstalowanego�rodowiska PHP, gdy przedstawia ona wiele danych na temat serwera WWW, jego �rodowiska oraz dost�pnych rozszerze�.

Rysunek 2.1. Wyniki generowane przez funkcję phpinfo()

Page 26: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP

43

Jeśli podczas instalowania środowiska nie pojawiły się żadne zauważalne błędy, a pomimo to nie sąwyświetlane oczekiwane wyniki, może to wynikać z jednego lub kilku poniższych problemów:

� Jeśli serwer Apache był konfigurowany własnoręcznie, to zmiany w jego plikach konfiguracyjnych niezostaną uwzględnione aż do momentu jego powtórnego uruchomienia. Dlatego też należy pamiętać,by po wprowadzeniu zmian związanych z PHP do pliku konfiguracyjnego httpd.conf ponownieuruchomić serwer.

� Zastosowanie nieprawidłowych znaków lub poleceń w pliku konfiguracyjnym spowoduje, że nie udasię ponownie uruchomić serwera.

� Należy sprawdzić, czy każdy plik zawierający kod PHP posiada odpowiednie rozszerzenie, zdefiniowanew pliku konfiguracyjnym httpd.conf. Jeśli na przykład w pliku konfiguracyjnym określiliśmy, że tylkorozszerzenia .php będą reprezentowały pliki PHP, to nie należy próbować umieszczać kodu PHPw plikach z rozszerzeniem .html.

� Należy upewnić się, że kod PHP umieszczony w pliku został zapisany pomiędzy znacznikami <?phporaz ?>. Jeśli tego nie zrobimy, to kod PHP może zostać wyświetlony w przeglądarce.

� Czytelnik utworzył plik o nazwie index.php i bezskutecznie stara się odwołać do niego tak jak dodomyślnego pliku indeksu (poprzez podanie w adresie URL samej nazwy katalogu, bez nazwy pliku,na przykład: www.przyklad.com/onas/ oraz www.przyklad.com/onas/index.html). Jednak serwerApache uznaje za domyślne pliki indeksu wyłącznie pliki index.html, dlatego też konieczne będziedodanie do pliku konfiguracyjnego Apache dyrektywy DirectoryIndex zawierającej nazwę naszegoindeksu — index.php.

Konfiguracja PHPChoć podstawowa instalacja PHP w zupełności wystarczy dla większości początkujących użytkowników,to jednak istnieje duże prawdopodobieństwo, że już niedługo Czytelnik będzie chciał zmodyfikować domyślneustawienia konfiguracyjne i poeksperymentować z dodatkami firm niezależnych, które nie są standardowodołączane do PHP. W tym podrozdziale Czytelnik dowie się, jak można modyfikować działanie PHPi dostosowywać je do swoich szczególnych potrzeb.

Konfiguracja PHP w trakcie tworzenia w systemach LinuxZbudowanie PHP ze źródeł, opisane we wcześniejszej części rozdziału, w zupełności wystarcza, by rozpocząćpracę z tym językiem. Należy jednak pamiętać, że mamy do dyspozycji także wiele dodatkowych opcji.Pełną listę flag konfiguracyjnych (a jest ich ponad 200) można wyświetlić przy użyciu polecenia:

%>./configure --help

Aby zmodyfikować proces budowania PHP, wystarczy dodać jedną lub większą liczbę flag do poleceniaconfigure, podając w razie konieczności odpowiednią wartość. Załóżmy na przykład, że chcielibyśmywzbogacić tworzone środowisko PHP o możliwości korzystania z protokołu FTP, które domyślnie nie sąwłączone. W tym celu etap konfiguracji PHP należy zmodyfikować w następujący sposób:

%>./configure --with-apxs2=/usr/local/apache/bin/apxs --enable-ftp

W ramach kolejnego przykładu załóżmy, że chcemy korzystać z rozszerzenia bzip2. W tym celu wystarczyzmienić konfigurację PHP w poniższy sposób:

%>./configure --with-apxs2=/usr/local/apache/bin/apxs \ >--with-bz2=[KATALOG_INSTALACYJNY]

Jednym z problemów, jakie najczęściej przytrafiają się początkującym użytkownikom, jest założenie, żezastosowanie odpowiedniej flagi konfiguracyjnej jest równoznaczne z udostępnieniem pożądanych możliwościw budowanym środowisku PHP. To nieprawda. Trzeba bowiem pamiętać, że konieczne jest także zainstalowanieoprogramowania, które w rzeczywistości odpowiada za obsługę danego rozszerzenia PHP. W ostatnim przykładzie,wykorzystującym rozszerzenie bzip2, konieczne będzie wcześniejsze zainstalowanie Java Development Kit (JDK).

Page 27: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

44

Modyfikowanie PHP budowanego w systemie WindowsDo wersji PHP 5.1 oraz 5.2.X (najnowszych wersji PHP dostępnych w czasie, gdy powstawała ta książka)dołączonych jest w sumie 45 rozszerzeń. Jednak użycie któregokolwiek z nich wymaga usunięcia znakukomentarza z odpowiedniego wiersza pliku konfiguracyjnego php.ini. Aby na przykład uaktywnićrozszerzenie XML-RPC, należy wprowadzić w pliku konfiguracyjnym kilka niewielkich modyfikacji:

1. Otworzyć plik php.ini, odszukać w nim dyrektywę extension_dir i przypisać jej wartość C:\php\ext.Jeśli Czytelnik zainstalował PHP w innym katalogu, to należy podać odpowiednią ścieżkę.

2. Odszukać wiersz ;extension=php_xmlrpc.dll, usunąć znak średnika (;) z początku wiersza, zapisaćmodyfikację i zamknąć plik.

3. Ponownie uruchomić serwer WWW, co sprawi, że rozszerzenie stanie się dostępne i będzie można z niegokorzystać w skryptach PHP. Warto także pamiętać, że niektóre rozszerzenia posiadają dodatkowedyrektywy konfiguracyjne, które można znaleźć w dalszej części pliku konfiguracyjnego php.ini.

Czasami może się okazać, że włączanie pewnych rozszerzeń PHP będzie wymagało zainstalowaniadodatkowego oprogramowania. Szczegółowe informacje dotyczące poszczególnych rozszerzeń możnaznaleźć w dokumentacji PHP.

Konfiguracja PHP w trakcie jego dzia�aniaZarówno w systemach Linux, jak i Windows istnieje możliwość zmiany zachowania środowiska PHP w trakciejego działania. Zapewnia ją plik konfiguracyjny php.ini. Zawiera on setki dyrektyw konfiguracyjnych kontrolującychdziałanie PHP oraz jego rozszerzeń. W dalszej części tego podrozdziału zostały przedstawione najczęściejstosowane dyrektywy konfiguracyjne PHP: ich przeznaczenie, zasięg, zakres oraz wartości domyślne.

Korzystanie z dyrektyw konfiguracyjnych PHPZanim przejdziemy do poznawania poszczególnych dyrektyw konfiguracyjnych, w tym punkcie zostanąopisane różne sposoby manipulowania nimi — przy wykorzystaniu pliku konfiguracyjnego php.ini, plikówkonfiguracyjnych serwera Apache httpd.conf i .htaccess oraz bezpośrednio z poziomu skryptów PHP.

Plik konfiguracyjny php.iniW skład dystrybucji języka PHP wchodzą dwa wzorcowe pliki konfiguracyjne: php.ini-dist oraz php.ini-recommended(w wersji 5.3.0 języka noszą one odpowiednio nazwy: php.ini-development oraz php.ini-production). InstalującPHP, należy wybrać jeden z nich i zmienić jego nazwę na php.ini (dodatkowo w przypadku instalowania PHPw systemie Windows należy skopiować plik php.ini do katalogu wskazanego w dyrektywie PHPIniDirumieszczonej w pliku konfiguracyjnym httpd.conf serwera Apache). Zalecane jest zastosowanie drugiegoz nich, gdyż przypisuje on sugerowane wartości wielu dyrektywom konfiguracyjnym. Zastosowanie siędo tego zalecenia może zaoszczędzić wiele czasu i wysiłku, które w przeciwnym razie trzeba by poświęcićna zabezpieczanie i dostrajanie działania PHP — pamiętajmy bowiem, że plik php.ini zawiera ponad 200dyrektyw konfiguracyjnych.

Choć domyślne wartości ustawień konfiguracyjnych w ogromnym stopniu pomagają w szybkimi bezproblemowym uruchomieniu PHP, to jednak najprawdopodobniej Czytelnik będzie chciał wprowadzićpewne zmiany w sposobie jego działania. Dlatego też warto dowiedzieć się czegoś więcej zarówno o nim, jaki o umieszczonych w nim parametrach konfiguracyjnych. Wyczerpujące informacje opisujące wiele dostępnychparametrów, ich przeznaczenie oraz zasięg można znaleźć w dalszej części rozdziału, w punkcie„Dyrektywy konfiguracyjne PHP”.

Php.ini jest globalnym plikiem konfiguracyjnym PHP, podobnie jak plik httpd.conf w przypadku serweraApache. W wersji PHP 5.3.0 dokonano w nim znaczących zmian, jednak zarówno w wersjach wcześniejszych,jak i późniejszych jego zawartość została podzielona na 12 głównych sekcji:

Page 28: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP W TRAKCIE JEGO DZIA�ANIA

45

� opcje języka,� Safe mode (bezpieczny tryb działania PHP),� kolorowanie składni,� różne ustawienia,� ograniczenia dostępu do zasobów,� obsługa i rejestracja błędów (zagadnienia te zostały opisane w rozdziale 8.),� obsługa danych,� ścieżki dostępu i katalogi,� przesyłanie plików na serwer (opisane w rozdziale 15.),� opakowania strumieni,� rozszerzenia wczytywane dynamicznie,� ustawienia modułów.

Wiele spośród dyrektyw stosowanych w pliku php.ini opisałem w punkcie „Dyrektywy konfiguracyjne PHP”,zamieszczonym w dalszej części rozdziału. W kolejnych rozdziałach będą prezentowane ustawienia odnoszącesię do opisywanych zagadnień.

Na początku warto poświęcić nieco czasu, by przyjrzeć się podstawowym, ogólnym cechom składnistosowanej w pliku php.ini. Jest to prosty plik tekstowy, zawierający wyłącznie komentarze oraz dyrektywywraz z przypisywanymi im wartościami. Oto jego fragment:

;; Allow the <? tag;short_open_tag = Off

Wiersze rozpoczynające się znakiem średnika (;) są komentarzami; w powyższym przykładzie parametrowishort_open_tag zostaje przypisana wartość Off.

Dokładny moment, gdy zmiany wprowadzane w pliku php.ini zostaną uwzględnione, zależy od sposobuzainstalowania PHP. Jeśli język został zainstalowany jako binarny plik CGI, plik konfiguracyjny jestodczytywany podczas każdego wywołania PHP, a to oznacza, że zmiany zostaną uwzględnione natychmiast.Jeśli jednak PHP został zainstalowany jako moduł serwera Apache, to plik konfiguracyjny php.ini jest odczytywanytylko raz — w momencie uruchamiania usługi (nazywanej także demonem) serwera. W tym przypadku,by zmiany zostały uwzględnione, konieczne jest ponowne uruchomienie serwera.

Pliki httpd.conf oraz .htaccess serwera ApacheW przypadku gdy język PHP jest uruchamiany jako moduł serwera Apache, wiele spośród dyrektywkonfiguracyjnych PHP można modyfikować w plikach httpd.conf oraz .htaccess. Można to zrobić,poprzedzając określenie wartości dyrektywy konfiguracyjnej jednym z czterech słów kluczowych:

� php_value: ustawia wartość podanej dyrektywy.� php_flag: ustawia wartość podanej dyrektywy logicznej.� php_admin_value: ustawia wartość określonej dyrektywy. Różnica pomiędzy tym słowem kluczowym

a php_value polega na tym, że php_admin_value nie można używać w plikach .htaccess, a wartościustawionej przy jego użyciu nie można przesłaniać w definicjach wirtualnych hostów ani w plikach.htaccess.

� php_admin_flag: ustawia wartość podanej dyrektywy. Różnica pomiędzy tym słowem kluczowyma php_flag polega na tym, że php_admin_flag nie można używać w plikach .htaccess, a wartościustawionej przy jego użyciu nie można przesłaniać w definicjach wirtualnych hostów ani w plikach.htaccess.

Page 29: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

46

Aby na przykład wyłączyć możliwość stosowania tak zwanych krótkich znaczników (ang. short tags)i jednocześnie uniemożliwić późniejsze modyfikacje tej dyrektywy, można umieścić w pliku httpd.confnastępujący wiersz:

php_admin_flag short_open_tag Off

Wewn�trz wykonywanego skryptu PHPTrzecim sposobem określania ustawień konfiguracyjnych PHP, posiadającym najmniejszy zasięg oddziaływania,jest wykorzystanie funkcji ini_set(). Załóżmy na przykład, że chcemy zmodyfikować maksymalnydopuszczalny czas wykonywania skryptu. W tym celu wystarczy umieścić na samym początku pliku PHPnastępujący wiersz kodu:

ini_set('max_execution_time', '60');

Zasi�g dyrektyw konfiguracyjnychCzy dyrektywny konfiguracyjne można modyfikować w dowolnym miejscu? Odpowiedź na to pytaniejest przecząca, a brak takiej możliwości jest w głównej mierze podyktowany względami bezpieczeństwa.Każda z dyrektyw konfiguracyjnych PHP ma swój zasięg i można ją modyfikować wyłącznie wewnątrz niego.Dostępne są cztery zasięgi dyrektyw:

� PHP_INI_PERDIR: wartość dyrektywy można określać w plikach php.ini, httpd.conf oraz .htaccess;� PHP_INI_SYSTEM: wartość dyrektywy można określać w plikach php.ini oraz httpd.conf;� PHP_INI_USER: wartość dyrektywy można określać w skryptach PHP;� PHP_INI_ALL: wartość dyrektywy można określać w dowolnym miejscu.

Dyrektywy konfiguracyjne PHPW tej części rozdziału zostanie przedstawionych wiele podstawowych dyrektyw konfiguracyjnych PHP.Prócz ogólnej definicji dla każdej z nich zostanie podany jej zasięg oraz domyślna wartość. Ponieważ możnaprzypuszczać, że Czytelnik będzie określał wartości dyrektyw w pliku php.ini, będę przedstawiał je w takisposób, w jaki są zapisane w tym pliku.

Należy także pamiętać, że przedstawione tu dyrektywy w przeważającej większości odnoszą się do ogólnegodziałania PHP; dyrektywy związane z poszczególnymi rozszerzeniami lub z wybranymi aspektami PHP,szczegółowo opisywanymi w kolejnych rozdziałach książki, zostaną przedstawione w dalszych rozdziałach,w ramach prezentacji konkretnych zagadnień.

Opcje j�zykaDyrektywy umieszczone w tej części pliku konfiguracyjnego mają wpływ na najbardziej podstawowe aspektydziałania PHP. Czytelnik na pewno będzie chciał poświęcić trochę czasu na ich dokładniejsze poznanie.Trzeba przy tym pamiętać, że zostały tu opisane jedynie wybrane, najczęściej używane dyrektywy. Wartopoświęcić trochę czasu na przejrzenie pliku php.ini i sprawdzenie, jakie dyrektywy są dostępne.

� Ostrze�enie Cho� dokumentacja PHP wci� podaje domy�lne warto�ci poszczególnych dyrektyw, to jednakreorganizacja i wydzielenie dwóch wersji pliku php.ini: php.ini-development, przeznaczonej do tworzenia aplikacji,oraz php.ini-production, przeznaczonej do uycia w �rodowiskach produkcyjnych — sprawia, e znaczenie s�owa„domy�lna” zosta�o uzalenione od kontekstu. Innymi s�owy, warto�ci wielu dyrektyw uytych w wybranej wersji plikuphp.ini b�d� inne od warto�ci tych samych dyrektyw stosowanych w drugiej wersji pliku. Z tego wzgl�du w tej ksi�cepostanowi�em post�pi� wbrew przyj�tym konwencjom i za warto�ci domy�lne uzna�em te, które zosta�y zastosowanew pliku konfiguracyjnym php.ini-development.

Page 30: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP W TRAKCIE JEGO DZIA�ANIA

47

engine = On | OffZasięg: PHP_INI_ALL; wartość domyślna: On.

Ten parametr określa, czy mechanizm PHP jest włączony, czy nie. Wyłączenie go spowoduje, żeśrodowisko PHP w ogóle nie będzie używane. Oczywiście, jeśli planujemy używać PHP, powinniśmypozostawić jego domyślną wartość.

zend.ze1_compatibility_mode = On | OffZasięg: PHP_INI_ALL; wartość domyślna: Off.

Około trzy lata po udostępnieniu wersji 5.0 PHP wciąż powszechnie używana jest poprzednia wersjajęzyka — PHP 4.X. Jednym z powodów tak przedłużonego cyklu aktualizacji używanej wersji języka są bardzoduże różnice w możliwościach obiektowych, występujące pomiędzy PHP 4 i 5. Ta dyrektywa stara się przywrócićniektóre wcześniejsze sposoby działania języka, umożliwiając uruchamianie, bez żadnych modyfikacji,aplikacji przystosowanych do PHP 4 w środowisku PHP 5.

� Uwaga Dyrektywa zend.ze1_compatibility_mode nigdy nie dzia�a�a zgodnie z zamierzeniami twórców i w wersjiPHP 5.3.0 zosta�a usuni�ta.

short_open_tag = On | OffZasięg: PHP_INI_ALL; wartość domyślna: Off.

Elementy skryptu PHP są zapisywane pomiędzy specjalnymi znacznikami. Dostępne są cztery formatytych znaczników, a najkrótszy z nich jest określany jako krótkie znaczniki otwierające (ang. short open tags)i ma następującą postać:

<? echo "prosta instrukcja PHP";?>

Być może Czytelnik zwrócił uwagę, że ta sama składnia jest używana w języku XML, co w niektórychokolicznościach może być przyczyną problemów. Dlatego też zapewniono możliwość wyłączenia obsługitego formatu znaczników PHP. Jeśli dyrektywie short_open_tag zostanie przypisana wartość On, stosowaniekrótkich znaczników otwierających będzie dozwolone, w przeciwnym razie nie będzie można ich używać.

asp_tags = On | OffZasięg: PHP_INI_ALL; wartość domyślna: Off.

PHP obsługuje także znaczniki stosowane w technologii ASP. Wyglądają one w następujący sposób:

<% echo "prosta instrukcja PHP";%>

Jeśli Czytelnik korzystał wcześniej z tej technologii i chciałby dalej stosować znaną mu składnię, to możeto zrobić, przypisując tej dyrektywie wartość On.

precision = liczba_ca�kowitaZasięg: PHP_INI_ALL; wartość domyślna: 14.

PHP obsługuje wiele typów danych, w tym także liczby zmiennoprzecinkowe. Ten parametr określa,ile liczb znaczących będzie wyświetlanych podczas prezentowania wartości zmiennoprzecinkowych. Wartozwrócić uwagę, że w systemach Windows dyrektywie tej przypisywana jest domyślnie wartość 12, natomiastw systemach Linux — wartość 14.

Page 31: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

48

y2k_compliance = On | OffZasięg: PHP_INI_ALL; wartość domyślna: On.

Któż mógłby nie pamiętać o przerażającym problemie roku 2000, o którym było tak głośno dekadę temu?W rozwiązanie tego problemu zaangażowano nadludzkie wysiłki i choć jest to bardzo mało prawdopodobne,to jednak wciąż mogą się pojawić osoby używające przestarzałych przeglądarek, w których problem roku 2000wciąż może występować. Jeśli z jakichś przedziwnych powodów Czytelnik jest przekonany, że znacząca częśćużytkowników odwiedzających jego witrynę zalicza się do tej kategorii, to może wyłączyć ten parametr,w przeciwnym razie należy pozostawić jego wartość domyślną.

output_buffering = On | Off | liczba_ca�kowitaZasięg: PHP_INI_SYSTEM; wartość domyślna 4096.

Każdy, kto ma choćby minimalne doświadczenie w pisaniu skryptów PHP, bez wątpienia będzie znałponiższe komunikaty2:

"Cannot add header information – headers already sent""Oops, php_set_cookie called after header has been sent"

Są one generowane, gdy skrypt próbuje zmodyfikować nagłówki odpowiedzi po ich wysłaniu doprzeglądarki użytkownika. Najczęściej sytuacja ta występuje, gdy użytkownik próbuje ustawić wartośćciasteczka (ang. cookie) po przesłaniu fragmentu generowanej strony do przeglądarki użytkownika, co nie jestmożliwe, gdyż nagłówki (niewidoczne przez użytkownika, lecz wykorzystywane przez przeglądarkę) zawsze sąwysyłane przed jakąkolwiek treścią strony. W PHP 4.0 pojawiło się rozwiązanie tego uciążliwego problemu— buforowanie danych wyjściowych (ang. output buffering). Gdy mechanizm buforowania jest włączony,PHP przesyła wszystkie wygenerowane dane za jednym razem, po zakończeniu wykonywania skryptu. W tensposób nagłówki można modyfikować w dowolnym miejscu skryptu, ponieważ żaden fragment odpowiedzinie został jeszcze wysłany do przeglądarki użytkownika. Włączenie tej dyrektywy poprzez przypisanie jejwartości On spowoduje, że będzie stosowany mechanizm buforowania danych. Dodatkowo istnieje możliwośćograniczenia wielkości bufora (co niejawnie powoduje włącznie buforowania) poprzez określenie w dyrektywieoutput_buffering maksymalnej liczby bajtów, jakie można w nim będzie zapisać.

Jeśli Czytelnik nie planuje korzystać z buforowania danych wyjściowych, powinien wyłączyć ten mechanizm,gdyż powoduje on nieznaczne pogorszenie wydajności. Najprostszym rozwiązaniem problemu nagłówkówjest, oczywiście, tworzenie ich przed przesłaniem do przeglądarki jakiejkolwiek treści generowanej strony.

output_handler = �a�cuchZasięg: PHP_INI_ALL; wartość domyślna: NULL.

Ta interesująca dyrektywa nakazuje PHP przekazanie całych danych wyjściowych do funkcji przed ichostatecznym przesłaniem do przeglądarki użytkownika. Załóżmy na przykład, że przed przesłaniem danychdo przeglądarki chcielibyśmy je skompresować — obsługę takich danych zapewniają wszystkie nowoczesneprzeglądarki zgodne z protokołem HTTP/1.1. Funkcję obsługującą dane wyjściowe można określić w poniższysposób:

output_handler = "ob_gzhandler"

ob_gzhandler() jest funkcją kompresującą wchodzącą w skład biblioteki PHP obsługującej generacjędanych wyjściowych. Trzeba pamiętać, że nie można jednocześnie przypisać dyrektywie output_handlerwartości ob_gzhandler i włączyć dyrektywy zlib.output_compression (opisanej poniżej).

2 Nie można dodać informacji o nagłówku — nagłówki już zostały wysłane — przyp. tłum.

Page 32: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP W TRAKCIE JEGO DZIA�ANIA

49

zlib.output_compression = On | Off | liczba_ca�kowitaZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Kompresja danych wyjściowych może zaoszczędzić zarówno czas, jak i przepustowość łączy. Ta możliwośćprotokołu HTTP/1.1 jest obsługiwana przez znaczną większość nowoczesnych przeglądarek i bezpieczniemożna jej używać w większości aplikacji. Automatyczną kompresję danych wyjściowych można włączyć,przypisując dyrektywie konfiguracyjnej zlib.output_compression wartość On. Dodatkowo można zarównowłączyć kompresję danych, jak i określić (w bajtach) wielkość używanego bufora — w tym celu wystarczydyrektywie zlib.output_compression przypisać wartość będącą liczbą całkowitą.

zlib.output_handler = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Ta dyrektywa określa bibliotekę kompresji, jakiej należy użyć, jeśli biblioteka zlib nie będzie dostępna.

implicit_flush = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Włączenie tej dyrektywy sprawia, że bufor wyjściowy będzie automatycznie opróżniany po każdymwywołaniu funkcji print() lub echo() oraz po zakończeniu każdego bloku kodu HTML. Możliwość ta możesię przydać, w sytuacjach gdy wykonanie skryptu zajmuje serwerowi wyjątkowo dużo czasu, na przykład gdywykonuje on jakieś złożone obliczenia. W takich przypadkach można skorzystać z tej możliwości, by aktualizowaćkody statusu przesyłane do użytkownika, zamiast zmuszać go do czekania na zakończenie całych obliczeń.

unserialize_callback_func = liczba_ca�kowitaZasięg: PHP_INI_ALL; wartość domyślna: 100.

Ta dyrektywa pozwala określić odpowiedź mechanizmu deserializacji, w przypadku gdy zostanie podjętapróba utworzenia instancji niezdefiniowanej klasy. Dla większości użytkowników dyrektywa ta nie ma większegoznaczenia, gdyż w takiej sytuacji, jeśli tylko będzie używany odpowiedni poziom raportowania błędów,PHP wygeneruje odpowiednie ostrzeżenie.

serialize_precision = liczba_ca�kowitaZasięg: PHP_INI_ALL; wartość domyślna: 100.

Dyrektywa ta określa liczbę cyfr, jakie będą zapisywane podczas serializacji wartości zmiennoprzecinkowej(zarówno pojedynczej, jak i podwójnej precyzji — odpowiednio: float i double). Ustawienie odpowiedniejwartości tej dyrektywy może zapewnić, że procesy serializacji i deserializacji nie będą powodowały utraty danych.

allow_call_time_pass_reference = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Argumenty funkcji można przekazywać na dwa sposoby: przez wartości oraz przez referencje.Konkretny sposób, w jaki poszczególne argumenty zostaną przekazane do funkcji w momencie jejwywoływania, można określić w jej definicji, co zresztą jest sugerowanym rozwiązaniem. Niemniejwłączając dyrektywę allow_call_time_pass_reference, można wymusić, by wszystkie argumenty byłyzawsze przekazywane przez referencję.

Szczegółowy opis przekazywania argumentów przez wartość oraz referencję, wraz z implikacjami obutych sposobów, został zamieszczony w rozdziale 4., poświęconym funkcjom.

Tryb bezpiecznyJeśli PHP jest wdrażany w środowisku, z którego korzysta wielu użytkowników, takim jak współdzieloneserwery oferowane przez wielu dostawców usług internetowych, to warto zastanowić się nad ograniczeniemjego możliwości. Jak łatwo się domyślić, zezwolenie wszystkim użytkownikom na korzystanie ze wszystkich

Page 33: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

50

funkcji PHP mogłoby doprowadzić do niewłaściwego wykorzystania lub zniszczenia plików bądź innychzasobów serwera. W ramach zabezpieczenia przed taką ewentualnością język PHP udostępnia tak zwanytryb bezpieczny (ang. safe mode).

� Uwaga Ze wzgl�du na pomy�ki zwi�zane z nazw� tego mechanizmu oraz sposobem jego dzia�ania, a takez niezamierzonymi konsekwencjami uycia identyfikatorów uytkowników tworz�cych i posiadaj�cych prawa w�a�cicieliplików tryb bezpieczny zosta� wycofany z wersji PHP 5.3.0. Osobi�cie zdecydowanie odradzam jego stosowanie.

Włączenie trybu bezpiecznego spowoduje wyłączenie kilku funkcji i możliwości PHP, które mogłyby byćniebezpieczne, gdyby zostały niewłaściwie użyte w lokalnym skrypcie. Do funkcji tych zaliczają się międzyinnymi: parse_ini_file(), chmod(), chown(), chgrp(), exec(), system() oraz operator odwrotnego apostrofu.Włączenie trybu bezpiecznego gwarantuje także, że właściciel wykonywanego skryptu będzie odpowiadałwłaścicielowi wszystkich plików i katalogów, jakie są przez ten skrypt używane. Ograniczenie to może jednakmieć nieoczekiwane i uciążliwe efekty uboczne, gdyż pliki niejednokrotnie mogą być kopiowane na serwerlub tworzone przez użytkowników o innych identyfikatorach.

Co więcej, włączenie trybu bezpiecznego umożliwia aktywację kilku dodatkowych ograniczeń, sterowanychza pośrednictwem dyrektyw umieszczanych w pliku konfiguracyjnym php.ini. Zostały one opisane poniżej.

safe_mode = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Włączenie tej dyrektywy spowoduje, że możliwości PHP zaczną podlegać ograniczeniom trybu bezpiecznego.

safe_mode_gid = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

W przypadku działania w trybie bezpiecznym włączenie dyrektywy safe_mode_gid wymusi sprawdzanieGID (identyfikatora grupy) podczas otwierania plików. Jeśli tryb bezpieczny jest wyłączony, stosowany jestbardziej restrykcyjny test polegający na sprawdzaniu identyfikatora użytkownika (UID).

safe_mode_include_dir = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Dyrektywa ta pozwala stworzyć bezpieczny azyl, który nie podlega ograniczeniom związanym ze sprawdzaniemidentyfikatorów UID i GID, wykonywanym, gdy jest włączony tryb bezpieczny. W przypadku otwieraniaplików ze wskazanych katalogów testy UID i GID nie są wykonywane.

safe_mode_exec_dir = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

W przypadku działania w trybie bezpiecznym dyrektywa safe_mode_exec_dir ogranicza możliwośćwykonywania skryptów przy użyciu funkcji exec() wyłącznie do programów umieszczonych we wskazanymkatalogu. Aby na przykład umożliwić wykonywanie jedynie funkcji dostępnych w katalogu /usr/local/bin,należy użyć poniższej dyrektywy:

safe_mode_exec_dir = "/usr/local/bin"

safe_mode_allowed_env_vars = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: PHP_.

Gdy włączony jest tryb bezpieczny, dyrektywa konfiguracyjna save_mode_allowed_env_vars pozwala określić,które zmienne środowiskowe dotyczące systemu operacyjnego będzie można modyfikować z poziomuskryptów PHP. Na przykład zastosowanie poniższej dyrektywy sprawi, że będzie można modyfikowaćwyłącznie te zmienne, których nazwy rozpoczynają się od znaków PHP_:

safe_mode_allowed_env_vars = "PHP_"

Page 34: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP W TRAKCIE JEGO DZIA�ANIA

51

Trzeba pamiętać, że przypisanie tej dyrektywie pustego łańcucha znaków zapewni możliwośćmodyfikowania wszystkich zmiennych środowiskowych.

safe_mode_protected_env_vars = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: LD_LIBRARY_PATH.

Ta dyrektywa pozwala jawnie uniemożliwiać modyfikowanie niektórych zmiennych środowiskowych.Aby na przykład nie dopuścić do modyfikacji zmiennych PATH oraz LD_LIBRARY_PATH, należy użyć następującejdyrektywy:

safe_mode_proteced_env_vars = "PATH, LD_LIBRARY_PATH"

open_basedir = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Podobnie jak dyrektywa DocumentRoot w przypadku serwera Apache, tak i dyrektywa open_basedir PHPpozwala określić katalog bazowy, do którego będą się ograniczały wszelkie operacje na plikach. W ten sposóbmożna uniemożliwić użytkownikom zapisywanie plików w chronionych obszarach serwera. Załóżmy naprzykład, że wszelkie materiały związane z witryną WWW są umieszczone w katalogu /home/www.By uniemożliwić użytkownikom przeglądanie, a także potencjalną modyfikację takich plików jak /etc/passwd,wystarczy użyć dyrektywy open_basedir o następującej postaci:

open_basedir = "/home/www/"

Trzeba przy tym pamiętać, że działanie tej dyrektywy nie jest zależne od tego, czy PHP pracuje w trybiebezpiecznym, czy nie.

disable_functions = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

W pewnych okolicznościach Czytelnik może zdecydować, że trzeba całkowicie wyłączyć niektóre domyślnefunkcje PHP, takie jak exec() bądź system(). Można to zrobić, wymieniając ich nazwy w dyrektywiekonfiguracyjnej disable_functions, jak pokazano na poniższym przykładzie:

disable_functions = "exec, system"

Trzeba pamiętać, że działanie tej dyrektywy nie jest zależne od tego, czy PHP pracuje w trybie bezpiecznym,czy nie.

disable_classes = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Zważywszy na możliwości stosowania w PHP zasad programowania obiektowego, można sądzić, że jużniebawem Czytelnik będzie stosował rozbudowane biblioteki klas. Jednak do tych bibliotek mogą należećpewne klasy, które nie powinny być dostępne. Dzięki dyrektywie konfiguracyjnej disable_classes uzyskujemymożliwość zablokowania wybranych klas. Aby na przykład uniemożliwić stosowanie dwóch klas — vectororaz graph — należałoby użyć następującej dyrektywy:

disable_classes = "vector, graph"

Trzeba przy tym pamiętać, że działanie tej dyrektywy nie jest zależne od tego, czy PHP pracuje w trybiebezpiecznym, czy nie.

ignore_user_abort = On | OffZasięg: PHP_INI_ALL; wartość domyślna: Off.

Jak wiele razy zdarzyło się nam wejść na jakąś stronę i wyjść z niej lub zamknąć przeglądarkę, zanim jejzawartość została w całości pobrana i wyświetlona? Takie postępowanie zazwyczaj nie ma żadnychkonsekwencji. Ale co się stanie, jeśli serwer będzie w trakcie aktualizowania ważnych informacji w profilu

Page 35: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

52

użytkownika lub kończenia transakcji handlowej? Włączenie dyrektywy konfiguracyjnej ignore_user_abortspowoduje, że serwer zignoruje żądanie przerwania sesji, zgłoszone przez użytkownika bądź przeglądarkę.

Kolorowanie sk�adniPHP potrafi wyświetlać i modyfikować kolory, jakimi są prezentowane różne fragmenty kodu źródłowego.Tę możliwość można włączyć, zmieniając rozszerzenie skryptu na .phps (to domyślne rozszerzenie, które— jak Czytelnik się niebawem przekona — można zmienić) bądź korzystając z funkcji show_source()lub highlight_file(). Aby móc stosować rozszerzenie .phps, konieczne jest dodanie do pliku httpd.confnastępującego wiersza:

AddType application/x-httpd-php-source .phps

Sześć przedstawionych poniżej dyrektyw konfiguracyjnych PHP pozwala określać kolor łańcuchówznaków, komentarzy, słów kluczowych, tła, domyślny kolor tekstu oraz komponentów HTML w wyświetlanymkodzie źródłowym. Każdej z tych dyrektyw można przypisać wartość RGB, szesnastkowe określenie kolorulub słowo kluczowe określające jego nazwę. Na przykład kolor czarny może być przedstawiony jako:rgb(0,0,0), #000000 lub black.

highlight.string = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: #DD0000.

highlight.comment = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: #FF9900.

highlight.keyword = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: #007700.

highlight.bg = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: #FFFFFF.

highlight.default = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: #0000BB.

highlight.html = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: #000000.

Inne dyrektywyDo tej kategorii zalicza się tylko jedna dyrektywa — expose_php.

expose_php = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: On.

Każdy strzępek informacji dotyczących naszego serwera WWW, jaki potencjalny napastnik może zdobyć,zwiększa szanse udanego włamania. Jednym z podstawowych sposobów zdobywania kluczowych informacjio charakterystykach serwera jest analiza jego podpisu. Na przykład serwer Apache domyślnie zwraca następującytekst w nagłówkach każdej odpowiedzi:

Apache/2.2.0 (Unix) PHP/5.3.0 PHP/5.3.0-dev Server at www.example.com Port 80

Page 36: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP W TRAKCIE JEGO DZIA�ANIA

53

Przypisanie dyrektywie expose_php wartości Off sprawi, że w podpisie (jeśli jego generowanie jest włączone)nie będą umieszczane informacje o zainstalowanym środowisku PHP. Choć odpowiednie zabezpieczenieserwera WWW wymaga także podjęcia innych kroków, to jednak takie ukrywanie informacji o nim jest zewszech miar godne polecenia.

� Uwaga Generowanie podpisu przez serwer Apache mona wy��czy�, umieszczaj�c w pliku konfiguracyjnym httpd.confdyrektyw� ServerSignature i przypisuj�c jej warto�� Off.

Ograniczenia zasobówChoć w wersji PHP 5 poprawiono możliwości zarządzania zasobami, to jednak i tak trzeba zachować dużąostrożność, by nie dopuścić do zmonopolizowania zasobów serwera przez aktualnie wykonywany skryptw wyniku operacji zapoczątkowanych bądź to przez programistę, bądź użytkownika. Trzema podstawowymiobszarami, w których takie nadmierne zużycie zasobów systemowych przez skrypt jest najczęściej spotykane,są: czas wykonywania skryptu, czas przetwarzania przez skrypt danych wejściowych oraz zużycie pamięci.Każdy z nich można kontrolować przy użyciu jednej z trzech wymienionych poniżej dyrektyw.

max_execution_time = liczba_ca�kowitaZasięg: PHP_INI_ALL; wartość domyślna: 30.

Parametr max_execution_time określa (w sekundach) górną granicę czasu wykonywania skryptu PHP.Przypisanie mu wartości 0 spowoduje, że nie będzie obowiązywał żaden limit czasu wykonywania. Wartopamiętać, że czas poświęcony na realizację jakichkolwiek programów zewnętrznych uruchomionych przezskrypt przy użyciu takich funkcji, jak exec() lub system(), nie jest wliczany do czasu jego wykonywania.

max_input_time = liczba_ca�kowitaZasięg: PHP_INI_ALL; wartość domyślna: 60.

Ten parametr określa (w sekundach) maksymalny czas, jaki skrypt PHP może poświęcić na przetwarzaniedanych przesłanych w żądaniu. Ma on szczególne znaczenie w przypadku przesyłania na serwer dużychplików, które są odbierane i przetwarzane przez skrypty PHP (zagadnienia te zostały opisane w rozdziale 15.).

memory_limit = liczba_ca�kowitaMZasięg: PHP_INI_ALL; wartość domyślna: 128M.

Parametr memory_limit określa maksymalną ilość pamięci (wyrażoną w megabajtach), jaką możnaprzydzielić skryptowi PHP.

Obs�uga danychParametry przedstawione w tym podpunkcie określają, w jaki sposób PHP będzie obsługiwać zmiennezewnętrzne, czyli zmienne przekazane do skryptu ze źródeł zewnętrznych. Potencjalnymi źródłami zmiennychzewnętrznych są żądania GET i POST, ciasteczka, system operacyjny oraz serwer WWW. Pozostałe opisanetu parametry określają domyślny zestaw znaków używany przez PHP i domyślny typ MIME oraz wskazują,czy do wyników generowanych przez skrypt będą dołączane jakieś pliki zewnętrzne.

arg_separator.output = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: "&amp;".

PHP potrafi automatycznie generować adresy URL, a do rozdzielania zmiennych wejściowych używaznaku &. Jeśli jednak konieczna będzie zmiana tej domyślnej konwencji, to można to zrobić, korzystającz dyrektywy konfiguracyjnej arg_separator.output.

Page 37: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

54

arg_separator.input = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: ";&".

Standardowo do rozdzielania zmiennych wejściowych przekazywanych przy użyciu metod POST lub GET jestużywany znak &. Gdyby się zdarzyło, choć jest to raczej bardzo mało prawdopodobne, że w tworzonej aplikacjinależy zmodyfikować to domyślne ustawienie, można to zrobić przy użyciu dyrektywy arg_separator.input.

variables_order = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: "GPCS".

Ta dyrektywa określa kolejność, w jakiej będą przetwarzane zmienne ENVIRONMENT, GET, POST, COOKIEoraz SERVER. Jeśli dyrektywa register_globals jest włączona (choć pozornie obie dyrektywy nie są ze sobąpowiązane), to kolejność podawanych wartości może doprowadzić do nieoczekiwanych rezultatów, gdyżzmienne analizowane później mogą przesłaniać wartości zmiennych przeanalizowanych wcześniej.

register_globals = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Jeśli Czytelnik korzystał z PHP w wersji wcześniejszej niż 4.0, to samo wspomnienie o tej dyrektywiemoże wywołać zgrzytanie zębami i wyrywanie włosów z głowy. W celu usunięcia związanych z nią problemóww wersjach PHP 4.2.0 i późniejszych dyrektywa ta została domyślnie wyłączona, co niestety zmusiło wieluużytkowników PHP o dłuższym stażu do całkowitego przemyślenia metodologii pisania aplikacji (a niejednokrotnietakże ich przepisania). Wprowadzona zmiana służy najlepszym interesom programistów, znacząco wpływającna poprawę bezpieczeństwa aplikacji. Jeśli Czytelnik spotyka się z tymi zagadnieniami po raz pierwszy, to w ogólenie ma o czym mówić.

We wczesnych wersjach PHP wszystkie zmienne zewnętrzne były automatycznie rejestrowane w globalnejprzestrzeni nazw skryptu. Oznaczało to, że wszelkie zmienne zaliczane do kategorii COOKIE, ENVIRONMENT, GET,POST lub SERVER automatycznie stawały się dostępne globalnie. A ponieważ były globalnie dostępne, można jebyło także modyfikować bez żadnych ograniczeń. Choć można było sądzić, że jest to wygodne rozwiązanie,to jednak stanowiło ono potencjalne zagrożenie, gdyż zmienne, które powinny być zarządzane wyłącznie zapośrednictwem ciasteczek, można było także modyfikować za pośrednictwem adresu URL. Załóżmy na przykład,że identyfikator sesji, jednoznacznie określający użytkownika, był przekazywany pomiędzy poszczególnymistronami w ciasteczku. Nikt oprócz konkretnego użytkownika nie powinien mieć dostępu do danychskojarzonych z użytkownikiem określanym przez dany identyfikator. Użytkownik mógł jednak wyświetlićwartość ciasteczka, skopiować ją i dodać do adresu URL, jak pokazano na poniższym przykładzie:

http://www.example.com/secretdata.php?sessionid=4x5bh5H793adK

Następnie użytkownik mógł przesłać ten adres w wiadomości poczty elektronicznej do innej osoby.Gdyby aplikacja nie używała żadnych dodatkowych zabezpieczeń (takich jak kontrola adresu IP), to ta drugaosoba mogłaby uzyskać dostęp do poufnych danych. Wyłączenie dyrektywy register_globals zapobiegawystępowaniu takich zagrożeń. Choć zmienne zewnętrzne wciąż są dostępne w globalnej przestrzeni nazw,to do każdej z nich należy się odwoływać przy użyciu odpowiedniego typu. Na przykład do zmiennejsessionid zastosowanej w ostatnim przykładzie można się odwoływać wyłącznie w następujący sposób:

$_COOKIE['sessionid'];

Próba zmiany wartości tej zmiennej przy użyciu jakiegokolwiek innego odwołania (takiego jak GET lubPOST) spowoduje utworzenie nowej zmiennej globalnej (takiej jak $_GET['sessionid'] lub $_POST['sessionid']).Szczegółowe informacje dotyczące zmiennych zewnętrznych wszelkich typów (COOKIE, ENVIRONMENT, GET, POSToraz SERVER) zostały zamieszczone w rozdziale 3., w jego części poświęconej zmiennym superglobalnym.

Choć wyłączenie dyrektywy register_globals jest bezsprzecznie dobrym pomysłem, to jednak nie jest tojedyny czynnik, jaki należy brać pod uwagę w ramach zabezpieczania aplikacji. Znacznie więcej informacjidotyczących bezpieczeństwa i zabezpieczenia aplikacji PHP zostało zamieszczonych w rozdziale 21.

Page 38: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP W TRAKCIE JEGO DZIA�ANIA

55

� Uwaga Przez wiele lat dyrektywa register_globals oraz ��cz�ce si� z ni� aspekty dzia�ania PHP by�y ród�emnieustaj�cych problemów zwi�zanych z bezpiecze�stwem aplikacji PHP. Dlatego te, poczynaj�c od PHP 5.3.0, jejstosowanie nie jest zalecane.

register_long_arrays = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Ta dyrektywa określa, czy wciąż należy rejestrować tablice wejściowe (ENVIRONMENT, GET, POST, COOKIEoraz SERVER), używając stosowanych niegdyś długich nazw — HTTP_*_VARS. Ze względów wydajności działaniajęzyka zaleca się wyłączenie tej dyrektywy.

� Uwaga W j�zyku PHP 5.3.0 stosowanie tej dyrektywy nie jest zalecane.

Stosowanie apostrofów i cudzys�owów

Ju od wielu lat zarówno cudzys�owy, jak i apostrofy odgrywaj� w j�zykach programowania szczególn� rol�.Poniewa s� one powszechnie stosowane do wyróniania fragmentów tekstów w kodach programów orazw j�zyku pisanym, zatem, by unikn�� problemów, konieczne b�dzie poznanie jakiego� sposobu pozwalaj�cegona ich rozrónianie. Rozwi�zanie jest ca�kiem proste: te znaki cudzys�owów b�d apostrofów, które nieograniczaj� �a�cucha znaków, naley poprzedza� odwrotnym uko�nikiem. Je�li nie b�dziemy stosowa� tejzasady, to mog� si� pojawi� niespodziewane b��dy. Rozwamy nast�puj�cy przyk�ad:

$sentence = "Janek powiedzia�: "Kocham samochody wy�cigowe!"";

Które z zastosowanych w nim znaków cudzys�owu ograniczaj� ca�y �a�cuch znaków, a które wypowied Janka?J�zyk PHP nie pozna odpowiedzi na to pytanie, je�li niektóre z cudzys�owów nie zostan� odpowiednio oznaczone:

$sentence = "Janek powiedzia�: \"Kocham samochody wy�cigowe!\"";

Poprzedzanie odwrotnym uko�nikiem znaków cudzys�owu lub apostrofu, które nie ograniczaj� �a�cuchówznaków, okre�lamy jako w��czanie magicznych cudzys�owów. Mona to zrobi� automatycznie — w��czaj�cdyrektyw� magic_quotes_gpc (opisan� w dalszej cz��ci rozdzia�u) — b�d te r�cznie, przy uyciu funkcjiaddslashes() oraz stripslashes(). Zalecane jest zastosowanie tej drugiej strategii, gdy zapewniaona programi�cie ca�kowit� kontrol� nad dzia�aniem aplikacji (jednak w sytuacjach gdy próbujemyskorzysta� z aplikacji oczekuj�cych, e mechanizm automatycznego poprzedzania cudzys�owów i apostrofówb�dzie w��czony, konieczne b�dzie jego uaktywnienie).

Ze wzgl�du na problemy, jakich mechanizm ten przysparza programistom, w PHP 5.3.0 nie zaleca si� jegostosowania.

register_argc_argv = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Przekazywanie zmiennych informacji przy wykorzystaniu metody GET przypomina przekazywanieargumentów do programu wykonywalnego. W wielu językach programowania informacje o argumentachprzekazywanych do programów są dostępne pod postacią zmiennych argc oraz argv. Pierwsza z nich zawieraliczbę przekazanych argumentów, natomiast druga jest indeksowaną liczbami tablicą zawierającą sameargumenty. Jeśli chcemy, by zmienne $argc i $argv były deklarowane, co pozwoli nam stosować ten sposóbprzetwarzania danych wejściowych, należy przypisać dyrektywie register_argc_argv wartość On.

Page 39: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

56

post_max_size = liczba_ca�kowitaMZasięg: PHP_INI_SYSTEM; wartość domyślna: 8M.

Spośród dwóch dostępnych metod przekazywania danych w żądaniach HTTP metoda POST znacznie lepiejnadaje się do przesyłania dużych ilości danych, na przykład informacji podawanych w formularzach. Niemniejzarówno ze względów bezpieczeństwa, jak i wydajności działania można zdecydować się na ograniczeniemaksymalnej wielkości danych, jakie będzie można przesyłać do skryptu PHP tą metodą. Właśnie do tegocelu służy dyrektywa post_max_size.

magic_quotes_gpc = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Ten parametr określa, czy magiczne cudzysłowy będą operować na danych przesyłanych przy wykorzystaniuGET, POST oraz w ciasteczkach. W razie jego uaktywnienia wszelkie znaki apostrofów, cudzysłowów,odwrotnych ukośników oraz znaki puste będą automatycznie poprzedzane znakiem odwrotnego ukośnika.

magic_quotes_runtime = On | OffZasięg: PHP_INI_ALL; wartość domyślna: Off.

Włączenie tego parametru spowoduje automatyczne poprzedzanie znakiem odwrotnego ukośnikawszelkich apostrofów i cudzysłowów umieszczonych w danych pochodzących ze źródeł zewnętrznych,takich jak bazy danych lub pliki tekstowe.

magic_quotes_sybase = On | OffZasięg: PHP_INI_ALL; wartość domyślna: Off.

Ten parametr ma znaczenie wyłącznie wtedy, gdy włączony jest także parametr magic_quotes_runtime.Jeśli parametr magic_quotes_sybase zostanie włączony, to wszystkie apostrofy i cudzysłowy umieszczonew danych pochodzących ze źródeł zewnętrznych, będą poprzedzane znakiem apostrofu, a nie odwrotnegoukośnika. Rozwiązanie to jest przydatne, gdy informacje są pobierane z bazy danych Sybase, która wykorzystujeten raczej nietypowy sposób oznaczania znaków specjalnych.

auto_prepend_file = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Tworzenie szablonów nagłówków i dołączanie bibliotek przed wykonaniem skryptów PHP najczęściejjest realizowane przy wykorzystaniu funkcji include() lub require(). Można jednak zautomatyzować tenproces i uniknąć konieczności stosowania tych funkcji w tworzonych skryptach poprzez podanie nazwdołączanych plików wraz z odpowiednimi ścieżkami dostępu w dyrektywie auto_prepend_file.

auto_append_file = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Dołączanie stopek za wynikami generowanymi przez skrypty PHP najczęściej jest realizowane przywykorzystaniu funkcji include() lub require(). Można jednak zautomatyzować ten proces i uniknąćkonieczności stosowania tych funkcji w tworzonych skryptach poprzez podanie nazw dołączanych plikówwraz z odpowiednimi ścieżkami dostępu w dyrektywie auto_append_file.

default_mimetype = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: "text/html".

Typy MIME stanowią standardowy sposób klasyfikowania typów plików używanych w internecie.Aplikacje PHP zapewniają możliwości udostępniania plików dowolnych typów, jednak najbardziejpopularnym z nich jest text/html. Jeśli jednak aplikacje PHP są używane w innych celach, na przykładjako generatory treści dla aplikacji WML (ang. Wireless Markup Language), konieczne będzie odpowiedniedostosowanie typu MIME generowanych odpowiedzi. Można to zrobić, podając go w dyrektywiedefault_mimetype.

Page 40: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

KONFIGURACJA PHP W TRAKCIE JEGO DZIA�ANIA

57

default_charset = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: NULL.

W wersji 4.0 PHP informacje o sposobie kodowania są zwracane w nagłówku Content-Type. Domyślnieużywany jest zestaw znaków iso-8859-1, obsługujący między innymi języki angielski, hiszpański, niemieckioraz portugalski. Jeśli jednak w tworzonej aplikacji PHP są używane inne języki, takie jak japoński, chińskibądź hebrajski, to dyrektywa default_charset pozwala podać odpowiedni zestaw znaków.

always_populate_raw_post_data = On | OffZasięg: PHP_INI_PERDIR; wartość domyślna: Off.

Przypisanie tej dyrektywie wartości On powoduje, że PHP będzie zapisywać w zmiennej $HTTP_RAW_POST_DATAłańcuch znaków zawierający pary nazwa – wartość przesłane w żądaniu POST. Dotyczy to nawet tych sytuacji,gdy przekazana z formularza zmienna nie ma żadnej wartości. Załóżmy na przykład, że dyrektywa ta zostaławłączona, a Czytelnik dysponuje formularzem zawierającym dwa pola tekstowe — pierwsze z nich pozwalana podanie imienia użytkownika, a drugie — jego adresu poczty elektronicznej. W odpowiedzi na przesłanieformularza wykonywany jest skrypt zawierający tylko jedną instrukcję:

echo $HTTP_RAW_POST_DATA;

W takim przypadku przesłanie pustego formularza spowoduje wygenerowanie następujących wyników:

name=&email=

Jeśli natomiast użytkownik wypełni oba pola i kliknie przycisk przesyłający go na serwer, to wyniki będąmieć następującą postać:

name=jason&email=jason%40example.com

cie�ki i katalogiW tej części rozdziału zostały przedstawione dyrektywy określające domyślne ustawienia ścieżek. Ścieżki te sąużywane przez PHP do dołączania bibliotek oraz rozszerzeń do określania katalogów, w jakich są umieszczanepliki użytkownika, oraz głównych katalogów serwera.

include_path = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: NULL.

Ścieżka określona w tym parametrze jest używana przez takie funkcje, jak: include(), require() orazfopen_with_path(), jako główna ścieżka. Można w nim podać więcej ścieżek, oddzielając je od siebie znakiemśrednika, jak pokazano na poniższym przykładzie:include_path=".:/usr/local/include/php;/home/php"

Domyślnie temu parametrowi jest przypisywana wartość zmiennej środowiskowej o nazwie PHP_INCLUDE_PATH.Warto zwrócić uwagę, że w systemach Windows zamiast ukośnika w ścieżkach są stosowane znaki odwrotnegoukośnika, a na ich początku jest umieszczana litera określająca dysk:

include_path=".;C:\php\includes"

doc_root = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Parametr ten określa domyślny katalog, z jakiego będą pobierane wszystkie skrypty PHP. Jest on używanywyłącznie wtedy, gdy jego wartość nie jest pusta.

Page 41: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

58

user_dir = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: NULL.

Parametr user_dir określa bezwzględną ścieżkę dostępu do katalogu, wykorzystywanego przez PHPpodczas otwierania plików, do których będziemy się odwoływać przy użyciu zapisu /~uzytkownik.Jeśli na przykład przypisana mu zostanie wartość /home/users, a spróbujemy się odwołać do pliku~gilmore/collections/books.txt, to PHP określi, że bezwzględna ścieżka dostępu do pliku będzie mieć postać:/home/users/gilmore/collections/books.txt.

extension_dir = �a�cuch_znakówZasięg: PHP_INI_SYSTEM; wartość domyślna: "./" (w systemie Windows domyślną wartością jest ext).

Dyrektywa extension_dir informuje PHP, gdzie są przechowywane rozszerzenia, które można dynamiczniewczytywać. Domyślnie przypisywana jest jej wartość "./", oznaczająca, że rozszerzania są umieszczone w tymsamym katalogu co wykonywany skrypt. W środowisku Windows, jeśli wartość tej dyrektywy nie zostałaokreślona, to domyślnie zostanie zastosowany katalog C:\KATALOG-INSTALACYJNY-PHP\ext\.

enable_dl = On | OffZasięg: PHP_INI_SYSTEM; wartość domyślna: Off.

Funkcja enable_dl() pozwala użytkownikom na wczytywanie rozszerzeń w trakcie wykonywania skryptu.

Opakowania u�ywane przez funkcj� fopenW tej części rozdziału zostało opisanych pięć dyrektyw konfiguracyjnych związanych z dostępem i operacjamina zdalnych plikach.

allow_url_fopen = On | OffZasięg: PHP_INI_ALL; wartość domyślna: On.

Przypisanie tej dyrektywie wartości On spowoduje, że PHP będzie traktować zdalne pliki niemal w takisam sposób jak pliki lokalne. W takim przypadku skrypt PHP może uzyskać dostęp i wykonywać operacjena plikach przechowywanych na zdalnych serwerach, jeśli tylko uprawnienia tych plików na to pozwalają.

from = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: NULL.

Nazwa tej dyrektywy jest prawdopodobnie dosyć myląca, gdyż nie określa ona tożsamości, lecz hasłoanonimowego użytkownika, używane do nawiązywania połączeń FTP. Dlatego też, jeśli w pliku konfiguracyjnymokreślimy jej wartość w następujący sposób:

from = "[email protected]"

to podczas uwierzytelniania użytkownika na serwer FTP zostaną przekazane nazwa anonymous oraz hasł[email protected].

user_agent = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: NULL.

Wraz z danymi generowanymi przez skrypt PHP zawsze przesyła do klienta także nagłówki odpowiedzi,a wśród nich nagłówek określający przeglądarkę użytkownika. Jego zawartość można ustalić przy użyciudyrektywy user_agent.

Page 42: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

WYBÓR EDYTORA

59

default_socket_timeout = liczba_ca�kowitaZasięg: PHP_INI_ALL; wartość domyślna: 60.

Ta dyrektywa określa czas oczekiwania (wyrażony w sekundach) stosowany w operacjach na strumieniachbazujących na gniazdach.

auto_detect_line_endings = On | OffZasięg: PHP_INI_ALL; wartość domyślna: Off.

Jednym z niewyczerpanych źródeł frustracji programistów są problemy związane ze znakiem końcawiersza tekstu. Wynikają one z faktu, iż w różnych platformach systemowych znaki te mają różną postać.Włączenie dyrektywy auto_detect_line_endings określa, czy dane wczytywane przy użyciu funkcji fgets() orazfile() będą używały konwencji stosowanej na komputerach Macintosh, w systemie MS-DOS, czy też Linux.

Rozszerzenia dynamiczneTa część rozdziału jest poświęcona tylko jednej dyrektywie — extension.

extension = �a�cuch_znakówZasięg: PHP_INI_ALL; wartość domyślna: NULL.

Dyrektywa extension służy do dynamicznego wczytywania konkretnego modułu. W systemach Windowsrozszerzenie można wczytać, używając dyrektywy o następującej postaci:extension = php_bz2.dll

W systemach Unix wygląda ona nieco inaczej:

extension = php_bz2.so

Trzeba pamiętać, że niezależnie od używanego systemu operacyjnego, samo zastosowanie tej dyrektywynie zawsze spowoduje udostępnienie rozszerzenia. Konieczne będzie także zainstalowanie na komputerzeodpowiedniego oprogramowania.

Wybór edytoraChoć nic nie stoi na przeszkodzie, by rozpoczynać przygodę z pisaniem skryptów PHP, korzystając z najprostszychedytorów tekstów, takich jak Notatnik (w systemie Windows) bądź vi (w systemach Unix i Linux), to jednakistnieje duże prawdopodobieństwo, że stosunkowo szybko Czytelnik zechce skorzystać z rozbudowanegonarzędzia, przeznaczonego do tworzenia aplikacji PHP. Dostępnych jest kilka takich narzędzi i to zarównodarmowych, jak i komercyjnych.

Adobe Dreamweaver CS5Program Dreamweaver CS5 firmy Adobe przez wiele osób jest uważany za najlepsze dostępne narzędzie doprojektowania i tworzenia stron WWW. Program Dreamweaver CS3, stworzony jako kompletne narzędzie,obsługuje wszystkie kluczowe technologie, takie jak Ajax, CSS, HTML, JavaScript, PHP oraz XML, którychpołączenie pozwala tworzyć doskonałe i nowoczesne witryny WWW.

Dreamweaver CS5 nie tylko pozwala tworzyć strony HTML w środowisku WYSIWYG (ang. what you seeis what you get — dostajesz to, co widzisz), lecz także udostępnia wiele przydatnych narzędzi, ułatwiającychprogramistom PHP tworzenie kodu i zarządzanie nim, takich jak: kolorowanie składni, automatyczneuzupełnianie kodu, mechanizmy łatwego zapisywania i wielokrotnego stosowania fragmentów kodu.

Program Adobe Dreamweaver CS5 (www.adobe.com/products/dreamweaver) jest dostępny w wersjachprzeznaczonych dla systemów Windows oraz Mac OS X i kosztuje 399 dol.3

3 Na polskim rynku program ten można kupić za około 1800 zł — przyp. tłum.

Page 43: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

60

Notepad++Notepad++ jest dojrzałym programem otwartym, pomyślanym jako zamiennik prostego Notatnika w systemachWindows. Program ten, przetłumaczony na wiele języków, udostępnia mnóstwo użytecznych narzędzi,których nie powstydziłoby się zaawansowane środowisko programistyczne (IDE), takich jak: tworzeniezakładek wskazujących na konkretne wiersze kodu, oznaczanie par odpowiadających sobie nawiasówklamrowych, kolorowanie składni, wygodna obsługa wcięć, rozbudowane funkcje wyszukiwania, rejestracjamakr ułatwiających wykonywanie żmudnych czynności (jak choćby wstawianie komentarzy).

Wsparcie dla języka PHP nie jest szczególnie rozbudowane, a wygodę programowania zapewniająraczej ogólne niż dostosowane do PHP możliwości programu. Choć dostępne są podstawowe możliwościautomatycznego uzupełniania nazw funkcji, które mogą nam nieco uprościć tworzenie kodu, to jednak— jeśli chodzi o nazwy parametrów oraz ich kolejność — jesteśmy pozostawieni sami sobie.

Notepad++ działa wyłącznie w systemie Windows. Twórcy rozpowszechniają go na zasadach licencjiGNU GPL. Więcej informacji na jego temat można znaleźć na stronie http://notepad-plus.sourceforge.net.

PDT (PHP Development Tools)Projekt PDT (www.eclipse.org/pdt) jest aktualnie bardzo aktywnie rozwijany. Projekt ten jest wspierany przezfirmę Zend Technologies Ltd. (www.zend.com) i wykorzystuje otwartą platformę Eclipse (www.eclipse.org)— niezwykle popularne, rozszerzalne środowisko do tworzenia narzędzi programistycznych. Ma on szansęstać się liderem, jeśli chodzi o zintegrowane środowiska programistyczne (IDE) do tworzenia aplikacji PHP,przeznaczone zarówno dla hobbystów, jak i profesjonalistów.

� Uwaga W oparciu o platform� Eclipse stworzono bardzo wiele narz�dzi u�atwiaj�cych wykonywanie kluczowych zada�zwi�zanych z programowaniem, poczynaj�c od modelowania danych, poprzez projektowanie logiki biznesowej,raportowanie, testowanie, sprawdzanie wydajno�ci, a ko�cz�c na tworzeniu kodu. Cho� Eclipse najbardziej kojarzy si�z IDE do tworzenia aplikacji pisanych w Javie, to jednak w oparciu o nie stworzono podobne IDE do pisaniaprogramów w C, C++, Cobolu, a ostatnio take w PHP.

Zend StudioZend Studio jest bezsprzecznie najpotężniejszym z aktualnie dostępnych narzędzi do pisania aplikacjiPHP i to zarówno otwartych, jak i komercyjnych. Ten flagowy produkt firmy Zend Technologies Ltd.udostępnia wszystkie możliwości, jakich można by oczekiwać od zintegrowanego środowiska programistycznegoklasy korporacyjnej, poczynając od doskonałego mechanizmu uzupełniania kodu, poprzez profilowanie kodu,na wygodnej obsłudze procesu wdrażania aplikacji kończąc.

Oprócz tego Zend Studio ułatwia tworzenie kodu integrującego aplikację z popularnymi bazami danych,takimi jak MySQL, Oracle, PostgreSQL oraz SQLite, i zapewnia możliwość wykonywania zapytań SQL,zarządzania schematami baz danych oraz ich zawartością.

Zend Studio (www.zend.com/products/studio) jest dostępne w wersjach przeznaczonych dla systemówWindows, Linux oraz Mac OS X za 299 dol.

Wybór firmy udost�pniaj�cej serwery WWWJeśli Czytelnik nie jest zatrudniony lub nie współpracuje z firmą, która już dysponuje środowiskiemzawierającym serwer WWW, to wcześniej czy później konieczne będzie sprawdzenie dostępnych ofert i wybórjednej z firm udostępniających serwery. Na szczęście na tym rynku działa bardzo wiele firm i konkurencja jestogromna. Dzięki temu nietrudno znaleźć oferty firm, które za bardzo niewielkie stawki udostępniają szerokągamę usług, dużo przestrzeni dyskowej oraz przepustowości.

Page 44: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

WYBÓR FIRMY UDOST�PNIAJ CEJ SERWERY WWW

61

Ogólnie rzecz biorąc, firmy zajmujące się udostępnianiem serwerów WWW można podzielić na trzypodstawowe kategorie:

� Firmy udostępniające serwery dedykowane: w tym przypadku można wziąć w leasing cały serwerWWW, dzięki czemu tworzona aplikacja będzie mogła w całości wykorzystywać moc procesora,przestrzeń dyskową oraz pamięć serwera. Właściciel ma także pełną kontrolę nad konfiguracjąserwera. Rozwiązanie to jest szczególnie korzystne, gdyż właściciel zazwyczaj ma pełną kontrolęnad administracją serwera, a jednocześnie nie musi zaprzątać sobie głowy kupowaniem niezbędnegosprzętu, jego utrzymywaniem, znalezieniem odpowiedniej lokalizacji oraz zapewnianiempołączenia z internetem.

� Firmy udostępniające serwery współdzielone: jeśli tworzona witryna WWW nie będzie mieć zbytdużych wymagań dotyczących zasobów serwera bądź jeśli Czytelnik nie chce zaprzątać sobie głowyadministrowaniem serwera, to serwer współdzielony będzie optymalnym rozwiązaniem. Firmyudostępniające serwery współdzielone korzystają z mniejszych wymagań witryn, instalując ich więcejna jednym komputerze i używając wysoce zautomatyzowanych procesów do zarządzania zasobamisystemowymi i sieciowymi, tworzenia kopii danych oraz zapewniania wsparcia dla użytkowników.W efekcie ceny takich serwerów mogą być bardzo atrakcyjne (wiele firm cieszących się powszechnymuznaniem udostępnia takie serwery, bez konieczności podpisywania umów, nawet za 8 dol. miesięcznie)przy jednoczesnym zachowaniu pełnej satysfakcji użytkownika.

� Firmy udostępniające prywatne serwery wirtualne: prywatne serwery wirtualne zacierają różnicepomiędzy serwerami dedykowanymi i współdzielonymi. Korzystają one z mechanizmu wirtualizacji,by udostępniać każdemu użytkownikowi dedykowany system operacyjny, możliwość instalowaniana nim aplikacji oraz jego pełnej konfiguracji. Wirtualizacja pozwala na uruchamianie na jednymkomputerze wielu niezależnych systemów operacyjnych. W efekcie użytkownik uzyskuje pełną kontrolęnad wykupionym serwerem wirtualnym, natomiast firma udostępniająca serwer może obniżyć koszty,co ma bezpośredni wpływ na ceny świadczonych usług.

Trzeba pamiętać, że poszukiwania i wykupienie serwera na potrzeby tworzonej aplikacji to nie są zadaniao szczególnie wysokim priorytecie — nie trzeba zaprzątać sobie tym głowy aż do chwili, gdy aplikacja zostanieukończona i będzie gotowa do uruchomienia. Dlatego też niezależnie od faktu, że koszty wykupienia serwerów sąniskie, warto poczekać z tym aż do momentu, gdy posiadanie serwera będzie absolutnie konieczne, oszczędzająctym samym czas, pieniądze i uwagę.

Siedem pytań do firm udostępniających serwery WWWZ pozoru większość firm udostępniających serwery WWW oferuje bardzo podobne usługi. Zapewniają oneabsurdalnie ogromną ilość przestrzeni na dysku, niemal nieskończoną przepustowość oraz bardzo wysokigwarantowany czas działania serwera. Szczerze mówiąc, istnieje całkiem spore prawdopodobieństwo, że każdapowszechnie szanowana firma udostępniająca serwery WWW w pełni zaspokoi nasze oczekiwania i to zarównopod względem zasobów wymaganych przez naszą aplikację, jak i pod względem poziomu obsługi technicznej.Niemniej w ramach oceniania usług świadczonych przez poszczególne firmy Czytelnik — jako programistaPHP — powinien zadać kilka pytań. Oto one:

1. Czy jest dostępne środowisko PHP, a jeśli tak, to w jakiej wersji? Wiele firm udostępniającychserwery WWW niezwykle długo ociąga się z instalowaniem najnowszych wersji języka PHP. Dlategoteż, jeśli Czytelnik planuje wykorzystać możliwości PHP dostępne od pewnej jego wersji, powiniensprawdzić, czy jest ona dostępna. Dodatkowo optymalnym rozwiązaniem byłoby, gdyby dostawcajednocześnie udostępniał kilka różnych wersji PHP — w takim przypadku można by skorzystaćz różnych aplikacji PHP, które dopiero w przyszłości będą obsługiwać najnowsze wersje PHP.

2. Czy dostępny jest serwer baz danych MySQL/Oracle/PostgreSQL, a jeśli jest, to w jakiej wersji?Podobnie jak w przypadku PHP, także zainstalowane serwery baz danych nie są zazwyczaj szybkoaktualizowane. Dlatego jeśli tworzona aplikacja korzysta z możliwości dostępnych w konkretnejwersji serwera bazy danych, koniecznie należy się upewnić, że dostępna jest odpowiednia wersja.

Page 45: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

ROZDZIA� 2. � KONFIGURACJA �RODOWISKA

62

3. Jakie są dostępne rozszerzenia plików PHP? Z niewytłumaczalnych powodów niektóre firmyudostępniające serwery WWW zmuszają użytkowników do stosowania starych rozszerzeń plików PHP— takich jak .phtml. Jest to wyraźnym sygnałem, że danej firmie brakuje rozeznania w zakresierozwoju języka PHP oraz społeczności jego użytkowników. Oznacza to także, że z usług takiej firmyraczej należy zrezygnować. Warto interesować się jedynie firmami, które pozwalają na stosowaniew skryptach PHP rozszerzenia .php.

4. Jakie ograniczenia są nakładane na skrypty PHP? Zgodnie z informacjami podanymi we wcześniejszejczęści rozdziału sposób działania środowiska PHP oraz jego możliwości można określać za pomocąpliku konfiguracyjnego php.ini. Niektóre z tych możliwości konfiguracyjnych zostały stworzone dlawygody dostawców serwerów WWW, a ci nie zawsze muszą być chętni, by oddawać w ręce użytkownikówwszystkie możliwości, jakimi dysponuje PHP. Dlatego też niektóre funkcje języka oraz jego rozszerzaniamogą nie być dostępne, co w efekcie może mieć wpływ na możliwości, jakie witryna będzie w stanieudostępnić.Co więcej, czasami zdarza się, że wszystkie skrypty PHP muszą być umieszczane w konkretnymkatalogu — takie rozwiązanie może być bardzo niewygodne, a jego wpływ na zwiększenie bezpieczeństwaaplikacji jest raczej wątpliwy. W optymalnym przypadku powinniśmy mieć możliwość umieszczaniaskryptów PHP w dowolnym miejscu struktury plików, przeznaczonej do przechowywania stron WWW.

5. Jakim ograniczeniom podlegają możliwości stosowania plików .htaccess serwera Apache? Niektóreoprogramowania firm niezależnych (w szczególności dotyczy to szkieletów do tworzenia aplikacji,opisanych w rozdziale 24.) do poprawnego działania wymagają tak zwanego przepisywania adresówURL (ang. URL rewriting). Jednak nie wszystkie firmy udostępniające serwery WWW pozwalająużytkownikom modyfikować działanie serwera Apache przy użyciu specjalnych plików konfiguracyjnych.htaccess. Dlatego warto dowiedzieć się, czy dana firma narzuca jakieś ograniczenia w tym zakresie.

6. Jakie aplikacje PHP są dostępne oraz na jakie wsparcie ze strony firm można liczyć? Większość firmudostępniających serwery WWW pozwala na automatyczną instalację oprogramowania firm niezależnych,takich jak Joomla!, WordPress czy też phpBB. Możliwość skorzystania z takich instalatorów pozwolinam zaoszczędzić czas, a firmie obsługującej serwer — rozwiązać ewentualne problemy. Jednak zdarzasię, że firmy udostępniają takie oprogramowanie w ramach wygody użytkownika, lecz nie zapewniajążadnej pomocy technicznej związanej z ich instalacją i korzystaniem. Dodatkowo warto zapytać,czy w razie potrzeby firma będzie skłonna zainstalować rozszerzania PEAR i PECL (zostały one opisanew rozdziale 11.).

7. Czy na państwa serwerze prawidłowo działa (tu należy wstawić nazwę ulubionego szkieletuaplikacji lub technologii)? Jeśli Czytelnik planuje korzystać z konkretnego szkieletu do tworzeniaaplikacji PHP (więcej informacji na ich temat zostało zamieszczonych w rozdziale 24.) bądź z pewnejtechnologii (takiej jak określona platforma do handlu elektronicznego), to należy się upewnić, że będąone działały prawidłowo na danym serwerze. Jeśli firma nie jest w stanie udzielić konkretnej odpowiedzi,to można poszukać informacji na forach dyskusyjnych, używając nazwy firmy i technologii jakokryteriów wyszukiwania.

PodsumowanieW tym rozdziale został opisany sposób konfiguracji środowiska pozwalającego na tworzenie aplikacjiinternetowych w języku PHP. Szczegółowo zostały także opisane wybrane opcje konfiguracyjne PHP.W końcowej części rozdziału zamieszczono krótkie informacje dotyczące edytorów i środowiskprogramistycznych najczęściej używanych do tworzenia aplikacji PHP oraz przedstawiono kilkazagadnień, o których należy pamiętać, poszukując serwera, na którym ta aplikacja będzie działać.

W następnym rozdziale Czytelnik zacznie poznawać język PHP — stworzy swoją pierwszą stronę WWWwykorzystującą PHP oraz pozna podstawowe cechy tego języka. Pod koniec rozdziału Czytelnik będziew stanie tworzyć proste, lecz całkiem użyteczne skrypty. Zamieszczone w nim informacje będą stanowićpodstawę do zagadnień opisanych w kolejnych rozdziałach, które są niezbędne do tworzenia naprawdęfajnych aplikacji.

Page 46: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

���

Skorowidz

4D, 558

AACID, 646, 649Active Directory, 32ActivePerl, 243ActiveState, 243Adobe Dreamweaver CS5, 59Adobe Flash, 32Ajax, 59, 403, 404, 405, 409, 411, 412

Asynchronous JavaScript i XML, 403aktualizacja

oprogramowanie serwera, 512alias

zastępcza nazwa domeny, 310Amazon, 379, 381

FWS, 379Apache, 29, 33, 286, 302

serwer, 30API, 152, 178, 379, 380, 388

interfejs programistyczny, 537interfejs programowania aplikacji, 152

aplikacjai18n, 415internetowa, 403, 405, 537, 591, 598, 601, 610, 611kliencka, 538lokalizacja, 415phpMyAdmin, 603szkielet, 425transakcyjna, 650umiędzynarodowienie, 415

apostrof, 71,92, 206, 207, 275, 276, 279lewy, 242, 244

apt-get, 36architektura n-warstwowa, 574

n-tier architecture, 574ARCHIVE, 442

archiwumtar, 453, 454zip, 453

ASP, 47składnia, 65

atak, 273, 512cross-site scripting, 274, 277SQL injection, 537usuwanie plików, 273zapisanie informacji z ciasteczka, 275

Bbaza danych, 32, 126, 156, 274, 291, 292, 423, 425, 435, 436

Adabas D, 32administratorzy, 592Berkeley DB, 32database abstraction layer, 555dBase, 32Express, 32FilePro, 32FontBase, 32Hyperwave, 32IBM DB2, 32indeksacja, 631INFORMATION_SCHEMA, 597Informix, 32Ingres, 32InterBase, 32konto, 393Microsoft SQL Server, 32mSQL, 32MySQL, 32, 60, 61, 286, 291, 292, 293, 294, 441, 537, 613,

617, 629, 650Oracle, 32, 60, 61, 555, 653Ovrimos, 32pielęgnacja, 625początkowa, 453PostgreSQL, 32, 60, 61

Page 47: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

666

baza danychrelacyjna, 339, 441, 447, 449, 485sekwencja operacji, 645Solid, 32SQLite, 60, 341sterownik, 555struktura, 650Sybase, 32system wieloprocesorowy, 442system wielowątkowy, 442test, 468Unix dbm, 32Velocis, 32warstwy abstrakcji, 555wymuszanie integralności danych, 591wymuszanie reguł biznesowych, 591zajście zdarzenia, 591zapobieganie wprowadzaniu nieprawidłowych danych, 591zapytania, 601

bezpieczeństwoluki procesu, 573opcje, 606polecenie LOAD DATA INFILE, 657

Bind, 33Bison, 38BLACKHOLE, 442blok

BEGIN – END, 580case, 96

Blowfish, 29błąd

ignorowanie, 178komunikaty, 302, 304, 561, 442krytyczny, 146, 151, 152, 153, 157, 177obsługa, 30, 560pobieranie kodów SQL, 561połączenia, 560poprawianie, 424poziom zgłaszania, 176rejestracja, 175uruchamiania, 177wyświetlanie w przeglądarce, 177zapisywanie w zmiennej, 178zgłaszanie, 30, 181

BrightHouse, 442buforowanie

danych wyjściowych, 48output buffering, 48wielkości, 48, 49

Ubuntu, 36

CC, 31, 63, 67, 68, 77

język, 28C#, 30, 149, 175, 181, 279, 280

C++, 30, 63, 66, 67, 147, 181, 442CGI

skrypt, 28CGI 1.1, 82ciasteczko, 54,56, 84, 272, 274, 275, 339, 340, 342

cookie, 48, 53, 54, 83CLI, 309

Command Line Interface, 309CloudFront, 379COM/DCOM

obsługa, 29Content-Type, 57CPAN, 245

Comprehensive Perl Archive Network, 245CSS, 59, 281, 404, 406, 407, 408, 410, 614, 615, 616

kaskadowe arkusze stylów, 614CSV, 233, 234cudzysłów, 71, 91, 93, 206, 233, 242, 275

automatyczne poprzedzanie, 55magiczny, 55, 56włączanie, 55

CVS, 442czas, 255, 256, 259, 263, 265, 267, 268

Coordinated Universal Time, 255Daylight Saving Time, 255epoka Uniksa, 255formatowanie, 256, 261, 262, 263internetowy, 256letni, 255, 259lokalizacja, 263modyfikowanie, 268na serwerze, 256określanie aktualnego znacznika, 260operacje związane, 258ostatniej modyfikacji pliku, 228, 229pobieranie dokładniejszych informacji, 259Swatch Beats, 257Swatch Internet Time, 256, 257tworzenie znacznika czasu, 261uderzenia Swatch, 257uniwersalny koordynowany, 255Unix epoch, 255utworzenie obiektu, 268wyświetlanie zlokalizowanych dat i czasu, 261

częstotliwość występowania wartości, 127

Ddane

dynamiczne, 69eksportowanie, 653, 661, 662importowanie, 653, 654kompresja, 49output buffering, 288początkowe, 454, 455

Page 48: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

667

separacja poszczególnych elementów, 654sesyjne, 339, 340, 341, 344, 346, 347, 351, 352, 355skompresowane, 442sposób prezentacji, 420sposób zarządzania, 442statyczne, 69uwierzytelniające, 285, 286, 288, 289, 292wczytywanie przy użyciu skryptu PHP, 660wejściowe, 241

kontrola, 223, 241konwersja, 271, 275, 276ograniczenie, 242weryfikacja, 277, 393zabezpieczenie, 241, 393

wyjściowe, 48, 49, 67, 288data, 255, 256, 257, 258, 263, 267, 268

formatowanie, 256, 262, 263, 267liczba dni w bieżącym miesiącu, 265liczba dni w podanym miesiącu, 265lokalizacja, 263modyfikowanie, 268obliczanie różnicy, 268ostatniej modyfikacji witryny, 265parametry, 257, 263, 264utworzenie obiektu, 267weryfikacja, 256wyliczenie na podstawie różnicy w dniach, 266

demon, 178serwera, 45

deserializacja, 49deskryptor

private, 151zasięg właściwości, 176zasięgu, 144, 150

destruktor, 30, 153, 156_destruct(), 156

DNrozpoznawalna nazwa, 330, 331, 335, 336

DNS, 32, 309, 310, 311, 312Domain Name System, 310nazwy typów, 312pobieranie rekordów, 311, 313rekord, 310, 311sprawdzenie istnienia rekordu, 310typy rekordów, 310, 312

DocBlocks, 66DOM, 403, 404, 405, 407, 409

model obiektów dokumentu, 404domknięcia

closure, 30DSN, 293

Data Source Name 293dyrektywa

AddType, 39, 40allow_call_time_pass_reference, 49allow_url_fopen, 58, 102

always_populate_raw_post_data, 57arg_separator.input, 54arg_separator.output, 53asp_tags, 47auto_append_file, 56auto_detect_line_endings, 59auto_prepend_file, 56crack.default_dictionary, 295, 296date.timezone, 256default_charset, 57default_mimetype, 56default_socket_timeout, 59DirectoryIndex, 43disable_classes, 51, 394disable_functions, 51, 394display_errors, 177, 394display_startup_errors, 177doc_root, 57DocumentRoot, 51engine, 47error_log, 178error_reporting, 176, 177expose_php, 52, 53extension, 44, 58, 59extension_dir, 44, 58file_uploads, 301fopen_wrappers, 236from, 58highlight.bg, 52highlight.comment, 52highlight.default, 52highlight.html, 52highlight.keyword, 52highlight.string, 52ignore_repeated_errors, 178ignore_repeated_source, 178ignore_user_abort, 51, 52implicit_flush, 49include_path, 57, 231, 232, 236, 248, 251, 252konfiguracja, 44, 45, 46, 49, 51, 52, 53, 58, 175, 176, 316, 340LoadModule, 40log_errors, 178log_errors_max_len, 178magic_quotes_gpc, 55, 56magic_quotes_runtime, 56, 237max_execution_time, 46, 53, 395max_file_uploads, 301max_input_time, 53, 301memory_limit, 53, 301, 395obsługa sesji, 340open_basedir, 51, 395output_buffering, 48output_handler, 48, 49PHP_INI_ALL, 47, 48, 49, 51, 52, 53, 54, 56, 57, 58, 59PHPIniDir, 44

Page 49: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

668

dyrektywapost_max_size, 56, 301precision, 47, 49przesyłanie plików, 300register_long_arrays, 55safe_mode, 50, 51safe_mode_ allowed_env_vars, 50safe_mode_ protected_env_vars, 51safe_mode_exec_dir, 50safe_mode_gid, 50safe_mode_include_dir, 50ServerSignature, 53short_open_tag, 45, 46, 47, 64SMTP, 317sql.safe_mode, 395track_errors, 178track_vars, 82unserialize_callback_func, 49upload_max_filesize, 301upload_tmp_dir, 301, 302user_agent, 58user_dir, 58variables_order, 54, 84wartości, 45y2k_compliance, 48zasięg, 46zend.ze1_compatibility_mode, 47zlib.output_compression, 48, 49

dyrektywa konfiguracyjna, 394bezpieczeństwo, 394

dyskokreślanie całkowitej pojemności, 226określanie wielkości, 225, 226, 227określanie wolnego miejsca, 226

dziedziczenie, 141, 142, 143, 153, 160, 161, 164, 165, 166,171, 292, 293wiązanie statyczne, 168wielokrotne, 162

dzienniksystemowy, 180zdarzeń, 178

EEclipse, 60edytor

programistyczny, 35, 59tekstów, 41

eksportdanych, 653

E-Soft, 30EXAMPLE, 442

FFalcon, 442FastCGI, 29, 41FEDERATED, 442Firebird / Interbase, 558Flex, 38format

bzip2, 37CHM, 37DocBook, 37gzip, 37HTML, 37PDF, 37XML, 37

formularzgrupowanie pól, 282HTML, 393tworzenie i weryfikacja danych, 281weryfikacja danych, 273złożone komponenty, 278

forum, 423FTP, 58, 230, 299, 308, 313funkcja, 66, 78, 105, 106, 107, 108, 109, 110, 113, 176

_autoload, 159addslashes(), 55amortizationTable(), 110argumenty opcjonalne, 108array_chunk(), 140array_combine(), 135array_count_values, 219array_count_values(), 127array_diff, 137array_diff_assoc(), 138array_flip(), 129, 209array_intersect(), 136array_intersect_key(), 137array_intersect_ukey(), 137array_key_exists(), 122array_merge(), 134array_merge_recursive(), 134array_push(), 121array_rand(), 139array_reverse(), 129array_search(), 123array_shift(), 121array_slice(), 135array_splice(), 136array_sum(), 139array_udiff(), 138array_unique(), 128array_unshift(), 121array_values(), 123, 198array_walk(), 126array_walk_recursive (), 127

Page 50: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

669

arsort(), 131asort(), 130, 131assignx(), 78basename(), 224biblioteka, 105, 113, 158biblioteka do obsługi dat i czasu, 256bindtextdomain(), 416, 417calcSalesTax(), 107, 109calculate(), 109checkdate(), 256checkdnsrr(), 310, 312chgrp(), 50chmod(), 50chown(), 50class_alias(), 158class_exists(), 158closedir(), 238closelog(), 180copy(), 303count(), 127count_chars(), 217crack_check()., 296crack_opendict(), 296current(), 124date(), 256, 257, 258, 260, 263, 265, 267date_default_timezone_set(), 256define(), 84define_syslog_variables(), 179definicja, 67, 113deklarowanie argumentów, 79destruktory, 153dirname(), 224disk_free_space(), 226disk_total_space(), 226, 227dns_get_record(), 311, 312dokumentacja, 106domyślne wartości argumentów, 108echo(), 49, 63, 125enable_dl(), 58end(), 125ereg(), 192, 194ereg_replace(), 193, 194error_get_last(), 177escapeshellarg(), 241, 242, 275escapeshellcmd(), 241, 275, 276exec(), 50, 51, 53, 227, 239, 242, 243, 273, 274, 276explode(), 118, 211, 212, 290fclose(), 231feof()., 229fgetc(), 235fgetcsv(), 233, 660fgets(), 59, 234file(), 50, 52, 59, 229, 231, 232, 233, 234, 290file_get_contents(),, 232fileatime(), 228

filectime(), 228filemtime(), 229filesize(), 226, 235filter_var(), 277, 278fopen(), 230, 231, 232, 238, 626fopen_with_path(),, 57fread(), 235fscanf(), 236fseek(), 237fsockopen(), 231, 314, 315fwrite(), 236generateFooter(), 106get_class(), 158get_class_methods(), 158get_class_vars(), 158get_declared_classes(), 158get_html_translation_table(), 208get_object_vars(), 159get_parent_class(), 159getdate(), 259getmxrr(), 313getservbyname(), 313getservbyport(), 313, 314gettext(), 416gettimeofday(), 259gettype(), 75header(), 288highlight_file(), 52htmlentities(), 206, 207, 275, 276, 277htmlspecialchars(), 208htmlstriptags(), 208implode(), 212in_array(), 122include(), 56, 57informacja o typie, 109ini_set(), 46interface_exists(), 159is_a(), 159is_array(), 75, 119is_bool(), 75is_float(), 75is_integer, 75is_null(), 75is_numeric(), 75is_object, 75is_resource, 75is_scalar(), 75is_string, 75is_subclass_of(), 159is_uploaded_file(), 299, 302, 303isset(), 288key(), 124konstruktory, 153krsort(), 132ksort(), 132

Page 51: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

670

funkcjaldap_add(),, 332ldap_bind(), 327, 328ldap_close(), 328ldap_search(), 329ldap_start_tls(),, 327ldap_unbind(), 328ltrim(), 214, 216mail(), 316, 317matematyczna, 87mb_convert_case(),, 205md5(), 290, 297method_exists(), 159mktime(), 260, 261, 266move_uploaded_file(), 299, 302, 303mysql_connect(), 395mysql_pconnect(), 395natsort(), 129, 131, 132next(), 124, 125nl2br(), 206ob_gzhandler(), 48obsługa przesyłanych plików, 302określanie typu zmiennych, 75opendir(), 238openlog(), 179, 180parametry, 78, 79, 107, 109parse_ini_file(), 50passthru(), 241, 243pathinfo(), 224, 225phpinfo(), 42pomocnicza, 158pop, 121pow(), 105, 106preg_filter(), 200preg_grep(), 197preg_match(), 198preg_match_all(), 198preg_quote(), 199preg_replace(), 199preg_split(), 201prev(), 125print(), 49, 63, 68print_r(), 120printf(), 63, 68, 75processPayPalPayment(), 109przekazywanie argumentu przez referencję, 107przekazywanie argumentu przez wartość, 107przekazywanie danych, 107przekazywanie wartości z tablicy, 126push, 121range(), 118, 119readdir(), 238readfile(), 236realpath(), 225rekurencyjna, 80, 105, 110

RemoveProfanity(), 172rename(), 240require(), 56, 57, 105rmdir(), 239rsort(), 130rtrim(), 216scandir(), 239setcookie(), 83setlocale(), 128, 262, 263, 264, 416, 419, 420settype(), 75shell_exec(), 244shift, 121show_source(), 52shuffle(), 139sizeof(), 127, 211sort(), 129,130, 131, 132split(), 194, 290spliti(), 195sprintf (), 63sql_regcase(), 195str_pad(), 217str_replace(), 194, 213str_word_count(), 218strcasecmp(), 203strcmp(), 202, 203strcspn(), 204strftime(), 262, 263, 264strip_tags(), 126, 209, 211, 235, 275, 277stripos(), 212stripslashes(), 55strpos(), 212strrpos(), 213strspn(), 203strstr(), 214strtok(), 210strtolower(), 204strtotime(), 266, 267strtoupper(), 204, 205strtr(), 209substr(), 214substr_count(), 215substr_replace(), 216syslog(), 180system(), 50, 51, 53, 227, 239, 243, 273textdomain(, 416time(), 260touch(), 240trim(), 217tworzenie, 106ucfirst(), 205ucwords(), 205uniqid(), 297unshift, 121usort(), 132vprint(), 119

Page 52: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

671

vsprintf(), 120wejścia-wyjścia, 236wykonywanie programów, 242wynik wywołania, 106wywołanie, 105, 106, 107, 108zastępująca, 200zmiennej, 105zwracanie wartości z funkcji, 109zwracanie wielu wartości, 110

GGarrett Jesse James, 403Gettext, 416, 418, 419, 420GIF, 357global, 79globalna przestrzeń nazw, 54gniazdo, 59GNU, 359, 453, 454, 455

Lesser General Public License, 359GPL, 60

GPL, 243grupa interfejsów, 146GUI, 467

graficzy interfejs uzytkownika, 467Gutmans Andi, 28

Hhasło, 285, 393

biblioteka CrackLib, 294długość, 295jednorazowe adresy URL, 285, 296, 297, 298łamanie metodą brutalnej siły, 294odzyskiwanie, 296podobieństwo, 295proces akceptacji, 294rozszerzenia CrackLib, 295standardowa numeracja, 295testowania siły, 294wielkości liter, 295wyczyszczenie, 298zróżnicowanie, 295

hermetyzacja, 141, 143, 146danych wewnątrz obiektu, 146encapsulation, 142zapytań, 601

HTML,formularz, 28, 32, 299, 300, 304konwersja, 202, 206, 208, 209obsługa formularzy, 271przesyłanie danych, 300tabela, 614tabela na podstawie informacji z bazy danych, 617wpisywanie kodu, 208

wysyłanie wiadomości, 319znacznik, 126, 190, 199, 206, 207, 208, 209, 234, 235

HTML_Common, 615HTML_Common2, 281HTML_QuickForm2, 281

konstruktor klasy, 282HTML_Table, 614, 615, 616

tworzenie prostej tabeli, 615HTMLDOC, 241, 242HTTP, 56, 230, 299, 303, 305, 306, 308, 313

Hypertext Transfer Protocol, 339nagłówek, 288protokół, 339, 380, 381przesył hipertekstu, 339

http_Upload, 306, 307HTTPS, 230, 380Hyde Randall, 91

IIBM DB2, 558IDE, 35, 60identyfikator, 76

filtru, 278generowanie unikalnego, 297GID, 50grupy, 50nazwa, 76połączenia, 328sesji, 54, 339, 340, 342, 343, 344, 345, 348session ID, 339session identifier, 339SID, 339UID, 50użytkownika, 50, 297

IISMicrosoft Internet Information Server, 286

IIS Developer Express, 41IMAP, 32, 292, 313implementacja

kilku interfejsów, 170pojedynczego interfejsu, 170

indeks, 198asocjacyjny, 72główny, 632, 633, 643liczbowy, 72normalny, 634normalny wielokolumnowy, 634pełnotekstowy, 635, 636unikalny, 633założony wielokolumnowy, 635

indeks numeryczny, 121wartość, 116

indeksacja, 631, 639, 643leftmost prefixing, 634

indeksowanie liczbami, 121, 134

Page 53: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

672

Infobright, 442informacja o typie, 105

type hinting, 105Informix, 558inkrementacja, 96InnoDB, 442, 446

mechanizm składowania danych, 646, 647, 649, 650instalacja

custom (dowolna), 39typical (typowa), 39

instalator dla systemu WindowsWindows installer, 37

instancjaniezdefiniowanej klasy, 49

instrukcja$count, 97break, 96, 99case, 158catch, 181continue, 100do…while, 97, 99dołączanie plików, 101echo(), 63, 68, 92, 101else, 94elseif, 95for, 94, 97, 99foreach, 94, 98, 99goto, 99, 100if, 89, 94, 101, 128, 358include(), 101, 102, 105, 113include_once, 102print(), 67, 68, 92printf(), 69, 70require, 102, 287require_once, 103require_once(), 160return(), 109sekwencja, 96sprintf (), 70switch, 94, 95, 96, 99, 158try, 181warunkowa, 89, 94, 581while, 94, 96, 99

interfejs, 161, 168, 169, 170, 171aplikacji, 358, 403, 404ilość, 162obiektowy, 556obiektowy dla dat i czasu, 266programistyczny, 467sprawdzenie, 159SQL, 555

inventory_manager, 273, 274, 276ISAPI

obsługa, 29

ISO, 416Międzynarodowa Organizacja Normalizacyjna, 416

ISO-8859-1, 207, 419

JJava, 30, 147, 149, 175, 181, 300, 442

język, 29obiekty, 29

JavaScript, 59, 274, 277, 357, 371, 403, 404, 405, 407, 411, 412asynchroniczne, 403biblioteka, 404

Joomla!, 62jQuery, 403, 404, 405, 406, 407, 408, 409, 411, 412

biblioteka, 405prezentacja, 405

JSON, 404, 411, 412format, 404JavaScript Object Notation, 404

Kkanał

feed, 381URL, 381

kataloganalizowanie zawartości, 238chroniony, 287docelowy, 305docs, 37htdocs, 41instalacyjny, 37, 38języka, 419lista plików, 243manual, 37niewłaściwe uprawnienia, 305obsługa zawartości, 223określanie ścieżki, 224określanie wielkości, 224, 225, 227, 238, 239określanie zawartości, 238operacje na plikach, 395, 398PEAR, 251pobieranie informacji, 224, 231, 236prawo do zapisu, 239przeszukiwanie, 329tymczasowe pliki, 302tymczasowy, 302, 305uchwyt, 238usuwanie, 239wczytanie zawartości, 239zawartość, 242

kiosk, 538klasa, 66, 142, 144, 145, 146, 151, 152, 153, 154, 155, 157,

159, 160abstrakcyjna, 30, 152, 161, 169, 171, 172alias, 158

Page 54: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

673

automatyczne wczytywanie, 159bazowa, 152,153, 155, 159, 161, 165, 167, 171, 172, 182, 184biblioteka, 172, 394cecha, 142chroniona, 151definicja, 73, 142, 143, 163deklarowanie właściwości, 144dziedziczenie, 165graph, 51hierarchia, 161, 168implementacja interfejsu, 169instancje, 144konkretna, 161metody, 150nadrzędna, 159, 165nazwa, 154, 157, 158niezdefiniowana, 160obiekt, 149, 151, 155, 156, 157, 159, 173odwołanie się do właściwości, 145, 147pochodna, 146, 151, 152, 155, 157, 159, 165, 168podrzędna, 165przeciążanie właściwości, 147rozszerzenie definicji, 148składowe statyczne, 156stałe, 149tworzenie, 143tworzenie instancji, 144tworzenie nazwy zastępczej, 158vector, 51właściwości, 144właściwości sfinalizowane, 147wywołanie konstruktora, 155zasięg prywatny, 145, 146zasięg chroniony, 145zasięg finalny, 145zasięg statyczny, 145zasięg właściwości, 145zastępcza, 158zmiana nazw, 153

klientmysql, 467, 470, 471, 474, 475, 476mysqlimport, 658, 659

kluczasocjacyjny, 116, 121, 122, 134numeryczny, 116PRIMARY, 631UNIQE, 631wartości, 632

kodbloki, 64, 65błędu, 83HTML, 63, 64jednowierszowe komentarze, 66kolorowanie, 52komentarze wielowierszowe, 67

komentowanie, 63, 66PHP, 64umieszczanie, 63, 65źródłowy PHP, 38źródłowe serwera Apache, 38

kolejkadefinicja, 121FIFO, 121first in, first out, 121LIFO, 121

kolumnabaza danych, 485definicja, 633

kompilatorANSI-C, 38

komunikacjaasynchroniczna, 405

konfiguracja, 394konkatenacja, 88konstrukcja

array(), 117list(), 110, 118, 234

konstruktory, 30, 153, 166_construct, 154klasa bazowa, 166, 168klasa DateTime, 267klasa pochodna, 167nazwa, 154niepowiązany, 155wywołanie, 167

kontoroot, 38superużytkownika, 38

kontroler, 425, 433fasady, 425front controller, 425

konwersjaformatów liczbowych, 246liczb arabskich na rzymskie, 245pomiędzy formatami, 654znacznika czasu, 259znaków nowego wiersza na znaczniki br, 206znaków specjalnych, 206

konwerterpodsieci, 322

kursorobsługa po stronie serwera, 626odczyt tylko w jednym kierunku — do przodu, 627otwieranie, 627przeznaczenie tylko do odczytu, 626stosowanie, 628wrażliwość, 626zamykanie, 628

kwantyfikator, 191

Page 55: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

674

Llambda

funkcje, 30LDAP, 32, 292, 324, 325, 326, 327, 328, 329, 330, 331, 333,

334, 335, 336, 337IBM Redbooks, 326implementacja, 326Lightweight Directory Access Protocol, 326operacje na zwróconych rekordach, 330pobieranie konkretnego rekordu, 331port, 327poszukiwanie rekordu, 329rekordy, 332serwer, 326sortowanie rekordów, 332specyfikacja, 326wpis do katalogu, 332wstawianie danych, 332zamykanie połączenia z serwerem, 328

LDAPSSecure LDAP, 327

Lerdorf Rasmus, 28, 31LGPL, 359libxml2

biblioteka, 30licznik ruchu, 27localhost, 39, 315, 316lokalizacja

l10n, 415loosely typed, 32

�łańcuch

CHARSET, 418wielobajtowy, 205

łańcuch znakówanaliza, 212dopełnianie, 202, 216, 217dzielenie, 211inne operacje, 201konwersja, 202, 206odczytywanie zawartości pliku, 232, 236odnajdywanie ostatniego wystąpienia, 213określanie długości, 202określanie liczby znaków, 217pobieranie fragmentu, 192, 203, 204, 214, 215podobieństwo, 203podział, 194, 195, 201, 210

na fragmenty, 201porównanie, 202przeszukiwanie, 197przycinanie, 202, 216, 217usuwanie znaków, 216, 217

wyliczanie różnicy, 199, 204zapisywanie, 244

w pliku, 236zastępowanie

fragmentu, 216wystąpień, 213

zliczaniesłów, 218znaków i słów, 202, 217

zmianapierwszej litery, 205wielkości liter, 202, 204

MMac OS X, 36, 59, 60, 451Macintosh, 59MagpieRSS., 379, 382Masinter Larry, 299MCrypt

biblioteka, 29MD5, 29, 290, 292, 294

Message-Digest, 290MDB2, 32mechanizm

obsługi szablonów, 358, 357, 360templating engines, 357rejestracji, 179składowania, 442, 447, 485, 486, 489, 491, 492, 493, 494,

507, 509, 646storage engines, 442

MEMORY, 442MERGE, 442metaznak

przykład, 196metoda

_clone(), 163_get(), 147, 148, 149_set(), 147, 148, 149abstrakcyjna, 152akcesor, 148calculateSalary(), 150DateTime(), 267deklarowanie, 150errorMsg(), 306GET, 82, 84, 102, 272getFiles(), 306, 307informacje o typach, 153isValid(), 306, 308moveTo(), 306, 308mutator, 147niestandardowa

pobierająca, 149ustawiająca, 149

pobierająca, 148, 162

Page 56: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

675

pobieranie nazw, 158POST, 82, 83, 84, 272, 282, 301, 303przeciążanie, 162publiczna, 146, 168setCancelText()., 293setName(), 146setPower(), 73sfinalizowana, 152ustawiająca, 147, 162validateCardNumber(), 151wywoływanie, 150zasięg, 150

Microsoft Web Platform Installer, 41Microsoft Access, 661Microsoft Active Directory, 325Microsoft Excel, 663Microsoft Office, 299Microsoft SQL Server, 558MIME, 39, 40, 53, 56

typ przesłanego pliku, 302model, 423, 425, 437

wzór konieczny, 425modyfikator

przykład, 196Mozilla Firefox, 286MPEG, 299MS-DOS, 59MSI Installer Essentials, 452MTA, 316, 317

Mail Transfer Agent, 316Muffett Alec, 294MVC

Model-View-Controller, 423model-widok-kontroler, 423wzorzec, 423, 424, 425, 439

MyISAM, 442, 485, 486, 487, 488, 489, 490, 491, 492, 493, 509MySQL

AB, 441administracja, 467atrybut tabeli, 485biblioteka osadzonego serwera, 538Community Edition Server, 451data i czas, 485Enterprise Editio Server., 451Improved, 537instalacja, 451, 452instalacja serwera, 451, 452klient, 453, 455, 457, 458, 467, 468, 470, 471, 472, 474,

475, 476, 603, 645kod źródłowy, 452kod źródłowy serwera, 442komponent serwera i klienta, 454konfiguracja serwera, 451, 511mechanizm składowania, 442

narzędzia, 652, 654obsługa osadzonego serwera, 538obsługa wyzwalaczy, 594opcje, 468pakiet RPM, 452platformy systemowe, 442plik binarny, 452, 453, 454, 455pobieranie serwera, 451polecenia, 485, 573RPM Package Manager, 452serwer, 442, 467, 573skompilowane kody źródłowe, 453słowo ignorowane, 637sterownik, 30system uprawnień, 511tabela, 485, 655typ

liczbowy, 485, 494tekstowy, 485danych, 485

wersje, 442wydajność, 442zapytania, 573

mysqli, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547,548, 549, 550, 551, 552, 553debugowanie, 538grupy klas, 537obiektowość, 537obsługa transakcji, 538

mysqlimportopcje, 658

Nnawias

kwadratowy, 190klamrowy, 92

nazwabazy danych, 468, 480hosta, 468, 472, 474, 475, 476, 481użytkownika, 468zastępcza, 601

Nebel Ernesto, 299Netcraft, 28Netpbm, 243Netscape Navigator, 286NitroEDB, 442Nmap, 316, 322NNTP, 32Notepad++, 60Novell eDirectory, 325NOWDOC, 30

Page 57: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

676

Oobiekt, 142, 144, 171

definicja klasy, 72klasa, 72klasa abstrakcyjna, 172klonowanie, 30, 161, 162określanie typu, 159słowo kluczowe new, 73tworzenie, 153, 161, 171usuwanie, 153

ODBC, 558sterownik, 556

odwzorowaniekluczy, 129, 130kluczy i wartości, 130, 131, 140

ogranicznik, 358, 373nawias klamrowy, 358, 361

określanie kontekstu obiektu, 158opcja

--with-config-file-path, 38open source, 33OpenLDAP, 326, 327Opera, 286operacja na wartości, 31operacja na właściwości, 147

accessors, 147akcesoria, 147getters, 147metoda

pobierająca, 147ustawiająca, 147

mutator, 147setters, 147

operand, 85operator, 85

->, 157arytmetyczny, 87bitowy, 90dekrementacja, 88inkrementacja, 88konkatenacja, 88, 106logiczny, 89, 90, 638łańcuchowy, 88łączność, 86odwrotnego apostrofu, 50porównania, 89, 90priorytet, 86przeciążanie, 162przypisania, 86, 87, 88przypisania skrótowy, 87równości, 89

Oracle, 441, 558, 661Oracle Beehive, 325

ORMmapowanie obiektowo-relacyjne, 33object relational mapping, 33

Orte Monte, 359

Pparametr

datadir, 647dopasowania, 194, 198konfiguracyjny, 647ogranicznik, 199przesuniecie, 198, 212, 213, 215URL, 393wejściowy, 277

PCREbiblioteka, 29, 32pakiet, 29Perl Compatible Regular Expressions, 29

PDF, 32, 66, 241, 299, 302, 304PDO, 32

elastyczność, 556instalacja, 557interfejs obiektowy, 556obsługa baz danych, 558opcje połączenia, 559PHP Data Object, 30, 556pobieranie danych, 567pobieranie i ustawianie atrybutów, 562połączenie z serwerem, 558spójność, 556wiązanie parametrów, 565wydajność, 557wykonywanie zapytań, 563

PDT, 60PHP Development Tools, 60

PEAR, 62, 141, 189aktualizacja, 246, 248aktualizacja pakietów, 252Auth_HTTP, 292automatyczna instalacja, 251dołączanie pakietów do skryptów, 251Extension and Application Repository, 32HTML_QuickForm2, 280HTTP_Upload, 305instalacja, 247, 292instalacja i aktualizacja, 245, 246instalacja pakietów Mail oraz Mail_Mime, 317instalacja wybranego pakietu, 250, 253lokalna instalacja na serwerze, 248menedżer pakietów, 248, 251, 252, 253, 254odinstalowanie pakietu, 253Package Manager, 245, 246, 247, 248Packet Manager, 246pakiet Mail, 309, 317

Page 58: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

677

pakiet Mail_Mime, 309, 317pakiety, 249pakiety domyślne, 247PHP Extension and Application Repository, 245plik go-pear.bat, 247repozytorium, 246, 281, 305ręczna instalacja, 251tabelaryczna prezentacja danych, 614ustawienia konfiguracyjne, 247Validate_US, 189

PEAR2, 254PECL, 62, 295

PHP Extension Community Library, 295Perl, 33, 36, 38, 189, 190, 195, 196, 197, 233, 242, 243, 300, 309

język, 28Personal Home Page, 28pętla, 96, 582

do…while, 97for, 89, 97, 99, 121foreach, 98, 99, 119while, 89, 96, 97, 128

Phing, 141PHP

biblioteka, 32, 48blok kodu, 101cechy, 27cena, 33dokumentacja, 37, 66domyślne ustawienia lokalne, 262Extension and Application Repository, 32formularze HTML, 271funkcje, 32funkcje do wykonywania programów 227, 241hasła, 32historia, 27, 28, 33implementacja interfejsu, 169instalacja, 29, 34, 35, 62interpreter, 39, 40, 63, 92język, 27, 28konfiguracja, 34, 35, 38, 40, 43, 44licencja, 33obiektowość, 29obsługa sesji HTTP, 29ograniczenia, 33, 62parser, 28, 84PEAR, 245pliki źródłowe, 37programista, 27programowanie obiektowe, 30przesyłanie plików, 300rozszerzenia plików, 62skalowalność, 28składnia kodu, 31skrypt, 31słowa kluczowe, 76

source, 37szkielet do tworzenia aplikacji, 62szyfrowanie, 29środowisko, 37, 41, 43, 47, 61wersja, 27, 61wysyłanie poczty elektronicznej, 317, 309zarządzanie zasobami, 53znaczniki, 126

PHP Extension and Application Repository, 144PHP/FI

Personal Home Page/Form Interpreter, 28phpBB, 62phpDocumentor, 66, 141plik

.htaccess, 44, 45, 46, 62, 286, 287

.htpasswd, 285, 287biblioteka funkcji, 113binarny, 419CGI, 45CHM, 37domyślny, 43dziennika, 177, 178, 181, 394flat files, 341handle, 230HTML, 37httpd.conf, 39, 40, 43, 44, 45, 46, 52, 53informacja o przesłanym, 306, 307konfiguracyjny, 44, 160lokalny system, 231nazwa, 232odczytywanie

zawartości plików, 231zawartości znak po znaku, 235czasu dostępu i modyfikacji, 228czasu modyfikacji, 240

określanie wielkości, 225, 226operacja wejścia-wyjścia, 223, 230operacje na plikach, 229otwieranie i zamykanie, 230php.ini, 38, 40, 44, 45, 46, 50, 62, 64, 82, 256, 295, 557, 559php.ini-development, 44, 46php.ini-dist, 38, 44php.ini-production, 44, 46php.ini-recommended, 38, 44pobieranie informacji, 224prosty, 341przenoszenie przesłanych, 303przesuwanie wskaźnika, 237przesyłanie większej liczby, 307przetwarzanie ścieżki, 224pyrus.phar, 253rejestru systemowego PEAR, 247sesja, 341tłumaczeń, 418tryby dostępu, 230

Page 59: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

678

tymczasowa nazwa, 304uchwyt, 230, 231wczytywanie całej zawartości, 236wskaźnik, 626zamykanie, 231zewnętrzny, 53

pobieranie listy właściwości obiektu, 159pobieranie listy zadeklarowanych klas, 158podprogramy

architektura, 574bezpieczeństwo, 574handlers, 588modyfikowanie, 586obsługi, 588składnia, 573składowane, 573, 574, 575, 579, 580, 583, 586, 589, 590, 601spójność, 574status, 587usuwanie, 586wydajność, 574wykonywanie, 573, 579wyświetlenie polecenia, 588wywoływanie z innego podprogramu, 586zarządzanie, 573, 580

podzapytanie, 613, 623, 624, 625samozłączenie, 623self-join, 623stosowanie, 625subquiery, 623

poleceniebazy danych, 468, 470DESCRIBE VIEW, 607du, 227GRANT, 511if, 289LOAD DATA INFILE, 655prepared statements, 537przygotowane, 537, 565REVOKE, 511rm, 276SELECT INTO OUTFILE, 661, 662SET PASSWORD, 512SHOW CREATE VIEW, 608SHOW TRIGGERS, 596SQL, 537, 563, 564systemowe, 227, 239, 241, 242, 243, 244USE, 468, 474

polimorfizm, 141, 142, 143, 162polskie znaki diakrytyczne, 205połączenie

bezpieczne, 511używające gniazd, 314z usługą rejestrującą, 179, 180

POP3, 32, 292, 313

port, 380numer, 313, 314komunikacyjny, 313skaner, 315, 322SSH, 512

POSIX, 189, 190, 192, 195biblioteka, 32Portale Operating System Interface for Unix, 190

postdekrementacja, 88PostgreSQL, 558postinkrementacja, 88poszukiwanie wzorca, 198powrót karetki, 317poziom zgłaszania błędów, 176predekrementacja, 88preinkrementacja, 88procedura

składowana, 577program

mysql, 467mysqladmin, 467, 475, 476, 477, 480mysqlimport, 653, 654tar, 454

programowanieobiektowe, 33, 51, 72, 141, 142, 143, 146, 153, 160, 161,

394, 537proceduralne, 33, 537

protokół, 32bezstanowy, 339HTTP, 285, 286, 288, 299HTTP/1.1, 48Secure Socket Layer, 286SSL, 286Transport Layer Security, 327

prototyp, 67przepisywanie adresów URL

URL rewriting, 340przestrzeń nazw, 27, 30, 161, 172, 173przeszukiwanie

baz danych, 631bez uwzględniania wielkości liter, 193z uwzględnieniem wielkości liter, 192

przetłumaczenie tekstów, 418przetwarzanie łańcuchów znaków, 33przewinięcie wiersza, 317Pyrus, 245, 253

instalacje menedżera, 253Python, 30, 33, 175, 181, 309

RRADIUS, 292raportowanie

błędów, 49Raymond Eric S., 33

Page 60: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

679

RDNRelative Distinguished Name, 327

Red Hat, 441, 442RedHat Directory Server, 325referencja, 49, 77, 79, 126, 161, 162, 176

tworzenie, 77Resig John, 405rejestr systemowy, 248rejestracja

błędu, 178funkcja, 179identyfikator, 179opcje, 180użytkowników, 485

rekordbaza danych, 485MX, 313

rekurencja, 111, 127replikacja, 538repozytorium, 416, 417root

hasło użytkownika, 512uprawnienia użytkownika, 468

rozszerzenie.html, 39, 40, 357.jason, 39, 40.php, 39, 40, 43, 62.php5, 39, 40.phtml, 62Filter, 275, 277, 278

RSA Security Inc, 290RSS, 379, 381, 382, 383, 384, 386

agregator, 381czytnik, 381Really Simple Syndication, 379, 381

rzutowanie, 73operatory, 73

SSAMBA, 292schemat adresowania IP, 309, 310sekcja

Global Environment, 40środowisko ogólne, 40

sekretny kod, 94sekwencje sterujące, 91, 93sendmail, 33, 316, 317separacja, 357serializacja, 49serwer

administrator, 39Apache, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 51, 52, 53,

62, 285, 286, 287, 292, 395, 396, 397, 398, 399Apache2, 39

asynchroniczna komunikacja, 403baz danych, 61, 441, 442, 467binarne wersje, 36CVS, 37dedykowany, 61DNS, 309, 310dokumentacja, 37IIS, 29, 35, 36, 37, 41IIS 7, 41instalacja, 35, 40kod źródłowy, 36, 451komunikacja z aplikacją, 404konfiguracja, 394, 398, 468konta użytkowników, 512kopia, 36LDAP, 326mirror, 36MySQL, 441, 443, 444, 445, 446, 448, 449, 511, 512, 513,

514, 515, 516, 518, 519, 520, 523, 524, 526, 528, 529,530, 531, 534, 535, 555, 560, 561, 564, 601, 602, 611,645, 646, 653, 655, 659

nazw domen, 310obsługa SSL, 36obszary chronione, 51Oracle, 555pamięć operacyjna, 486pobieranie, 36podpis, 53proces, 511przerwanie sesji, 52przesyłanie plików, 299, 300, 304, 305, 306środowisko, 240testowanie połączenia, 321wielkość pliku przesyłanego, 301wirtualny, 61współdzielony, 61, 179WWW, 35, 36, 42, 44, 52, 53, 60, 61, 62, 80, 82, 177, 178,

239, 240, 241, 286, 289, 302, 305, 357, 360, 393, 394,512, 659

Xitami, 37zabezpieczania procesu, 511

serwer bazy danychSQLite, 30

sesjaobsługa, 339proces obsługi, 340ścieżka do pliku, 341

SHA1, 29sieć, 309, 314, 324

czynności, 309konfiguracja, 322popularne operacje, 316, 321testowanie przepustowości łącza, 324usługi, 379

SimpleXML, 30, 379, 387, 389, 390, 391

Page 61: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

680

sklep internetowy, 423składnia

heredoc, 93języka programowania, 358nowdoc, 93skryptów powłoki, 66

skryptaktualizacja, 416mysql_install_db, 454, 455powłoki, 63, 66, 67

słownikcracklib_dict.pwd, 296

słowo ignorowane, 637mechanizm, 637stopwords, 637

słowo kluczowe$this, 143, 145, 148, 149, 150, 154, 157abstract, 171clone, 162final, 147implements, 169instanceof, 157, 158parent, 155protected, 146public, 145, 150self, 157, 168static, 168var, 176

Smarty, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,368, 369, 370, 371, 372, 373, 374, 375, 376, 377bezpieczeństwo, 359kompilacja szablonów, 359konfiguracja i rozszerzenia, 359logika prezentacji, 359przedstawienie mechanizmu, 359wykorzystanie pamięci podręcznej, 359

SMTP, 316, 317, 512sortowanie, 128, 613, 618

bąbelkowe, 128dane, 442heapsort, 128kluczy w odwrotnej kolejności, 132kolejność numeryczna, 129kolejność rosnąca, 130, 132na podstawie kryteriów określonych

przez użytkownika, 132na podstawie wartości ich kodów ASCII, 129na podstawie wartości kluczy, 132odwrotna (malejąca) kolejność, 130przez kopcowanie, 128quicksort, 128SORT_LOCALE_STRING, 128SORT_NUMERIC, 128, 129SORT_REGULAR, 128, 129

SORT_STRING, 128, 129Stella, 128szybkie, 128w kolejności malejące z zachowaniem odwzorowania

kluczy i wartości, 131w porządku naturalnym, 131wartości liczbowych, 128

specyfikator typu, 69SPL, 186, 187

Standardowa Biblioteka PHP, 186sprawdzanie typu klasy pochodnej obiektu, 159sprawdzanie, czy istnieje metoda, 159SQL, 291, 297, 467, 468, 470, 471, 474, 476, 477, 482

sekwencja zapytań, 601zarządzanie kodem, 573

SQLite, 341obsługa, 30

SQLite 3.X, 558SSH., 313SSL, 511, 526, 531, 532, 533, 534stała, 84

definiowanie, 85static, 80statyczne wiązanie, 30stos

last in, first out, 121LIFO, 121

strukturaAppliance, 72, 73break, 63continue, 63declare, 63foreach, 63, 98if-else-elseif, 63include, 63, 101, 102require, 63, 103require_once, 103sterująca, 63, 93, 94while, 63, 96

Supraski Zeev, 28Sun Microsystems, 441Swatch, 256symbol znakowy, 206system

budowania, 38operacyjny, 223, 240, 241, 242, 243, 393operacyjny poprawki, 512

szkieletCakePHP, 426Ruby on Rails, 425Solar, 426

szkielet aplikacji internetowej, 423web frameworks, 423

szyfrowanie, 287, 289

Page 62: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

681

ścieżka

bezwzględna, 225dodatkowe informacje, 224

Ttabela, 297, 485, 601, 606, 662

baza danych, 485definicja, 633docelowa, 657, 658dodanie danych, 648przestrzeń, 647struktura, 633table space, 647tworzenie, 646użytkowników, 291

tablica, 72, 115,$_COOKIE, 83$_ENV, 84$_FILES, 83, 299, 300, 302$_GET, 82$_POST, 82, 83, 272$_REQUEST, 84$_SERVER, 82$_SESSION, 84$GLOBALS, 79, 84asocjacyjna, 117, 120, 123, 127, 129, 137, 138, 158, 159,

177, 224, 259definicja, 115dodawanie elementów, 121dzielenie, 134, 140elementy, 115, 118, 127, 128, 129, 134, 140indeks, 72, 198indeksowana liczbami, 117, 123klucz, 72, 115, 128, 134, 307losowa zmiana kolejności elementów, 139łączenie, 115, 134, 135łączenie rekurencyjne, 134odczytywanie zawartości pliku, 231odnajdywanie elementów, 122odwzorowanie kluczy i wartości, 130określanie

różnicy, 137, 138wielkości, 127

pobieranieaktualnego klucza i wartości, 125fragmentu, 135klucza, 123klucza aktualnego elementu, 124 wartości, 123pobieranie wartości aktualnego elementu, 124

poszukiwanie wartości, 123powtórzenia, 128

predefiniowana, 82przeglądanie, 115, 124przekazywanie wartości do funkcji, 126przesuwanie wskaźnika, 125przeszukiwanie, 122, 197sortowanie, 115, 128, 129sortowanie kluczy, 132sumowanie wartości, 139tworzenie, 115, 116, 117unikalne wartości, 128unikalność, 127usuwanie elementów, 121wartości, 116, 117, 124, 126, 128, 130, 132, 137, 138wczytanie zawartości katalogu, 225, 231, 232, 238, 239wczytywanie pliku CSV, 233wejściowa, 128, 129, 136wielkość, 117, 127wielowymiarowa, 72, 116, 119, 127, 140wskaźnik, 116, 626wycinanie elementów, 136wyświetlanie, 120

zawartości, 119wyznaczanie części wspólnej, 136zamiana kluczy i wartości, 129zapis do pliku, 290zapis do zmiennej, 259zawierająca tablice, 116zmiana kolejności elementów, 129, 139zwracanie losowego zbioru kluczy, 139

TcX DataKonsult AB, 441teoria informacji, 70testowanie instalacji, 35, 39, 41TLS, 327

połączenie, 327Transport Layer Security, 327

tłumaczenietekstów, 420wyświetlanie daty, liczby oraz godziny, 420

transakcja, 485, 538, 645, 649, 650atomicity, 646committed, 485, 645consistency, 646durability, 646isolation, 646izolacja, 646niepodzielność, 646PDO, 570, 571realizacja, 648rolled back, 485, 645spójność, 646trwałość, 646wycofanie, 485, 645zatwierdzanie, 485, 645

TripleDES, 29try/catch, 30

Page 63: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

682

trybbezpieczny, 50, 394, 395interaktywny, 467, 468, 470, 471, 474, 475safe mode, 50, 394wsadowy, 467

typ danych, 67, 70, 71, 73, 74automatyczna konwersja, 74, 85konwersja, 73, 75liczba całkowita, 70, 71łańcuch znaków, 69, 70, 71, 73, 74, 84, 91MySQL, 485obiekt, 72, 74, 162rzutowanie, 73skalarny, 70, 92, 109tablice, 70, 71, 72, 73wartość logiczna, 70złożony, 71, 72zmienne, 74zmiennoprzecinkowa, 70, 71

UUnicode, 27, 30, 415Unix, 63, 248, 255, 256, 295uprawnienia, 576uproszczona składnia, 65URL

przepisywanie adresów, 62rewriting, 62

usługa, 314DNS, 309, 310katalogowe, 325pobieranie nazwy, 314sieciowa, 30, 379, 380, 381, 423systemowa, 512web services, 379wyłączenie, 512

UTC, 255uwierzytelnianie, 285, 287, 289, 290, 291

baza danych, 291, 292, 293drzewo katalogów, 289HTTP, 286kod 401, 288metodologia, 288nazwa użytkownika i hasło, 285, 286, 287, 288, 289niezaszyfrowane informacje, 286plik, 289procedura, 285stałe dane, 289użytkowników, 32, 285, 286, 287, 288, 290w oparciu o protokół HTTP, 285zarządzanie, 294zmienne PHP, 285, 287

VValidate_PL, 189Validate_US, 189, 219, 220, 221

instalacja, 220stosowanie, 220

WWalk Jog Run, 379warstwa

logiki biznesowej, 357prezentacji, 357, 362, 363

warstwa abstrakcjidostęp do danych, 32funkcje, 32Java Database Connectivity, 556JDBC, 556MDB2, 556ODBC, 556Open Database Connecivity, 556PDO, 556Perl Database Interface, 556Perl DBI, 556

wartość&amp;, 530, 70array, 75atrybut obiektu, 74boolean, 73, 75double, 49, 71, 73, 75dziesiętna, 70float, 49, 69, 71integer, 69, 73, 75LD_LIBRARY_PATH, 51liczba całkowita, 73, 153liczba rzeczywista, 71logiczna, 70łańcuch znaków, 73monetarna, 70, 71NULL, 48, 49, 50, 51, 56, 57, 58, 59object, 73, 74, 75PHP_, 50resource, 75string, 68, 69, 70, 73, 75text/html, 56unknown type, 75zależności, 89zmiennoprzecinkowa, 69, 73, 74, 153

wartość dyrektywyphp_admin_flag, 45, 46php_admin_value, 45php_flag, 45php_value, 45

Page 64: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

683

weryfikacjadanych, 277

widok, 425, 433aktualizujące, 609korzystanie w serwerze, 602modyfikacja, 609postać wyników, 604przedstawienie, 602przekazanie parametrów, 605stosowanie, 610usuwanie, 609view, 601wyświetlanie informacji, 607

wierszbaza danych, 485kodu, 31komunikatu, 178

Windows,7, 41Server 2003, 41Server 2008, 41Vista, 41XP, 41

Windows-1251, 419wirtualizacja, 61właściwości

nazwy, 158pobieranie nazw, 158statyczne, 157, 168

WML, 56Wireless Markup Language, 56

Woozor, 379WordPress, 62wskaźnik

pointer, 626wyjątek, 30,175, 181, 182, 183, 184, 185, 186, 187

implementacja obsługi, 182klasy, 186, 187konstruktor domyślny, 182konstruktor przeciążony, 183metody, 183obsługa, 175, 181, 182predefiniowany, 186przechwytywanie wielu, 185SPL, 186

wynikcursor, 626kursor, 626zbiór, 626

wyrażenia, 85wyrażenie regularne, 189, 202, 210, 211

funkcje obsługi, 192metaznaki, 196modyfikatory, 196składnia, 190, 195

WYSIWYG, 59what you see is what you get, 59

wyszukiwanie, 631pełnotekstowe, 642pełnotekstowe z elementami logicznymi, 638z użyciem formularzy HTML, 631, 639

wyświetlanienumerów stron, 621

wywołaniefunkcji, 31kolejność, 31

wyzwalacze, 591, 592, 594, 598, 599konwencja nazewnictwa, 595modyfikacja, 598prezentacja, 591rejestracja danych, 592trigger, 591, 592, 597usuwanie, 598weryfikacja, 592wykonywanie, 593wymuszanie integralności odwołań, 592wyświetlanie, 596

wzorzecMVC, 423

XXAMPP, 36Xerox Corporation, 299XHTML, 614XML, 30, 44, 47, 59, 379, 381, 384, 387, 388, 389, 390,

391, 403, 404asynchroniczne, 403

Zzabezpieczanie, 273

aplikacji, 54, 394argument wywoływanych programów, 275danych, 275, 277, 278mechanizmy, 537metaznak wiersza poleceń, 276serwer MySQL, 511systemy, 511witryn WWW, 393

Zandstra Matt, 141zapis

dziesiętny, 71ósemkowy, 71szesnastkowy, 71

zapora ogniowa, 313, 380, 512uszczelnianie, 512

zapytaniekursor, 613, 626, 627, 628optymalizacja zapytań, 631podzapytania, 613

Page 65: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

684

zapytaniepodział wyników na strony, 613, 619prezentacja danych w formacie tabelarycznym, 613query expansion, 636POSIX, 33rozwijanie, 636sortowanie danych w formacie tabelarycznym, 613subquery, 613unikalność, 631

zarządzaniekonta użytkowników, 511uprawnienia, 601

zasięgchroniony, 146, 151prywatny, 146, 151publiczny, 145, 150właściwości statyczne, 168

zasięg dyrektywy, 46PHP_INI_ALL, 46PHP_INI_PERDIR, 46, 57PHP_INI_SYSTEM, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58PHP_INI_USER, 46

zasób 231obsługa, 229

zastępowanie tekstubez uwzględniania wielkości liter, 194z uwzględnieniem wielkości liter, 193

zastępowanie wszystkich wystąpień wzorca, 199zbiór znaków, 419zdarzenie

asynchroniczne, 404Zend Framework, 423, 426, 427, 428, 429, 430, 431, 432,

433, 434, 435, 436, 438, 439mechanizm skryptowy, 28szkielet, 423

Zend Studio, 60Zend Technologies Ltd, 28, 37, 41, 60zip dla systemu Windows

zip package, 37zmienna, 66, 76, 93, 108

$_SERVER, 273$_SERVER['PHP_AUTH_PW'], 285, 287, 288, 289$_SERVER['PHP_AUTH_USER'], 285, 287, 288, 289$category, 96$count, 96$date, 65$HTTP_RAW_POST, 57$somevar, 79automatyczne usuwanie, 32COOKIE, 54, 55deklaracje, 76, 578dostępna globalnie, 54ENVIRONMENT, 54, 55GET, 53, 54, 55, 56globalna, 78, 79

lokalna, 78, 79, 80łańcuch znaków, 71parametry funkcji, 78PHP_INCLUDE_PATH, 57pole formularza, 280położenie deklaracji, 78POST, 53, 54, 55, 56, 57przekształcenia, 79przypisanie przez referencję, 77przypisywanie wartości, 77register_globals, 54, 55rzutowanie, 32SERVER, 54, 55sessionid, 54statyczna, 78, 80superglobalna, 54, 80symboliczna, 28ustawianie, 578wartość, 78, 79, 84, 88, 89zasięg, 78zakres, 30zawierająca tablicę, 119zewnętrzna, 53, 54zmienna, 84zwyczajna, 81

Zmievski Andrei, 359znacznik

%>, 65?>, 43<%, 65<?php, 43<script>, 65czasu, 255, 256, 260, 261czasu Uniksowy, 255, 257, 258, 259, 260, 261HTML, 404krótki, 46, 47, 64, 65krótki otwierający, 47otwierający, 64short open tags, 47short tags, 46timestamps, 255usuwanie, 234, 277zamykający, 64

znak$, 76, 84, 85, 92, 145, 147, 192&, 107, 208:, 94~, 244<<<, 93cudzysłów, 92endfor, 94endforeach, 94endif, 94end-of-file, 229endswitch, 94

Page 66: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...

SKOROWIDZ

685

endwhile, 94EOF, 229, 234, 235, 237escape character, 78klasy, 192konwersja, 276końca wiersza, 59końca pliku, 229liczba znaków, 234łańcuch, 68, 86\n, 91nowego wiersza, 92, 231, 235

odwrotnego ukośnika, 75, 78, 92, 93, 191, 192, 199oznaczanie potencjalnie niebezpiecznych, 242powrót karetki, 92predefiniowana lista, 210predefiniowane zakresy, 192rozpoznawanie końca pliku, 229rozpoznawanie nowego wiersza, 229specjalny, 199, 206, 207tabulacja pozioma, 92tyldy, 244unikowy, 78w zapisie ósemkowym, 92

Page 67: PHP i MySQL. Od podstaw. Wydanie IV · Potęga PEAR — konwersja formatów liczbowych ... Korzystanie z plików .htaccess serwera Apache ... Przesyłanie pliku na serwer ...