Spis Treści
SPIS TREŚCI............................................................................................................................................................ 1
WSTĘP...................................................................................................................................................................... 7
Dla kogo jest przeznaczona ta książka............................................................................................................... 7
Konwencje.......................................................................................................................................................... 7
Omówienie książki.............................................................................................................................................. 7
Od autora............................................................................................................................................................ 8
Przykłady kodu................................................................................................................................................... 8
CZYM JEST PHP....................................................................................................................................................... 8
DLACZEGO POWINIENEŚ UŻYĆ PHP......................................................................................................................... 9
GDZIE SZUKAĆ POMOCY.......................................................................................................................................... 9
PODZIĘKOWANIA................................................................................................................................................... 10
O AUTORZE............................................................................................................................................................ 10
ROZDZIAŁ 1. KOMPILACJA I INSTALOWANIE PHP................................................................................ 11
WSTĘP................................................................................................................................................................... 11
POBIERANIE PHP................................................................................................................................................... 11
INSTALOWANIE WERSJI BINARNEJ.......................................................................................................................... 11
Binarna instalacja dla Windows ...................................................................................................................... 11
Instalowanie PHP w postaci modułu ISAPI................................................................................................. 12
Użycie PHP jako CGI................................................................................................................................... 14
Inne instalacje binarne ..................................................................................................................................... 14
KOMPILOWANIE PHP ............................................................................................................................................ 15
Kompilowanie PHP w Uniksach ...................................................................................................................... 15
Kompilacja modułu CGI .............................................................................................................................. 15
Kompilacja PHP jako statycznie dołączanego modułu Apache ................................................................... 17
Kompilacja PHP do postaci dynamicznie ładowanego modułu Apache...................................................... 17
Podsumowanie kompilacji PHP w systemach Unix..................................................................................... 18
Kompilowanie PHP w środowisku Windows ................................................................................................... 18
Podsumowanie kompilacji PHP....................................................................................................................... 20
KONFIGUROWANIE PHP ........................................................................................................................................ 20
Korzystanie z pliku php.ini ............................................................................................................................... 20
Inne metody zmiany konfiguracji PHP............................................................................................................. 21
PODSUMOWANIE.................................................................................................................................................... 22
ROZDZIAŁ 2. JĘZYK .......................................................................................................................................... 23
WSTĘP................................................................................................................................................................... 23
OGÓLNE INFORMACJE NA TEMAT SKŁADNI............................................................................................................ 23
TYPY ..................................................................................................................................................................... 24
Liczby — całkowite i zmiennoprzecinkowe ...................................................................................................... 24
Ciągi ................................................................................................................................................................. 24
Tablice .............................................................................................................................................................. 25
ZMIENNE I STAŁE................................................................................................................................................... 26
Zmienne predefiniowane .................................................................................................................................. 26
Zasięg zmiennych.............................................................................................................................................. 30
Spis Treści 2
Stałe.................................................................................................................................................................. 31
OPERATORY I KOLEJNOŚĆ OPERATORÓW............................................................................................................... 31
PROGRAMOWANIE PRZEPŁYWU STEROWANIA........................................................................................................ 32
if, else, elseif ..................................................................................................................................................... 32
while ................................................................................................................................................................. 32
do .. while ......................................................................................................................................................... 32
for ..................................................................................................................................................................... 33
foreach.............................................................................................................................................................. 33
switch................................................................................................................................................................ 33
break i continue................................................................................................................................................ 35
include i require ............................................................................................................................................... 36
FUNKCJE................................................................................................................................................................ 36
Klasy i programowanie obiektowe................................................................................................................... 37
PORÓWNYWANIE WZORCÓW.................................................................................................................................. 39
Podsumowanie.................................................................................................................................................. 39
ROZDZIAŁ 3. FORMULARZE I COOKIE....................................................................................................... 40
WSTĘP................................................................................................................................................................... 40
OBSŁUGA FORMULARZYW PHP............................................................................................................................ 41
Skalarne i wielowartościowe elementy formularza.......................................................................................... 41
Alternatywne metody odczytywania wartości z formularza ............................................................................. 42
Użycie formularzy do przesyłania plików......................................................................................................... 45
Użycie rysunku jako przycisku wysłania danych.............................................................................................. 45
KONTROLA POPRAWNOŚCI DANYCH FORMULARZA................................................................................................ 46
Kontrola danych za pomocą wyrażeń regularnych .......................................................................................... 46
Kontrola poprawności za pomocą sprawdzania typów.................................................................................... 47
Klasa Validator ................................................................................................................................................ 48
COOKIE.................................................................................................................................................................. 49
WAŻNE ZAGADNIENIA PROGRAMOWANIA DLA WWW.......................................................................................... 50
Obsługa nieprawidłowych danych ................................................................................................................... 50
Obsługa i formatowanie wyświetlanych danych .............................................................................................. 52
PODSUMOWANIE.................................................................................................................................................... 57
ROZDZIAŁ 4. OPERACJE NA PLIKACH........................................................................................................ 58
WSTĘP................................................................................................................................................................... 58
ODCZYT I ZAPIS PLIKÓW ........................................................................................................................................ 58
UŻYCIE GNIAZD..................................................................................................................................................... 59
UŻYCIE POTOKÓW ................................................................................................................................................. 60
KLASA FILE........................................................................................................................................................... 61
PODSUMOWANIE.................................................................................................................................................... 61
ROZDZIAŁ 5. WYSYŁANIE PLIKÓW PRZEZ FORMULARZ.................................................................... 62
WSTĘP................................................................................................................................................................... 62
WYSYŁANIE POJEDYNCZEGO PLIKU....................................................................................................................... 62
PUŁAPKI................................................................................................................................................................ 64
PRZESYŁANIE WIELU PLIKÓW ................................................................................................................................ 64
BEZPIECZEŃSTWO.................................................................................................................................................. 65
PODSUMOWANIE.................................................................................................................................................... 66
ROZDZIAŁ 6. WSPÓŁPRACA Z BAZAMI DANYCH.................................................................................... 67
WSTĘP................................................................................................................................................................... 67
WPROWADZENIE ................................................................................................................................................... 67
FUNKCJE BAZ DANYCH .......................................................................................................................................... 67
MYSQL................................................................................................................................................................. 68
PHP – Kompendium wiedzy3
Rozpoczynamy pracę z MySQL ........................................................................................................................ 68
Użycie MySQL.................................................................................................................................................. 68
ODBC ................................................................................................................................................................... 71
Podstawy ODBC............................................................................................................................................... 71
Instalowanie i kompilowanie unixODBC .................................................................................................... 72
Kompilowanie PHP z obsługą unixODBC................................................................................................... 72
Instalowanie sterownika OOB...................................................................................................................... 72
Konfigurowanie OOB .................................................................................................................................. 72
Korzystanie z ODBC......................................................................................................................................... 73
PHPLIB ................................................................................................................................................................ 74
PRZECHOWYWANIE DANYCH Z FORMULARZY........................................................................................................ 75
WYKORZYSTANIE MOŻLIWOŚCI BAZYDANYCH ..................................................................................................... 77
PODSUMOWANIE.................................................................................................................................................... 78
ROZDZIAŁ 7. SESJE I STAN APLIKACJI....................................................................................................... 80
WSTĘP................................................................................................................................................................... 80
PODSTAWYMECHANIZMU SESJI............................................................................................................................. 80
WBUDOWANYW PHP MECHANIZM ZARZĄDZANIA SESJAMI.................................................................................. 81
Rozpoczęcie pracy z sesjami w PHP ................................................................................................................ 81
Przesyłanie identyfikatora sesji bez użycia cookie ........................................................................................... 83
Zapisywanie zmiennych sesji w bazie danych .................................................................................................. 85
Inne funkcje i opcje dotyczące sesji.................................................................................................................. 89
UŻYCIE PHPLIB DO OBSŁUGI SESJI....................................................................................................................... 90
TWORZENIE WŁASNEGO MECHANIZMU SESJI ......................................................................................................... 92
INŻYNIERIA PROGRAMOWANIA A SESJE ................................................................................................................. 92
PODSUMOWANIE.................................................................................................................................................... 94
ROZDZIAŁ 8. UWIERZYTELNIANIE.............................................................................................................. 95
WSTĘP................................................................................................................................................................... 95
PODSTAWOWE UWIERZYTELNIANIE W APACHE ..................................................................................................... 95
AKTUALIZACJA PLIKU .HTACCESS PRZYUŻYCIU PHP............................................................................................ 97
PODSTAWOWE UWIERZYTELNIANIE ZA POMOCĄ PHP............................................................................................ 99
KOMPLETNYSYSTEM UWIERZYTELNIANIA OPARTY O PHP.................................................................................. 100
PODSUMOWANIE.................................................................................................................................................. 104
ROZDZIAŁ 9. NIEZALEŻNOŚĆ OD PRZEGLĄDARKI ............................................................................. 105
WSTĘP................................................................................................................................................................. 105
ROZPOCZYNAMY................................................................................................................................................. 105
WEWNĘTRZNE FUNKCJE PHP .............................................................................................................................. 106
Dodatkowe informacje na temat Browscap.................................................................................................... 106
BROWSERHAWK.................................................................................................................................................. 109
WYKORZYSTANIE DANYCH O PRZEGLĄDARCE..................................................................................................... 113
PODSUMOWANIE.................................................................................................................................................. 114
ROZDZIAŁ 10. URUCHAMIANIE................................................................................................................... 115
WSTĘP................................................................................................................................................................. 115
INŻYNIERIA PROGRAMOWANIA A URUCHAMIANIE............................................................................................... 115
Projekt aplikacji............................................................................................................................................. 115
Definiowanie standardów programowania .................................................................................................... 116
Przegląd oprogramowania............................................................................................................................. 116
Testowanie...................................................................................................................................................... 117
Uruchamianie................................................................................................................................................. 117
PROGRAMOWANIE DEFENSYWNE......................................................................................................................... 118
WŁASNA OBSŁUGA BŁĘDÓW................................................................................................................................ 122
Spis Treści 4
ZAAWANSOWANA OBSŁUGA BŁĘDÓW.................................................................................................................. 125
PODSUMOWANIE.................................................................................................................................................. 129
BIBLIOGRAFIA ..................................................................................................................................................... 130
ROZDZIAŁ 11. PONOWNE WYKORZYSTANIE KODU ............................................................................ 131
WSTĘP................................................................................................................................................................. 131
PONOWNE WYKORZYSTANIE KODU A INŻYNIERIA PROGRAMOWANIA.................................................................. 131
PONOWNE UŻYCIE ISTNIEJĄCEGO KODU............................................................................................................... 132
PHP ................................................................................................................................................................ 132
C/C++............................................................................................................................................................ 133
Java................................................................................................................................................................. 138
Dodawanie obsługi Javy w PHP na *niksach............................................................................................. 138
Dołączanie obsługi Javy w PHP dla Windows........................................................................................... 139
Opcje konfiguracji Javy.............................................................................................................................. 139
COM ............................................................................................................................................................... 141
Inne metody .................................................................................................................................................... 143
PODSUMOWANIE.................................................................................................................................................. 144
BIBLIOGRAFIA ..................................................................................................................................................... 144
ROZDZIAŁ 12. ODDZIELANIE KODU HTML OD PHP............................................................................. 145
WSTĘP................................................................................................................................................................. 145
WPROWADZENIE ................................................................................................................................................. 145
ODDZIELENIE I INTEGRACJA PRZY UŻYCIU WBUDOWANYCH FUNKCJI PHP.......................................................... 146
Motywacja...................................................................................................................................................... 146
Implementacja................................................................................................................................................ 147
Czego należy unikać ....................................................................................................................................... 151
Podsumowanie: Oddzielanie i integracja przy wykorzystaniu funkcji PHP.................................................. 151
WYKORZYSTANIE SYSTEMU SZABLONÓW............................................................................................................ 152
FastTemplate.................................................................................................................................................. 152
Zaawansowane techniki użycia FastTemplate ............................................................................................... 157
PODSUMOWANIE.................................................................................................................................................. 159
BIBLIOGRAFIA ..................................................................................................................................................... 159
ROZDZIAŁ 13. FAJNY PHP.............................................................................................................................. 160
WSTĘP................................................................................................................................................................. 160
WYSYŁANIE DO PRZEGLĄDARKI PLIKÓW INNYCH NIŻ HTML.............................................................................. 160
SKRYPTYAUTOMATYZUJĄCE............................................................................................................................... 164
WDDX................................................................................................................................................................ 168
MONITOROWANIE SIECI ....................................................................................................................................... 172
PODSUMOWANIE.................................................................................................................................................. 174
ROZDZIAŁ 14. WITRYNY OPARTE O SZABLONY................................................................................... 175
PODSTAWYWYKORZYSTANIA SZABLONÓW......................................................................................................... 175
ZAPOŻYCZANIE.................................................................................................................................................... 183
PERSONALIZACJA WITRYNY................................................................................................................................. 185
OBSŁUGA WIELU JĘZYKÓW .................................................................................................................................. 187
PODSUMOWANIE.................................................................................................................................................. 189
ROZDZIAŁ 15. WITRYNY OPARTE O BAZĘ DANYCH............................................................................ 190
WSTĘP................................................................................................................................................................. 190
PROJEKT BAZYDANYCH ...................................................................................................................................... 190
ZARZĄDZANIE DANYMI APLIKACJI....................................................................................................................... 192
WYŚWIETLANIE DANYCH..................................................................................................................................... 199
PODSUMOWANIE.................................................................................................................................................. 204
PHP – Kompendium wiedzy5
ROZDZIAŁ 16. GENEROWANIE STATYCZNYCH STRON HTML W OPARCIU O DYNAMICZNE
DANE..................................................................................................................................................................... 205
WSTĘP................................................................................................................................................................. 205
KONCEPCJA ......................................................................................................................................................... 205
GENEROWANIE STRON STATYCZNYCH................................................................................................................. 205
Użycie buforowania........................................................................................................................................ 205
Użycie FastTemplate...................................................................................................................................... 207
TECHNIKI BUFOROWANIA.................................................................................................................................... 208
PODSUMOWANIE.................................................................................................................................................. 210
ROZDZIAŁ 17. WITRYNY HANDLU ELEKTRONICZNEGO ................................................................... 211
WSTĘP................................................................................................................................................................. 211
BEZPIECZEŃSTWO................................................................................................................................................ 211
Zastosowanie SSL........................................................................................................................................... 211
Certyfikaty...................................................................................................................................................... 211
Bezpieczeństwo bazy danych .......................................................................................................................... 212
PRZETWARZANIE PŁATNOŚCI............................................................................................................................... 212
DOSTARCZANIE PRODUKTÓW .............................................................................................................................. 219
PODSUMOWANIE.................................................................................................................................................. 220
DODATEK A. FUNKCJE ................................................................................................................................... 221
DODATEK B. PREDEFINIOWANE ZMIENNE I STAŁE PHP................................................................... 367
ZMIENNE ............................................................................................................................................................. 367
Zmienne Apache ............................................................................................................................................. 367
Zmienne środowiska....................................................................................................................................... 369
Zmienne PHP.................................................................................................................................................. 369
STAŁE.................................................................................................................................................................. 370
DODATEK C. OPCJE KOMPILACJI PHP..................................................................................................... 372
BAZYDANYCH..................................................................................................................................................... 372
HANDEL ELEKTRONICZNY ................................................................................................................................... 374
GRAFIKA ............................................................................................................................................................. 374
RÓŻNE ................................................................................................................................................................. 375
--enable-inline-optimization........................................................................................................................... 376
SIEĆ..................................................................................................................................................................... 379
DZIAŁANIE PHP .................................................................................................................................................. 379
SERWER............................................................................................................................................................... 380
TEKST I JĘZYK ..................................................................................................................................................... 380
XML................................................................................................................................................................... 381
DODATEK D. OPCJE KONFIGURACJI PHP................................................................................................ 382
OGÓLNE DYREKTYWY KONFIGURACJI ................................................................................................................. 382
DYREKTYWYKONFIGURACJI POCZTY.................................................................................................................. 385
DYREKTYWYKONFIGURACJI TRYBU BEZPIECZNEGO ........................................................................................... 385
DYREKTYWYKONFIGURACJI DEBUGGERA........................................................................................................... 385
DYREKTYWYŁADOWANIA ROZSZERZEŃ.............................................................................................................. 385
DYREKTYWYKONFIGURACJI MYSQL................................................................................................................. 386
DYREKTYWYKONFIGURACJI MSQL.................................................................................................................... 386
DYREKTYWYKONFIGURACJI POSTGRESQL ........................................................................................................ 386
DYREKTYWYKONFIGURACJI SYBASE.................................................................................................................. 387
DYREKTYWYKONFIGURACJI SYBASE-CT ........................................................................................................... 387
DYREKTYWYKONFIGURACJI INFORMIX............................................................................................................... 388
DYREKTYWYKONFIGURACJI BC MATH .............................................................................................................. 389
Spis Treści 6
DYREKTYWYKONFIGURACJI MOŻLIWOŚCI PRZEGLĄDAREK ................................................................................ 389
DYREKTYWYKONFIGURACJI ZUNIFIKOWANEGO ODBC ..................................................................................... 389
DODATEK E. ZASOBY SIECI.......................................................................................................................... 390
Wstęp
Książka ta jest przeznaczona dla programistów tworzących aplikacje WWW za pomocą PHP. Należy
zwrócić uwagę, że zostało użyte określenie aplikacje WWW a nie strony WWW lub witryny WWW. W
przeszłości w Sieci znajdowały się w większości proste strony HTML o ograniczonej możliwości interakcji.
Dzisiejszy obraz Sieci jest o wiele bardziej skomplikowany. Użytkownicy i firmy oczekują od Sieci coraz więcej.
Powoduje to powstanie coraz większej ilości dynamicznych aplikacji WWW. PHP jest idealny do tworzenia
takich aplikacji, ponieważ został zaprojektowany właśnie do realizacji tego zadania.
Dla kogo jest przeznaczona ta książka
Książka ta powinna być użyteczna dla szerokiego grona programistów WWW, ale pisana była z myślą o
średnio zaawansowanych lub zaawansowanych programistach. PHP jest językiem programowania a nie językiem
opisu strony, więc przydatne będzie doświadczenie w programowaniu. Programiści znający C lub Perla powinni
uznać PHP za język bardzo przyjazny, natomiast programiści pracujący w ASP Microsoftu (Active Server Pages)
uznają PHP za język o podobnej strukturze.
Ponieważ książka ta nie jest kierowana do początkujących programistów, podstawowe pojęcia dotyczące
programowania zostaną przedstawione bardzo skrótowo. Zakłada się, że Czytelnik zna takie pojęcia
programowania, jak funkcje, zmienne i stałe.
Konwencje
W książce przyjęto następujące konwencje:
Kod programu i jego wyniki zaznaczone są czcionką o stałej szerokości.
Nazwy plików i katalogów zaznaczone są czcionką pochyłą.
Komendy i elementy języka zaznaczone są czcionką o stałej szerokości.
Omówienie książki
Książka zawiera zwięzłe wprowadzenie do PHP, oraz opis języka. Został w niej również przedstawiony
sposób instalacji i konfiguracji PHP.
Druga część, „Specjalne wymagania przy programowaniu WWW”, przeznaczona jest dla programistów
tradycyjnych aplikacji rozpoczynających pracę przy aplikacjach WWW. W części tej przedstawione zostały takie
zagadnienia jak: przetwarzanie formularzy, interakcję z użytkownikiem, utrzymywanie stanu oraz niezależność
od przeglądarki.
Następna część, „Zarządzanie projektem aplikacji WWW” opisuje zalety modularności i powtórnego
użycia kodu.
Część „Przykłady zastosowań” pokazuje użycie PHP na podstawie fragmentów działających już aplikacji.
Część ta łączy zagadnienia przedstawione w poprzednich częściach i pokazuje przykłady pełnej wymiany
informacji pomiędzy przeglądarką użytkownika i aplikacją zainstalowaną na serwerze WWW.
Na końcu książki znajduje się skorowidz zawierający wszystkie funkcje PHP4.
Wstęp 8
Od autora
Od około trzech lat tworzę aplikacje WWW przy użyciu PHP i ASP, jako niezależny przedsiębiorca.
Fundamentem mojego sukcesu było użycie PHP, ponieważ pozwala on na szybkie budowanie pro totypów, oraz
jest wystarczająco wydajny i pewny nawet do tworzenia dużych aplikacji WWW.
Celem tej książki jest przekazanie innym programistów użytecznych informacji. Nie będę opisywał różnic
pomiędzy PHP i innymi tego typu narzędziami i nie będę zajmował się historią PHP. Wszystkie te informacje
można znaleźć na oficjalnej witrynie PHP, www.php.net. Zamiast tego pokażę zastosowanie PHP do stworzenia
aplikacji WWW. Omówię również inżynierię programowania w projektach WWW, sposoby przeniesienia
istniejącego kodu do nowych projektów WWW. Przedstawię również kilka przydatnych narzędzi napisanych dla
PHP.
Przykłady kodu
Zamieszczone przykłady kodu były tworzone i testowane pzy użyciu PHP 4.0.1 (poprawka 2) na Apache
1.3.11 działającym w systemie RedHat 6.1. Do edycji plików HTML i PHP wykorzystuję edytor Allaire Homeite
4.5.1 zainstalowany na Windows NT.
Do testowania małych fragmentów kodu stosowałem następujący szablon HTML do którego wklejałem
odpowiedni kod PHP:
Nazwa przykładuWiększe fragmenty kodu były tworzone od razu razem z kodem HTML.
Czym jest PHP
PHP to język programowania przeznaczony dla programistów WWW pozwalający na szybkie tworzenie
dynamicznych aplikacji WWW. Oficjalnym rozwinięciem skrótu PHP jest „PHP: Hypertext Preprocessor”
(preprocesor hipertekstu). Jest to język programowania osadzany w HTML składniowo podobny do C, Perla i
Javy. Na wydruku 1. przedstawiony jest przykład kodu PHP.
Wydruk 1. Prosty przykład kodu PHPProsty przykład kodu PHPPo uruchomieniu tego przykładu (poprzez odpowiednio skonfigurowany serwer WWW) generowany jest
kod HTML zamieszczony na wydruku 2.
Wydruk 2. Wynik działania wydruku 1Prosty przykład kodu PHPWitajcie w PHP! Preprocesor PHP wykonuje cały kod zawarty pomiędzy znacznikami umieszczonymi w kodzie
HTML i zwraca wynik w postaci tekstu. Nie jest to szczególnie interesujący, ale pokazuje jak łatwo można
umieszczać kod PHP w kodzie HTML. Należy pamiętać, że kod ten jest wykonywany na serwerze WWW a nie
na kliencie. Oznacza to, że przeglądarka nie wie, że do stworzenia strony był używany PHP. Otrzymuje ona po
prostu strumień kodu HTML, identycznie jak w przypadku zwykłych stron. Więcej na ten temat znajduje się w
PHP – Kompendium wiedzy9
części „Specjalne wymagania przy programowaniu WWW”.
Dlaczego powinieneś użyć PHP
PHP jest pełnowartościowym językiem programowania pozwalający na tworzenie aplikacji WWW z
wszystkimi potrzebnymi funkcjami. PHP współpracuje z wieloma systemami baz danych. Pozwala to na bardzo
łatwe tworzenie aplikacji WW korzystających z informacji zapisanych w bazie danych. Możliwy jest również
dostęp do usług sieciowych takich jak IMAP, POP3, NNTP i TTP. Pozwala on również na otwieranie gniazd
sieciowych i podłączanie się do innych protokołów TCP/IP.
PHP może być użyty we wielu konfiguracjach serwerów. Ponieważ PHP jest rozprowadzany głównie w
postaci kodu źródłowego, może być skompilowany na wielu różnych platformach, na przykład na Linuksie,
FreeBSD i nawet na Windows. Dostępne są również binarne dystrybucje dla Win32.
PHP może działać jako program CGI lub może być zainstalowany jako moduł Apache lub rozszerzenie
ISAPI. Dzięki temu może on działać z praktycznie każdym serwerem WWW, od Apache na Linuksie do IIS na
Windows NT. W celu utworzenia najbardziej elastycznego środowiska pracy należy samodzielnie skompilować i
zainstalować PHP. Jeżeli wolisz szybko zacząć pracę, możesz zastosować binarną dystrybucję PHP.
Gdzie szukać pomocy
Pomoc można uzyskać na witrynie PHP oraz poprzez kilka grup dyskusyjnych i wysyłkowych. W lutym
2000 roku około 1400000 domen korzystało z PHP. Ponieważ jest on tak popularny, istnieje ogromna grupa
programistów i konsultantów, którzy mogą odpowiedzieć na pytania. Więcej informacji na temat dostępnych
zasobów Sieci znajduje się w części „Zasoby” na końcu książki.
Wstęp 10
Podziękowania
Na początku chciałbym podziękować wszystkim z wydawnictwa McGraw-Hill za umożliwienie mi
zrealizowania tego zadania. Szczególne podziękowania należą się Rebece Young za wsparcie i pomoc w
technicznych aspektach pisania książki. Dziękuję Johnowi Steele, mojemu redaktorowi technicznemu, który
niezmiernie pomógł mi swoimi trafnymi uwagami i informacjami.
Oczywiście, należy podziękować całemu zespołowi tworzącemu PHP. Wiele osób z tego zespołu
pomagało mi w pracy nad książką. Cała część zawierająca skorowidz funkcji jest ich zasługą. To oni spędzili
setki lub tysiące godzin tworząc ten wspaniały język programowania i bogatą dokumentację.
Dziękuję Mattowi Wilson za umożliwienie mi wykorzystania w przykładzie do książki kodu MWeather.
Dziękuję Nickowi Bradbury za pozwolenie wykorzystania informacji i rysunków z edytora TopStyle.
Podziękowania dla Nate Weiss za pomoc przy użyciu deserializera WDDX dla JavaScript, dla Johna Kos za
pomoc przy unixODBC i EasySoft ODBC-ODBC Bridge. Dla Martina Evans, głównego programisty ODBC-
ODBC Bridge, za stworzenie tego świetnego produktu. Dziękuję Michaelowi Justin za pomoc przy konwerterze
RTF do HTML firmy Scrooge. Dziękuję również Michaelowi C. Battilana za pomoc przy Cloanto Currency
Server. Dla Sama Ockman za umożliwienie wykorzystania w książce rysunku serwera Penguin 1U. Dziękuję
Richardowi Litofski za pomoc przy BrowserHawk. Podziękowania dla Ali Ersheid za umożliwienie
wykorzystania w książce dokumentacji CyberCash. Dziękuję Josephowi Harris (znany jako CDI) za klasę
FastTemplate oraz inne fantastyczne narzędzia dostępne na witrynie The Webmasters.net.
Dziękuję rodzicom i braciom za nieustanne wsparcie nawet, gdy w latach osiemdziesiątych spędzałem
całe noce na pisaniu programów w Apple Basicu. Dziękuję pani Barton, pani Smith i panu Wakefield, moim
nauczycielom angielskiego z liceum, którzy mieli ogromny wpływ na moje pisanie. Dziękuję Garemu Rogers i
Jasonowi Wallin za wskazanie mi PHP i Linuksa w czasie gdy coraz bardziej pogrążałem się wykorzystując ASP
i Windows. Dziękuję Tracy Ard za pożyteczne komentarze do tej pracy oraz za jego niezmienną przyjaźń.
Na koniec najważniejsze podziękowania należą się mojej żonie i córce za umożliwienie mi zakończenia tej
pracy. Teraz znów możemy wieczorami chodzić skakać na trampolinie.
O autorze
Blake Schwendiman rozpoczął programowanie w 1980 roku rozpoczynając od Apple IIe i języka Basic.
Zdobył licencjat na uniwersytecie Arizona State University w roku 1994. W chwili obecnej Blake zarządza firmą
Intechra LLC, http://www.intechra.net/, firmą konsultingową specjalizującą się w oprogramowaniu, która ma
siedzibę w Rexburg, Idaho. Intechra LLC specjalizuje się w tworzeniu oprogramowania dla WWW. Blake ma
żonę Holy i trzyletnią córkę. Można się z nim skontaktować pod adresem blake@intechra.net.
Rozdział 1. Kompilacja i instalowanie
PHP
Wstęp
Zanim rozpoczniemy naukę języka PHP, należy go poprawnie zainstalować i skonfigurować w używanym
środowisku interpreter PHP. Ponieważ pakiet PHP może działać na wielu serwerach WWW i systemach
operacyjnych, w rozdziale tym znajdą się szczegółowe opisy instalacji na jedynie kilku platformach, ale podane
informacje są wystarczająco uniwersalne i mogą być wykorzystane przy konfigurowaniu środowiska pracy na
innych platformach.
W rozdziale tym opisane zostaną szczegółowo Apache dla Linuksa oraz IIS dla Windows NT. Są to często
spotykane konfiguracje serwerów WWW i są one na tyle różne, że ilustrują ogólne zasady instalacji pakietu PHP
na większości platform. Szczegółowe dane na temat określonej platformy można również znaleźć na witrynie
www.php.net.
Pobieranie PHP
Pierwszym krokiem do rozpoczęcia pracy z PHP jest zaopatrzenie się w kopię interpretera PHP. Na
witrynie www.php.net umieszczone jest kilka wariantów tego pakietu. Najnowsza wersja zawsze znajduje się na
górze listy. W przypadku serwerów uniksowych zaleca się pobranie pakietu zawierającego kompletny kod
źródłowy i przeprowadzenie samodzielnej kompilacji. Platformy uniksowe to między innymi Linux, BSD, Solaris
itp. W przypadku Windows zaleca się pobranie binarnej instalacji PHP.
Ze strony zawierającej pakiety instalacyjne można również pobrać poprzednie wersje programów,
dokumentację i narzędzia pomocnicze. Poprzednie wersje mogą być potrzebne, jeżeli masz już gdzieś
zainstalowane PHP i nie chcesz ryzykować niekompatybilności.
Instalowanie wersji binarnej
Po pobraniu binarnej dystrybucji PHP, instalacja jest banalna. Najczęściej binarna instalacja PHP jest
przeznaczona dla Windows. Ponieważ jednak niektóre dystrybucje Uniksa zawierają binarną dystrybucję PHP,
opisany zostanie również taki przypadek.
Binarna instalacja dla Windows
W PHP prawie wszystkie operacje można wykonać na kilka sposobów. Instalacja binarna dla Windows
zawiera zarówno wersję CGI (Common Gateway Interface) PHP, jak również wersję ISAPI. Jeżeli korzystasz z
serwera IIS (Internet Information Server) lub PWS (Personal Web Server) zalecane jest użycie modułu ISAPI.
Wersja CGI powoduje, że PHP jest uruchamiany za każdym odwołaniem do strony, więc jest mniej efektywny od
dynamicznego modułu jakim jest rozszerzenie ISAPI. Moduł ISAPI jest również ze swojej natury bezpieczniejszy
od programu CGI.
Rozdział 1 – Kompilacja i instalowanie PHP 12
Instalowanie PHP w postaci modułu ISAPI
Jeżeli korzystasz z serwera IIS, PWS lub innego serwera WWW obsługującego moduły ISAPI,
najlepszym rozwiązaniem będzie użycie PHP w postaci modułu ISAPI. Aby zainstalować taką wersję, należy
skopiować pliki php4ts.dll i msvcrt.dll do katalogu systemowego Windows (zwykle \windows\system w Windows
95 lub \winnt\system32 w Windows NT). Są to współdzielone biblioteki niezbędne do prawidłowej pracy każdej
wersji PHP dla Windows. Dodatkowo można skopiować do katalogu systemowego inne pliki .dll, ale nie jest to
konieczne do ich użycia.
Następnie należy tak skonfigurować IIS lub PWS, aby korzystał z modułu ISAPI do obsługi plików php.
Serwer IIS można konfigurować za pomocą konsoli konfiguracji zainstalowanej w menu Option Pack. Na
rysunku 1.1. znajduje jest rozwinięte menu pokazujące położenie tego programu w Windows NT.
Rysunek 1.1.
Uruchamianie
aplikacji
konfigurującej IIS
Po uruchomieniu konsoli Menedżer usług internetowych należy kliknąć prawym przyciskiem myszy na
węźle serwera WWW (prawdopodobnie zatytułowany Domyślna witryna sieci Web) i wybrać Właściwości, tak
jak jest to pokazane na rysunku 1.2. Następnie w oknie Właściwości należy przejść na zakładkę Katalog
macierzysty i kliknąć przycisk Konfiguracja. Opcja ta pozwala na dodawanie i edycję skojarzeń.
Rysunek 1.2.
Konfigurowanie IIS
Teraz należy kliknąć przycisk Dodaj i wprowadzić potrzebne informacje. Na rysunku 1.3. pokazany jest
proces dodawania mapowania rozszerzenia phtml do modułu ISAPI PHP.
PHP – Kompendium wiedzy13
Rysunek 1.3.
Dodawanie
mapowania dla
rozszerzenia w IIS
Po dodaniu mapowania zmiany są od razu widoczne w oknie dialogowym Konfiguracja aplikacji.
Czasami może być pożyteczne skojarzenie niektórych rozszerzeń z modułem ISAPI a niektórych z programem
CGI. Na rysunku 1.4. pokazana jest konfiguracja mojego serwera WWW. Na rysunku widać mapowania dla
PHP3, dla PHP4 jako CGI oraz PHP4 jako ISAPI. Jest to przydatne przy testowaniu różnic pomiędzy wersjami 3
i 4 PHP.
Rysunek 1.4.
Mapowanie
rozszerzeń PHP
Po zakończeniu konfiguracji należy ponownie uruchomić serwer WWW. Można to zrobić przy użyciu
modułu Usługi w Panelu sterowania, lub uruchamiając z linii poleceń następujące polecenia:
net stop iisadmin
net start w3svc
Po uruchomieniu serwera należy go przetestować tworząc prosty plik testowy, na przykład taki, jak
pokazany na wydruku 1.1. i otwierając go poprzez twój serwer. Jeżeli wszystko jest skonfigurowane poprawnie,
powinieneś zobaczyć ekran z informacjami na temat instalacji PHP.
Wydruk 1.1. Testowy skrypt PHP
phpinfo()
Rozdział 1 – Kompilacja i instalowanie PHP 14
Trzeba pamiętać, że w pakiecie instalacyjnym PHP znajduje się uwaga na temat stanu modułu ISAPI która
ostrzega, że nie powinien być stosowany w środowisku produkcyjnym. Sugeruje się, że w celu zapewnienia
odpowiedniej stabilności powinna być użyta wersja CGI. Następna część rozdziału opisuje użycie PHP jako CGI.
Użycie PHP jako CGI
Jeżeli nie masz zainstalowanego serwera WWW obsługującego moduły ISAPI lub istnieją inne powody
wyboru wersji CGI, należy przeprowadzić instalację PHP jako CGI. Instalacja jest bardzo podobna do tej
przedstawionej powyżej, różnice występują jedynie przy mapowaniu rozszerzeń. Zamiast wybierać bibliotekę .dll
ISAPI, należy wybrać plik php.exe. Serwer IIS lub PWS wysyła parametry do pliku wykonywalnego CGI, więc
oprócz nazwy pliku wykonywalnego należy podać opcje linii poleceń %s %s. Jest to pokazane na rysunku 1.4. dla
rozszerzenia .php4.
Różne serwery WWW mają różne metody określenia mapowania rozszerzeń. Do Apache dla Windows
istnieje świetny podręcznik dostępny pod adresem www.php.net/manual/config-apache-nt.html. Zasoby sieci na
temat instalacji PHP na różnych serwerach WWW dla Windows można odszukać za pomocą wyszukiwarki
umieszczonej na witrynie www.php.net.
Inne instalacje binarne
Niektóre instalacje Uniksa posiadają instalację binarną PHP zintegrowaną z instalacją serwera WWW.
Niektórzy dostawcy, na przykład Red Hat, udostępniają również binarną instalację na swoich witrynach.
Instalacja taka jest wykonana w formie plików RPM (Red Hat Package Manager). Zaletą użycia plików RPM jest
łatwość instalacji. Nie trzeba martwić się szczegółami procesu kompilacji, ponieważ plik RPM zawiera gotową do
użycia odpowiednio skompilowaną wersję programu. Wadą jest to, że z powodu wielu możliwych wariantów
platform dla Uniksa, problemem dla początkujących może być nawet wybór właściwego pliku. Poza tym w pliku
RPM nie zawsze są ustawione wszystkie potrzebne opcje konfiguracji, niezbędne do prawidłowego działania
programu.
Jeżeli masz plik RPM z PHP, możesz go zainstalować wydając polecenie rpm -i .
Powoduje to zainstalowanie plików binarnych do katalogów określonych przez twórcę pliku RPM. Dla
większości użytkowników katalogi te są prawidłowe. Po instalacji należy ręcznie skonfigurować serwer WWW
tak, aby korzystał z zainstalowanych właśnie plików binarnych PHP. Poniżej przedstawimy sposób konfiguracji
Apache. Inne serwery WWW wymagają przeprowadzenia podobnych czynności.
Niezależnie od tego, czy PHP będzie działało jako program CGI czy w postaci modułu, pierwszy krok
konfiguracji jest zawsze taki sam. Trzeba utworzyć skojarzenie pomiędzy rozszerzeniem pliku a wewnętrznym
typem stosowanym przez serwer. Robi się to dodając do pliku konfiguracyjnego następujące linie:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .inc
Dyrektywy te powodują, że Apache uważa wszystkie pliki z rozszerzeniami .php, .phtml i .inc jako pliki
typu application/x-httpd-php. Do przetwarzania tego typu plików wykorzystywane jest PHP.
Zakładając, że masz zainstalowane PHP w postaci modułu Apache, kolejnym krokiem będzie modyfikacja
pliku konfiguracyjnego httpd.conf tak, aby Apache załadował moduł PHP:
LoadModule php4_module libexec/libphp4.so
Jeżeli zainstalowana została wersja CGI, należy wprowadzić nieco inne zmiany do pliku konfiguracji
httpd.conf. Dyrektywa konfiguracji jest podobna do poprzedniej, ale odwołuje się do programu w postaci pliku
wykonywalnego.:
Action application/x-httpd-php /cgi-bin/php
Dyrektywa Action definiuje typ pliku powodujący uruchomienie PHP po otrzymaniu żądania ściągnięcia
strony z serwera WWW. Oczywiście należy podać właściwą ścieżkę do pliku wykonywalnego.
Po wprowadzeniu zmian należy ponownie uruchomić serwer WWW, aby zaczęły działać nowe
ustawienia. Serwer Apache można zrestartować za pomocą polecenia:
/ścieżka/do/apachectl restart
Aby przetestować konfigurację można wczytać za pomocą przeglądarki skrypt testowy, przedstawiony na
wydruku 1.1.
Binarna dystrybucja PHP ułatwia szybkie rozpoczęcie pracy z PHP w Uniksach, ale może ona sprawiać
problemy. Z powodu istnienia wielu wariantów Uniksów, znalezienie gotowej wersji działającej na określonym
PHP – Kompendium wiedzy15
systemie może być czasami trudne. W wielu przypadkach będzie to bardziej czasochłonne niż ściągnięcie kodu
źródłowego, skompilowanie i zainstalowanie PHP. Proces ten zostanie opisany w kolejnej części rozdziału.
Kompilowanie PHP
Jeżeli chcesz skorzystać z elastyczności własnej instalacji PHP lub jeżeli przewidujesz dodawanie
własnych rozszerzeń do języka PHP (opisane w rozdziale 11. „Ponowne wykorzystanie kodu”), musisz dokładnie
poznać proces kompilowania PHP. Jeżeli pracujesz na platformie, dla której nie ma instalacji binarnej, możesz nie
mieć innego wyboru jak tylko samodzielnie kompilować PHP.
Kompilowanie PHP w Uniksach
W tej części rozdziału przedstawione zostaną informacje na temat kompilowania PHP na platformie Unix.
Należy pamiętać, że Unix określa całą rodzinę systemów, np.: Linux, BSD, Solaris i inne. Oczywiście systemy te
różnią się między sobą, ale wiele z kroków niezbędnych do kompilacji PHP jest identycznych. Więcej informacji
na temat określonej platformy można odszukać za pomocą wyszukiwarki dostępnej na witrynie www.php.net.
Dla każdej platformy istnieje kilka sposobów kompilacji PHP. Jeżeli serwerem WWW jest Apache, można
skompilować PHP jako plik wykonywalny, jako moduł ładowany dynamicznie lub jako statyczną bibliotekę.
Jeżeli nie korzystasz z Apache, należy odszukać w dokumentacji PHP i serwera WWW szczegóły postępowania.
Przy okazji możemy zarekomendować korzystanie z PHP w postaci dynamicznie ładowanego modułu, jako
najlepsze rozwiązanie dla większości aplikacji. Jeżeli PHP zostanie statycznie dołączony do Apache, każda
zmiana konfiguracji wymaga większego nakładu pracy. W przypadku modułu CGI, występują problemy z
bezpieczeństwem.
W kolejnych częściach zakładamy, że ściągnąłeś już źródła PHP i rozpakowałeś je. Proces kompilacji jest
właściwie taki sam dla każdego typu pliku wynikowego. Na początku trzeba uruchomić skrypt configure, który
ustawia opcje kompilacji. Następnie przy pomocy narzędzia make przeprowadza się kompilację. Na koniec trzeba
zainstalować gotowe PHP i zrestartować serwer WWW. Informacje na temat skryptu konfiguracyjnego są
przedstawione w części poświęconej kompilowaniu modułu CGI, więc zaleca się przeczytanie tego fragmentu
jako wprowadzenia.
Kompilacja modułu CGI
Kompilacja PHP do postaci wykonywalnego modułu CGI jest najprostszą metodą kompilacji i dobrym
rozwiązaniem, jeżeli nigdy wcześniej nie kompilowałeś programów dla Uniksa. Poniżej przedstawiona jest
kompletna lista operacji jakie należy wykonać. Niektóre z nich nie są obowiązkowe. Operacje opcjonalne są
zaznaczone czcionką pochyłą. Odwołanie do powinno być zamienione na nazwę twojego katalogu
bazowego PHP.
cd rm config.cache
make clean
./configure
make
make install
Wykonanie tych operacji spowoduje usunięcie podręcznych danych konfiguracji, usunięcie plików
wynikowych a następnie skompilowanie PHP do postaci CGI. Jest to najprostsza metoda kompilacji, przytoczona
jedynie jako przykład. W prawdziwej kompilacji do skryptu konfiguracyjnego dołącza się opcje określające
atrybuty PHP.
Druga i trzecia linia jest nieobowiązkowa, ponieważ polecenia w nich umieszczone są używane jedynie do
wyczyszczenia poprzedniej konfiguracji i pozostałości po poprzedniej kompilacji. Jeżeli wcześniej nie
konfigurowałeś ani nie kompilowałeś PHP, nie są one potrzebne. Można również nie korzystać z tych opcji przy
kompilacji PHP, choć czasami ich wykonanie jest niezbędne. Jeżeli wprowadzane są poważne zmiany w
konfiguracji lub zmieniasz typ kompilacji z CGI na inny, może okazać się, że wykonanie czyszczenia jest
niezbędne, aby kompilacja przebiegła prawidłowo. W zależności od szybkości komputera, na którym
wykonywana jest kompilacja, przeprowadzenie całej konfiguracji i kompilacji może zająć dosyć dużo czasu.
Rozdział 1 – Kompilacja i instalowanie PHP 16
Pozostawienie zapisanych opcji konfiguracji oraz obiektów binarnych spowoduje znaczne skrócenie czasu
tworzenia PHP.
Wszyscy, którzy nigdy nie przeprowadzali takiego procesu powinni wiedzieć, że skrypt konfiguracyjny
poszukuje w systemie narzędzi, plików i innych danych systemowych. Następnie na podstawie tych danych
tworzy specyficzny dla systemu skrypt za pomocą można skompilować kod. Jeżeli w czasie działania skryptu
konfiguracyjnego nastąpi awaria, często zdarza się, że wymagany plik lub narzędzie nie jest odnajdywane lub
niewłaściwie skonfigurowane. Po zakończeniu działania skryptu konfiguracyjnego tworzony jest plik
tymczasowy config.cache zawierający szczegóły na temat systemu, więc badanie systemu nie musi być
powtarzane przy ponownym uruchomieniu konfiguracji. Jeżeli wprowadzisz duże zmiany do konfiguracji
systemu, musisz usunąć plik tymczasowy przed kolejnym uruchomieniem skryptu konfiguracyjnego. W ten
sposób upewniamy się, że zmiany te zostaną wykryte.
Po wykonaniu wszystkich podanych poleceń zostanie utworzony nowy plik wykonywalny — php. Można
przetestować poprawność kompilacji za pomocą następującego polecenia:
php < /dev/null
Jeżeli zobaczysz wynik podobny do poniżej przedstawionego, udało ci się poprawnie skompilować i
zainstalować PHP w postaci CGI.
X-Powered-By: PHP/4.0.2
Content-type: text/html
Trzeba zauważyć, że skompilowana właśnie wersja PHP nie posiada funkcji, które być może będziemy
chcieli wykorzystywać w aplikacjach, ponieważ została skompilowana z użyciem tylko ustawień domyślnych.
Trzeba ponownie uruchomić skrypt konfiguracyjny, ustawić opcje potrzebne w aplikacji a następnie ponownie
skompilować i zainstalować PHP.
Pożyteczną cechą zestawu domyślnych ustawień jest to, że dołączone jest do niego wiele często
używanych opcji konfiguracji, w tym obsługa bazy danych MySQL, sesji i wiele, wiele innych. Oznacza to, że
przytoczone polecenia umożliwiają skompilowanie PHP, który pozwala na rozpoczęcie nauki języka.
Jeżeli potrzebujesz obsługi innej bazy danych lub innego rozszerzenia, trzeba dodać odpowiednią opcję
konfiguracji. Lista dostępnych opcji jest wyświetlana po wpisaniu:
./configure --help
Większość opcji konfiguracji wpływających na dostępne funkcje PHP ma postać --enable-FUNKCJA lub --
with-PAKIET. Aby dodać funkcję do PHP należy użyć jednej z poniższych form:
--enable-FUNKCJA
--enable-FUNKCJA=yes
Aby usunąć funkcję z PHP, należy użyć:
--disable-FUNKCJA
--enable-FUNKCJA=no
Pełna lista opcji konfiguracji znajduje się w skorowidzu na końcu książki. Funkcje korzystające ze składni
--enable są to zwykle wbudowane opcje PHP, takie jak możliwość wykorzystywania krótkich znaczników lub
obsługa protokołu FTP. Pakiety są to zwykle moduły zewnętrzne, które mogą być dołączone do PHP, na przykład
obsługa bazy danych Oracle lub Javy. Te własności wymagają zwykle wskazania zewnętrznego pliku i do jego
włączania korzysta się z następującego zapisu:
--with-PAKIET=/ścieżka/do/pakietu
Aby wyłączyć pakiet należy użyć poleceń:
--with-PAKIET=no
--without-PAKIET
Jako przykład przedstawimy następującą konfigurację:
./configure --with-apxs=/www/bin/apxs --with-java --with-cybercash=/home/blake/mck-3.2.0.6-i586-pc-linux-
gnulibc2.1 --withunixODBC=/usr/local/unixODBC --disable-debug --enabletrack-vars -- enable-fin-funcs --with-
snmp=/home/blake/ucd-snmp-4.1.2 --enable-ucd-snmp-hack
Powyższe wywołanie konfiguracji powoduje dodanie do PHP obsługi Javy, CyberCash, SNMP (Simple
Network Management Protocol) oraz unixODBC. Nie zostało podane położenie katalogu Javy, więc skrypt
konfiguracyjny użyje domyślnej ścieżki do katalogu z tym pakietem. Dodatkowo została dodana opcja -with-
apxs, która powoduje, że PHP jest kompilowane do postaci dynamicznie ładowanego modułu Apache a nie jako
program typu CGI. Później omówimy to zagadnienie dokładniej. W przedstawianej konfiguracji wyłączono
informacje dla debuggera oraz włączono opcje track-vars, fin-funcs oraz ucd-snmp-hack. Opcja fin-funcs
powoduje dodanie własnego modułu rozszerzeń opisanego w dalszej części książki (rozdział 11.), natomiast
pozostałe są standardowymi elementami konfiguracji opisanymi w skorowidzu na końcu książki.
PHP – Kompendium wiedzy17
Wiele z pakietów oprogramowania jakie chcemy dodać do PHP musi być osobno zainstalowane. Więcej
informacji na temat tego, gdzie można zaopatrzyć się w potrzebne pakiety, można znaleźć w dokumentacji na
witrynie www.php.net.
Po utworzeniu PHP w postaci CGI, należy skonfigurować serwer WWW do współpracy z nowym
programem. Aby skonfigurować serwer Apache należy dodać następujące dyrektywy do pliku httpd.conf:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .inc
Action application/x-httpd-php /cgi-bin/php
Pierwsze trzy dyrektywy definiują zawartość plików z rozszerzeniami php, phtml i inc jako typ
application/x-httpd-php. Ostatnia dyrektywa powoduje wysłanie wszystkich plików tego typu do pliku
wykonywalnego php. Zakładamy, że plik ten jest umieszczony w katalogu cgi-bin serwera WWW.
Dyrektywy te są minimum wymaganym do konfiguracji PHP w Apache, ale ta sama czynność może być
zrealizowana jeszcze na kilka sposobów. Więcej szczegółów można znaleźć w dokumentacji do Apache.
Kompilacja PHP jako statycznie dołączanego modułu Apache
Apache pozwala na statyczne dołączanie modułów bezpośrednio do pliku binarnego Apache. W
porównaniu z wersją CGI użycie modułu pozwala poprawić wydajność aplikacji oraz zwiększyć bezpieczeństwo
systemu,. Wadą tej metody jest konieczność powtórnej kompilacji Apache po każdej kompilacji PHP. Może być
to czasochłonne i frustrujące, ponieważ w przypadku wystąpienia kłopotów z konfiguracją PHP, Apache może
również przestać działać. Jednak niektóre aplikacje wymagają zastosowania statycznie dołączanego modułu
Apache, opiszemy teraz sposób jego tworzenia.
Przed skonfigurowaniem i skompilowaniem PHP niezbędne jest skonfigurowanie Apache. Zakładamy, że
na dysku jest już katalog z kodem źródłowym Apache. Aby skonfigurować Apache, należy użyć następujących
poleceń:
cd ./configure
Po zakończeniu działania tego skryptu można zająć się konfigurowaniem i kompilowaniem PHP.
cd ./configure --with-apache=make
make install
Opcja --with-apache powoduje kompilację do postaci statycznej biblioteki oraz pozwala podać katalog z
plikami źródłowymi Apache. Następnie należy skompilować serwer Apache za pomocą poleceń:
cd ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
make
make install
Dyrektywa prefix może być inna w twoim systemie, ponieważ wskazuje ona katalog gdzie zostaną
zainstalowane pliki zależne od architektury. Teraz należy uruchomić serwer Apache i przy wykorzystaniu skryptu
testowego z wydruku 1.1. sprawdzić poprawność konfiguracji.
Aby Apache prawidłowo przetwarzał pliki PHP należy odpowiednio zmodyfikować plik httpd.conf. W
zależności od rozszerzeń jakie zostały wybrane do reprezentowania plików PHP, należy wprowadzić odpowiednie
zmiany. I tym razem standardowa konfiguracja wygląda następująco:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .inc
Przedstawiony opis przedstawia jedynie bardzo prostą wersję PHP, która zawiera jedynie opcje domyślne.
Więcej informacji o zmianie konfiguracji kompilacji PHP znajduje się w części na temat kompilacji wersji CGI.
Kompilacja PHP do postaci dynamicznie ładowanego modułu Apache
Sposób kompilacji PHP do postaci dynamicznie ładowanego modułu Apache nie różni się zbytnio od
innych przedstawionych do tej pory metod. Zaletą tej metody jest możliwość kompilacji PHP bez konieczności
równoczesnej kompilacji Apache. Również niektóre moduły rozszerzeń (na przykład Java) wymagają do
poprawnej pracy, aby PHP był skompilowany do postaci dynamicznie ładowanego modułu. Aby Apache
obsługiwał dynamicznie ładowane moduły należy go przekompilować z następującymi opcjami konfiguracji:
cd make clean
./configure --enable-module=so --enable-rule=SHARED_CORE --prefix=/www
make
Rozdział 1 – Kompilacja i instalowanie PHP 18
make install
Oprócz kompilacji Apache przedstawione polecenia przygotowują skrypt apxs, który jest niezbędny do
kompilacji dynamicznego modułu PHP. Jeżeli wystąpią kłopoty ze skryptem apxs można powtórnie wykonać
przedstawione polecenia, co spowoduje ponowne wygenerowanie prawidłowo skonfigurowanego skryptu. Po
skompilowaniu Apache z obsługą dynamicznie ładowanych modułów, należy skompilować PHP w następujący
sposób:
cd make clean
rm config.cache
./configure --with-apxs=/www/bin/apxs (pozostałe opcje)
make
make install
Polecenia porządkujące są zalecane, jeżeli PHP był już kompilowany w innej konfiguracji. Ścieżka podana
w dyrektywie konfiguracji --with-apxs powinna być pełną ścieżką do skryptu apxs na serwerze.
Tak jak w przypadku poprzednich sposobów kompilacji należy prawidłowo skonfigurować Apache, aby
przetwarzał pliki PHP. Po zmodyfikowaniu konfiguracji należy uruchomić Apache i wywołać skrypt testowy.
Podsumowanie kompilacji PHP w systemach Unix
Celem tego fragmentu książki nie było podawanie szczegółowego i wyczerpującego opisu wszystkich
możliwych opcji konfiguracji, ale pokazanie podstawowych metod kompilowania PHP do różnych postaci. Jeżeli
nie kompilowałeś wcześniej PHP, powinieneś na początku spróbować skompilować podstawową konfigurację, a
później uzupełniać potrzebne opcje. Po zapoznaniu się z procesem kompilacji jest już bardzo łatwo testować
różne konfiguracje i dodawać niestandardowe rozszerzenia.
Po skompilowaniu PHP i sprawdzeniu, czy działa z Apache, można zapoznać się z opcjami konfiguracji,
które można ustawiać bez potrzeby ponownej kompilacji. Zostały one opisane w dalszej części rozdziału.
Kompilowanie PHP w środowisku Windows
Kompilowanie PHP dla Windows jest na początku bardziej skomplikowanym procesem niż kompilacja
PHP dla Uniksa. Dokumentacja zaleca użycie Visual C++ wersja 6, choć wersja 5 również powinna działać.
Próbowałem sprawdzić, czy można użyć pakietu Borland C++ Builder, ale nie udało mi się tego zrobić. Problem
stanowiły prekompilowane pliki lib, ponieważ Microsoft i Borland korzystają z różnych formatów tych plików.
Prawdopodobnie można zastosować kompilator Borlanda, ale trzeba wcześniej przekompilować wszystkie
biblioteki. W poniższym opisie zakładamy użycie Visual C++.
Przed rozpoczęciem pracy należy się zaopatrzyć w kilka programów i plików pomocniczych. Tabela 1.1.
zawiera wszystkie dodatkowe programy oraz adresy w Internecie, gdzie były dostępne w czasie pisania książki.
Tabela 1.1. Dodatkowe pliki pomocnicze i ich adresy w Sieci
Program Położenie
Kod źródłowy PHP www.php.net/download.php
Pakiet Cygwin http://sources.redhat.con/cygwin/
Narzędzia do kompilacji PHP dla
Win32
www.php.net/extra/win32build.zip
Obsługa BCMath www.php.net/version4/downloads/num
ber.tar.gz
Zastępnik pliku resolv.lib www.php.net/version4/downloads/bind
lib_w32.zip
Pakiet Cygwin zawiera popularne narzędzia GNU, takie jak gcc, make i bison. Niektóre z tych programów
są wykorzystywane w procesie kompilacji, więc trzeba wcześniej zainstalować ten pakiet. Inne potrzebne pliki są
integralną częścią dystrybucji PHP. Kod źródłowy PHP jest identyczny jak ten, który jest używany do utworzenia
wersji dla Uniksa.
Potrzebny jest również program do rozpakowywania plików. Ja używam programu Winzip, ponieważ bez
problemu radzi sobie z plikami .tar.gz. Również inne programy posiadają takie możliwości. Na początku należy
zainstalować narzędzia Cygwin. Trzeba ręcznie dodać zmienną środowiska wskazując na położenie plików
Cygwin. Jeżeli pracujesz w Windows 95, trzeba dodać tą zmienną ręcznie do pliku autoexec.bat. W Windows NT
należy kliknąć prawym przyciskiem myszy ikonę Mój komputer i wybrać z menu Właściwości. Teraz trzeba
PHP – Kompendium wiedzy19
kliknąć zakładkę Środowisko i dodać nową zmienną, tak jak jest to pokazane na rysunku 1.5. Zmienna nazywa się
CYGWIN a jej wartością jest ścieżka do katalogu, gdzie zainstalowane są narzędzia Cygwin.
Rysunek 1.5.
Ustawienie
zmiennej
środowiskowej
CYGWIN
Następnie utwórz katalog i rozpakuj do niego zawartość pliku win32build.zip. Uruchom Visual C++ i
wybierz Options z menu Tools. Teraz wybierz zakładkę Directories (rysunek 1.6.) i przy użyciu listy rozwijalnej
opisanej Show directories for, wybierz opcję Executable files i dodaj katalog z plikami Cygwin. Teraz z listy
rozwijalnej wybierz Include files i dodaj katalog z win32build\include (rysunek 1.6.). Na koniec wybierz Library
files i dodaj katalog win32build\lib. Od tej pory kompilator Visual C++ będzie mógł korzystać z zainstalowanych
narzędzi i plików.
Rysunek 1.6.
Ustawienie
katalogów w Visual
C++
Kolejnym krokiem będzie skompilowanie nowej wersji pliku resolv.lib. Najpierw utwórz nowy katalog i
rozpakuj do niego pliki z archiwum bindlib_w32.zip. W Visual C++ otwórz projekt bindlib.dsp. Z menu Build
wybierz Set Active Project Configuration i wybierz wersję handlową biblioteki lub wersję do uruchamiania.
Naciśnij klawisz F7, aby skompilować projekt. Po zakończeniu kompilacji należy skopiować plik resolv.lib do
katalogu win32build\lib.
Następnie rozpakuj źródła PHP i plik number.tar.gz za pomocą zewnętrznego programu lub narzędzia tar
z pakietu Cygwin. Skopiuj rozpakowane pliki number.c i number.h do katalogu ext/bcmath w katalogu z kodem
źródłowym PHP.
Rozdział 1 – Kompilacja i instalowanie PHP 20
Jeżeli wykonałeś wszystkie opisane wcześniej czynności, jesteś gotowy do kompilacji PHP. Uruchom
Visual C++ i otwórz plik projektu php4ts.dsp, znajdujący się w podkatalogu win32 katalogu z kodem źródłowym
PHP. Projekt ten zawiera kilka konfiguracji. Najłatwiej jest rozpocząć od skompilowania wersji CGI wybierając
wersję handlową lub wersję z danymi dla debuggera, tak jak jest to pokazane na rysunku 1.7.
Rysunek 1.7.
Wybór konfiguracji
dla wersji CGI
Skompiluj projekt i jeżeli wszystko pójdzie dobrze posiadasz już własną wersję PHP. Jeżeli potrzebujesz
wersji PHP jako ISAPI lub NSAPI, wystarczy wybrać odpowiednią konfigurację dla kompilacji i ponownie
skompilować projekt. Jak wspomniałem wcześniej, najtrudniejszą częścią było wstępne przygotowanie
środowiska. Gdy wszystko jest już gotowe, cała reszta jest tak samo prosta jak w Uniksie.
Podsumowanie kompilacji PHP
Kompilowanie wersji PHP dla Windows jest za pierwszym razem dużo trudniejsze od wersji dla Uniksa,
ale gdy wszystkie potrzebne dodatki zostaną odpowiednio skonfigurowane, jest już proste. Gdy poznałeś już
proces kompilowania PHP dla obu platform możesz tworzyć wysoce specjalizowane wersje PHP, spełniających
precyzyjnie potrzeby konkretnej witryny. Dokładna wiedza na temat procesu kompilacji PHP jest również
niezbędna, aby móc tworzyć rozszerzenia PHP. Zagadnienie to zostało opisane w rozdziale 11.
Konfigurowanie PHP
Niezależnie od platformy na której działa PHP, sposób jego konfigurowania jest taki sam. Wykorzystuje
się w tym celu plik php.ini. Plik ten jest dostarczany w dystrybucji PHP jako php.ini-dist i php.ini-optimized.
Jeżeli nie znasz dobrze opcji konfiguracji, powinieneś rozpocząć do podstawowych ustawień z pliku php.ini-dist.
Pierwszym krokiem będzie skopiowanie i zmiana nazwy pliku. Plik powinien być nazwany php.ini i skopiowany
do katalogu zależnego od używanej platformy. W tabeli 1.2. zamieszczone są podstawowe warianty.
Tabela 1.2. Platformy PHP i położenie pliku php.ini
Platforma Położenie pliku php.ini
Windows Katalog zwykle \windows w Windows 95 i \winnt w
Windows NT
Unix Można to sprawdzić za pomocą funkcji phpinfo(), ale zwykle jest
to /usr/local/lib.
Po umieszczeniu pliku konfiguracyjnego w odpowiednim katalogu, należy do niego wprowadzić
odpowiednie zmiany. Plik php.ini jest podzielony na sekcje, rozpoczynające się od linii [nazwa_sekcji] podobnie,
jak w standardowych plikach ini systemu Windows. Plik ten zawiera obszerne komentarze opisujące
przeznaczenie sekcji i opcji konfiguracji. W pozostałej części książki czasami będą przytaczane opcje niezbędne
do uruchomienia przykładów. Zwykle przykład taki zawiera nazwę sekcji, nazwę opcji oraz wartość. Aby
wprowadzić zmiany najczęściej zmienia się plik php.ini i ponownie uruchamia Apache, ale istnieją również inne
mechanizmy zmiany opcji. Mechanizmy te opisane zostaną w późniejszej części rozdziału.
Korzystanie z pliku php.ini
Zalecaną metodą zmiany konfiguracji jest modyfikacja pliku php.ini i ponowne uruchomienie serwera
WWW. Jeżeli korzystasz z PHP w postaci programu CGI nie musisz restartować serwera, ponieważ plik php.ini
jest odczytywany za każdym uruchomieniem programu CGI. Dla przykładu można zmienić sposób raportowania
błędów przez PHP, korzystając z odpowiednich opcji konfiguracji. Opcje te mają następujące wartości domyślne:
PHP – Kompendium wiedzy21
error_reporting = E_ALL & ~E_NOTICE ; Pokaż wszystkie błędy oprócz informacji
display_errors = On ; Wypisuj błędy (jako część wynikowego HTML)
log_errors = Off ; Zapisuj błędy do pliku błędów
error_log = syslog ; Zapisuj błędy do dziennika systemowego
Pierwsza opcja powoduje generowanie komunikatów dla wszystkich typów błędów poza typem E_NOTICE.
Następna linia powoduje wstawianie komunikatów błędów do wynikowego kodu HTML. Następne dwa wiersze
powodują zapisywanie komunikatów błędów w pliku. Załóżmy, że w instalacji produkcyjnej nie chcemy
wyświetlać błędów, a zamiast tego błędy będą zapisywane do określonego pliku. Można to zrealizować
zmieniając konfigurację w następujący sposób:
error_reporting = E_ALL ; Pokaż wszystkie błędy
display_errors = Off ;
log_errors = On ; Zapisuj błędy
error_log = /tmp/php_log ; Zapisuj błędy do pliku /tmp/php_log
Taka konfiguracja powoduje, że wszystkie komunikaty błędów, w tym informacje, będą zapisywane w
pliku /tmp/php_log. Oczywiście plik ten powinien mieć odpowiednio ustawione prawa dostępu, aby serwer
WWW mógł zapisać w nim dane.
Z powodu dużej ilości opcji konfiguracji, nie zostaną tu przedstawione wszystkie możliwe opcje. Pełna
lista znajduje się w skorowidzu na końcu książki. Tutaj przedstawione zostaną jedynie ogólne sposoby
wykorzystywania tych opcji. Aby zmienić opcję konfiguracji, należy otworzyć w edytorze plik php.ini i odszukać
opcję. Zwykle znajduje się tam sporo komentarzy opisujących możliwe wartości danej opcji.
Inne metody zmiany konfiguracji PHP
Istnieją dwie metody zmiany konfiguracji PHP bez konieczności modyfikacji pliku php.ini. Pierwszym
sposobem jest wstawienie tych opcji do pliku konfiguracyjnego Apache httpd.conf lub do pliku .htaccess.
Pierwsza metoda jest użyteczna, jeżeli chcemy mieć różne ustawienia PHP dla różnych serwerów wirtualnych lub
różnych katalogów. Druga metoda jest wykorzystywana, gdy nie jest możliwy dostęp do plików php.ini i
httpd.conf. Jest to częsta sytuacja, witryna jest umieszczona na dzierżawionym serwerze zewnętrznej firmy. Jest
to jednak najmniej zalecana metoda, ponieważ plik .htaccess jest wczytywany i analizowany za każdym
odwołaniem do stron znajdujących się w tym katalogu. Powoduje to znaczne spowolnienie serwera WWW.
W obu tych przypadkach sposób zmiany konfiguracji PHP jest tak sam. Należy użyć dyrektyw
konfiguracji php_value i php_flag do ustawienia potrzebnych opcji. Na przykład, aby ustawić poprzednio opisane
opcje konfigurujące sposób raportowania błędów, należy użyć następujących dyrektyw Apache:ServerAdmin admin@server.net
DocumentRoot /www/hosts/wwwprojects/
ServerName www.testserver.com
php_value error_reporting 2047
php_flag display_errors off
php_flag log_errors on
php_value error_log /tmp/php_logUmieszczenie tych ustawień w pliku httpd.conf spowoduje, że zostanie ustawiony sposób raportowania
błędów dla serwera wirtualnego o nazwie www.testserver.com. Jeżeli na tej samej maszynie istnieją inne serwery
wirtualne, używają one konfiguracji określonej przez plik php.ini. Pozwala to na posiadanie różnych konfiguracji
PHP dla różnych serwerów wirtualnych lub katalogów.
Jeżeli musisz zmienić konfigurację PHP a nie masz dostępu do pliku php.ini ani do httpd.conf, możesz
wykorzystać pliki Apache .htaccess. Jest to również użyteczne, jeżeli określony katalog musi mieć inne
ustawienia konfiguracji niż reszta witryny. Na przykład, można zmienić sposób raportowania błędów dla jednego
katalogu na czas uruchamiania skryptów w nim się znajdujących. W tym celu należy stworzyć plik .htaccess z
następującą zawartością:
php_value error_reporting 2039
php_flag log_errors off
php_flag display_errors on
Należy zauważyć, że w obu przykładowych plikach konfiguracyjnych Apache wartość zmiennej
konfiguracji error_reporting jest ustawiana za pomocą wartości numerycznej a nie stałej. Jest o jedyny sposób
poprawnego ustawienia wartości. Należy pamiętać, że konfigurując PHP poprzez dyrektywy Apache nie można
używać jako wartości żadnych stałych PHP. W przeciwnym wypadku efekty mogą być niespodziewane.
Aby zilustrować potęgę dostępnego mechanizmu konfiguracji na rysunku 1.8. przedstawiony został
schemat możliwości konfiguracji środowiska PHP.
Rozdział 1 – Kompilacja i instalowanie PHP 22
Rysunek 1.8.
Elastyczność
konfiguracji z
zastosowaniem
php.ini oraz plików
konfiguracyjnych
Apache
Podsumowanie
W tym rozdziale przedstawiono kilka informacji niezbędnych do rozpoczęcia pracy z PHP. Z powodu
elastyczności i dużej ilości obsługiwanych platform niemożliwe jest szczegółowe opisanie wszystkich dostępnych
konfiguracji. Korzystając jednak z informacji umieszczonych w tej książce, oraz na witrynie www.php.net
powinieneś być w stanie zainstalować i skonfigurować PHP na twojej platformie.
Trzeba zauważyć, że PHP posiada wiele własnych funkcji zmieniających ustawienia konfiguracji.
Przykładami takich funkcji są error_reporting() oraz set_time_limit(). Więcej informacji na temat tych funkcji
można znaleźć w skorowidzu na końcu książki.
Rozdział 2. Język
Wstęp
W rozdziale tym znajduje się zwięzły opis języka programowania PHP. Jak wspomniałem we wstępie do
książki nie jest moją intencją poświęcać zbyt wiele czasu na omawianiu ogólnych koncepcji programowania. W
tym rozdziale znajduje się opis składni podstawowych konstrukcji programowania, na przykład zmiennych,
stałych i funkcji. Przykłady przytoczone w tym rozdziale nie pokazują najlepszych technik programowania a
jedynie ilustrują składnię i użycie omawianych elementów. Pełny opis języka znajduje się w dokumentacji języka
dostępnej na witrynie http://www.php.net.
Ogólne informacje na temat składni
Ponieważ PHP jest zwykle wbudowywany w kod HTML istnieją specjalne znaczniki ograniczające bloki
PHP. Użycie tych znaczników jest nazywane czasem wyjściem z trybu HTML.
Wydruk 2.1. Sposoby oznaczania bloku kodu PHP w HTML echo "użycie krótkich znaczników PHP do wyjścia z trybu HTML "; ?>"; ?><% echo "można stosować również znaczniki w stylu ASP "; %>Pierwsza metoda oznaczania bloków PHP jest dostępna jedynie wtedy, gdy uaktywnione są krótkie
znaczniki. Aby to zrobić należy użyć funkcji short_tags(), włączyć w pliku konfiguracyjnym opcję
short_tag_open lub skompilować PHP z opcją -enable-short-tags. Znaczniki w stylu ASP są dostępne jedynie
wtedy, gdy uaktywniona jest opcja konfiguracji asp_tags. Więcej informacji na temat kompilowania i
konfiguracji PHP znajduje się w rozdziałach „Kompilacja i instalowanie PHP” oraz dodatku D - „Opcje
konfiguracji”.
PHP jest syntaktycznie bardzo podobny do C. Na przykład, instrukcje są oddzielone średnikiem. Znacznik
?> jest niejawnym końcem instrukcji, więc poniższe przykłady są poprawne składniowo:
Wydruk 2.2. Koniec instrukcji";
?>"
?>Komentarze w PHP można oznaczać symbolami komentarzy pochodzącymi z C, C++ lub stosowanych w
skryptach Uniksa. Komentarze jednoliniowe komentują tekst do końca linii lub do końca bieżącego bloku PHP w
zależności od tego, co będzie pierwsze. Nie można zagłębiać wielowierszowych komentarzy w stylu C.
Wydruk 2.3. Komentarze"; // To jest jednowierszowy komentarz w stylu C++
/* To jest wielowierszowy
blok komentarza */
echo "Witamy ponownie. "; # To jest komentarz w stylu skryptów Uniksa
?>To wyświetli nic.
Rozdział 2 – Język 24
/*
echo "A tutaj mamy problem."; /* Komentarz ten jest
nieprawidłowy */
*/
?>Typy
PHP posiada następujące typy: liczby zmiennoprzecinkowe, liczby całkowite, ciągi, tablice i obiekty. Typ
zmiennej jest ustalany w oparciu o kontekst w jakim jest użyta zmienna i nie jest on jawnie ustalany przez
programistę. Jest to ważna cecha o której należy pamiętać podczas programowania aplikacji PHP, ponieważ
niejawna konwersja typów może spowodować trudne do odnalezienia błędy. Na przykład poniższa instrukcja jest
prawidłowa i spowoduje wyświetlenie liczby 9:
print( 3* "3 małe świnki");
Aby można było zapanować nad typami, PHP posiada funkcje gettype() i settype() oraz kilka funkcji
przeznaczonych dla określonych typów, na przykład is_integer() lub is_array(). W skorowidzu funkcji na
końcu książki znajduje się pełne omówienie tych funkcji. Teraz zostanie opisany każdy z typów zmiennych
(oprócz obiektów). Obiekty PHP zostaną opisane w dalszej części rozdziału.
Liczby — całkowite i zmiennoprzecinkowe
Liczby całkowite można podawać używając notacji dziesiętnej, ósemkowej i szesnastkowej. Liczby
zmiennoprzecinkowe można podawać używając notacji zwykłej lub zapisu naukowego. Na poniższym wydruku
pokazana jest składnia PHP dla wszystkich tych notacji.
Wydruk 2.4. Reprezentacja liczb" );
?>Ciągi
Ciągi w PHP są ograniczane apostrofami (') lub cudzysłowami ("). Zapisy te różnią się sposobem
interpretacji ciągu. Jeżeli ciąg jest otoczony cudzysłowami, zmienne zapisane w ciągu zostają zamienione na ich
wartości. Aby zapisać znaki specjalne w ciągach otoczonych cudzysłowami, należy użyć znaku lewego ukośnika
(\), tak jak zostało to pokazane w tabeli 2.1.
Tabela 2.1. Znaki specjalne w ciągach otoczonych cudzysłowami
Sekwencja znaków Znaczenie
\n nowa linia
\r powrót karetki (CR)
\t tabulacja
\\ lewy ukośnik
\" cudzysłów
\$ znak dolara
W ciągach otoczonych apostrofami zmienne nie są zastępowane. Jedynymi dopuszczalnymi sekwencjami
sterującymi są te oznaczające lewy ukośnik (\\) i apostrof (\'). Sekwencje te pozwalają na wpisanie do ciągu
znaku apostrofu i lewego ukośnika. Ciągi mogą być łączone przy użyciu operatora kropki (.). Dokładniej jest to
opisane w części rozdziału na temat operatorów. Podobnie jak w języku C, mamy dostęp do poszczególnych
znaków ciągu, traktując go jak tablicę znaków.
Wydruk 2.5. Przykład operacji na ciągach
PHP – Kompendium wiedzy25
$aStr1 = "To jest zwykły ciąg.";
print( "$aStr1 " );
$aStr2 = "Thatcher";
print( "$aStr2 " );
$aStr3 = "Nazywam się $aStr2";
// $aStr3 = "Nazywam się Thatcher"
print( "$aStr3 " );
$aStr4 = "Nazywam się \$aStr2";
// $aStr4 = "Nazywam się $aStr2"
print( "$aStr4 " );
$aStr5 = 'Nie rozwijaj \'$aStr2\'';
// $aStr5 = "Nie rozwijaj '$aStr2'"
print( "$aStr5 " );
// wypisuje "Nazywam się Thatcher i Nazywam się $aStr2"
print( "$aStr3" . " i " . "$aStr4" );
?>Z powodu ulotnej natury typów w PHP, zmienne mogą zmieniać swój typ w zależności od kontekstu w
jakim występują. Liczby mogą być konwertowane niejawnie na ciągi, jeżeli zostaną użyte jako argument
operatora operującego na ciągach. Ciągi mogą również zostać skonwertowane na liczby, jeżeli będą użyte w
wyrażeniach matematycznych. Jeżeli PHP próbuje skonwertować ciąg na liczbę, korzysta z następujących zasad:
Jeżeli ciąg zaczyna się od danych numerycznych, zostaną one skonwertowane na liczbę.
Jeżeli ciąg nie zaczyna się prawidłowymi danymi liczbowymi, wartością ciągu będzie zero (0).
Jeżeli dane numeryczne zawierają jeden ze znaków .,e lub E, wartość będzie liczbą zmiennoprzecinkową
a w przeciwnym przypadku liczbą całkowitą.
Prawidłowymi danymi numerycznymi są: opcjonalny znak po którym następuje jedna lub więcej cyfr,
opcjonalna kropka dziesiętna oraz opcjonalny znak wykładnika. Znakiem wykładnika jest „e” lub „E”, po którym
następuje jedna lub więcej liczb.
Wydruk 2.6. Niejawna konwersja pomiędzy ciągiem i liczbą" );
$aVar2 = $aVar . " niejawnie skonwertowane do ciągu";
print( "\$aVar2 = $aVar2, typ = " . gettype( $aVar2 ) . " " );
$aVar3 = $aVar2 + 1; // niejawna konwersja na liczbę całkowitą
print( "\$aVar3 = $aVar3, typ = " . gettype( $aVar3 ) . " " );
$aVar3 = $aVar2 * 1.1; // niejawna konwersja na liczbę zmiennoprzecinkową
print( "\$aVar3 = $aVar3, typ = " . gettype( $aVar3 ) . " " );
$aNotNumber = "abc";
$aVar4 = $aNotNumber * 1; // próba konwersji na liczbę, zwracane jest 0
print( "\$aVar4 = $aVar4, typ = " . gettype( $aVar4 ) . " " );
$aIsNumber = "3 małe świnki";
$aVar5 = $aIsNumber + 1; // konwersja $aIsNumber na liczbę 3
print( "\$aVar5 = $aVar5, typ = " . gettype( $aVar5 ) . " " );
?>Tablice
Tablice w PHP zachowują się zarówno tak jak tablice indeksowane (wektory) oraz jak tablice mieszające
(asocjacyjne). PHP pozwala również na tworzenie tablic wielowymiarowych. Z powodu unikalnej konstrukcji
tablic w PHP, można indeksować jeden wymiar tablicy wielowymiarowej liczbami a inny w sposób asocjacyjny.
Tablice mogą być tworzone przy użyciu funkcji list() lub array() albo poprzez jawne podanie każdej z
wartości. W skorowidzu funkcji na końcu książki zostały opisane wszystkie funkcje do manipulacji tablicami.
Jednowymiarowe tablice mogą zamieniane w ciągach przez mechanizm zastępowania zmiennych na
wartości w sposób identyczny jak wszystkie inne zmienne. W przypadku tablic wielowymiarowych należy użyć
nawiasów klamrowych do zaznaczenia indeksów. Poniższy wydruk pokazuje przykłady użycia różnych typów
tablic.
Wydruk 2.7. Inicjowanie i użycie tablic
Spis Treści SPIS TREŚCI............................................................................................................................................................ 1 WSTĘP...................................................................................................................................................................... 7 Dla kogo jest przeznaczona ta książka............................................................................................................... 7 Konwencje.......................................................................................................................................................... 7 Omówienie książki.............................................................................................................................................. 7 Od autora............................................................................................................................................................ 8 Przykłady kodu................................................................................................................................................... 8 CZYM JEST PHP....................................................................................................................................................... 8 DLACZEGO POWINIENEŚ UŻYĆ PHP......................................................................................................................... 9 GDZIE SZUKAĆ POMOCY.......................................................................................................................................... 9 PODZIĘKOWANIA................................................................................................................................................... 10 O AUTORZE............................................................................................................................................................ 10 ROZDZIAŁ 1. KOMPILACJA I INSTALOWANIE PHP................................................................................ 11 WSTĘP................................................................................................................................................................... 11 POBIERANIE PHP................................................................................................................................................... 11 INSTALOWANIE WERSJI BINARNEJ.......................................................................................................................... 11 Binarna instalacja dla Windows ...................................................................................................................... 11 Instalowanie PHP w postaci modułu ISAPI................................................................................................. 12 Użycie PHP jako CGI................................................................................................................................... 14 Inne instalacje binarne ..................................................................................................................................... 14 KOMPILOWANIE PHP ............................................................................................................................................ 15 Kompilowanie PHP w Uniksach ...................................................................................................................... 15 Kompilacja modułu CGI .............................................................................................................................. 15 Kompilacja PHP jako statycznie dołączanego modułu Apache ................................................................... 17 Kompilacja PHP do postaci dynamicznie ładowanego modułu Apache...................................................... 17 Podsumowanie kompilacji PHP w systemach Unix..................................................................................... 18 Kompilowanie PHP w środowisku Windows ................................................................................................... 18 Podsumowanie kompilacji PHP....................................................................................................................... 20 KONFIGUROWANIE PHP ........................................................................................................................................ 20 Korzystanie z pliku php.ini ............................................................................................................................... 20 Inne metody zmiany konfiguracji PHP............................................................................................................. 21 PODSUMOWANIE.................................................................................................................................................... 22 ROZDZIAŁ 2. JĘZYK .......................................................................................................................................... 23 WSTĘP................................................................................................................................................................... 23 OGÓLNE INFORMACJE NA TEMAT SKŁADNI............................................................................................................ 23 TYPY ..................................................................................................................................................................... 24 Liczby — całkowite i zmiennoprzecinkowe ...................................................................................................... 24 Ciągi ................................................................................................................................................................. 24 Tablice .............................................................................................................................................................. 25 ZMIENNE I STAŁE................................................................................................................................................... 26 Zmienne predefiniowane .................................................................................................................................. 26 Zasięg zmiennych.............................................................................................................................................. 30
Spis Treści 2 Stałe.................................................................................................................................................................. 31 OPERATORY I KOLEJNOŚĆ OPERATORÓW............................................................................................................... 31 PROGRAMOWANIE PRZEPŁYWU STEROWANIA........................................................................................................ 32 if, else, elseif ..................................................................................................................................................... 32 while ................................................................................................................................................................. 32 do .. while ......................................................................................................................................................... 32 for ..................................................................................................................................................................... 33 foreach.............................................................................................................................................................. 33 switch................................................................................................................................................................ 33 break i continue................................................................................................................................................ 35 include i require ............................................................................................................................................... 36 FUNKCJE................................................................................................................................................................ 36 Klasy i programowanie obiektowe................................................................................................................... 37 PORÓWNYWANIE WZORCÓW.................................................................................................................................. 39 Podsumowanie.................................................................................................................................................. 39 ROZDZIAŁ 3. FORMULARZE I COOKIE....................................................................................................... 40 WSTĘP................................................................................................................................................................... 40 OBSŁUGA FORMULARZYW PHP............................................................................................................................ 41 Skalarne i wielowartościowe elementy formularza.......................................................................................... 41 Alternatywne metody odczytywania wartości z formularza ............................................................................. 42 Użycie formularzy do przesyłania plików......................................................................................................... 45 Użycie rysunku jako przycisku wysłania danych.............................................................................................. 45 KONTROLA POPRAWNOŚCI DANYCH FORMULARZA................................................................................................ 46 Kontrola danych za pomocą wyrażeń regularnych .......................................................................................... 46 Kontrola poprawności za pomocą sprawdzania typów.................................................................................... 47 Klasa Validator ................................................................................................................................................ 48 COOKIE.................................................................................................................................................................. 49 WAŻNE ZAGADNIENIA PROGRAMOWANIA DLA WWW.......................................................................................... 50 Obsługa nieprawidłowych danych ................................................................................................................... 50 Obsługa i formatowanie wyświetlanych danych .............................................................................................. 52 PODSUMOWANIE.................................................................................................................................................... 57 ROZDZIAŁ 4. OPERACJE NA PLIKACH........................................................................................................ 58 WSTĘP................................................................................................................................................................... 58 ODCZYT I ZAPIS PLIKÓW ........................................................................................................................................ 58 UŻYCIE GNIAZD..................................................................................................................................................... 59 UŻYCIE POTOKÓW ................................................................................................................................................. 60 KLASA FILE........................................................................................................................................................... 61 PODSUMOWANIE.................................................................................................................................................... 61 ROZDZIAŁ 5. WYSYŁANIE PLIKÓW PRZEZ FORMULARZ.................................................................... 62 WSTĘP................................................................................................................................................................... 62 WYSYŁANIE POJEDYNCZEGO PLIKU....................................................................................................................... 62 PUŁAPKI................................................................................................................................................................ 64 PRZESYŁANIE WIELU PLIKÓW ................................................................................................................................ 64 BEZPIECZEŃSTWO.................................................................................................................................................. 65 PODSUMOWANIE.................................................................................................................................................... 66 ROZDZIAŁ 6. WSPÓŁPRACA Z BAZAMI DANYCH.................................................................................... 67 WSTĘP................................................................................................................................................................... 67 WPROWADZENIE ................................................................................................................................................... 67 FUNKCJE BAZ DANYCH .......................................................................................................................................... 67 MYSQL................................................................................................................................................................. 68
PHP – Kompendium wiedzy3 Rozpoczynamy pracę z MySQL ........................................................................................................................ 68 Użycie MySQL.................................................................................................................................................. 68 ODBC ................................................................................................................................................................... 71 Podstawy ODBC............................................................................................................................................... 71 Instalowanie i kompilowanie unixODBC .................................................................................................... 72 Kompilowanie PHP z obsługą unixODBC................................................................................................... 72 Instalowanie sterownika OOB...................................................................................................................... 72 Konfigurowanie OOB .................................................................................................................................. 72 Korzystanie z ODBC......................................................................................................................................... 73 PHPLIB ................................................................................................................................................................ 74 PRZECHOWYWANIE DANYCH Z FORMULARZY........................................................................................................ 75 WYKORZYSTANIE MOŻLIWOŚCI BAZYDANYCH ..................................................................................................... 77 PODSUMOWANIE.................................................................................................................................................... 78 ROZDZIAŁ 7. SESJE I STAN APLIKACJI....................................................................................................... 80 WSTĘP................................................................................................................................................................... 80 PODSTAWYMECHANIZMU SESJI............................................................................................................................. 80 WBUDOWANYW PHP MECHANIZM ZARZĄDZANIA SESJAMI.................................................................................. 81 Rozpoczęcie pracy z sesjami w PHP ................................................................................................................ 81 Przesyłanie identyfikatora sesji bez użycia cookie ........................................................................................... 83 Zapisywanie zmiennych sesji w bazie danych .................................................................................................. 85 Inne funkcje i opcje dotyczące sesji.................................................................................................................. 89 UŻYCIE PHPLIB DO OBSŁUGI SESJI....................................................................................................................... 90 TWORZENIE WŁASNEGO MECHANIZMU SESJI ......................................................................................................... 92 INŻYNIERIA PROGRAMOWANIA A SESJE ................................................................................................................. 92 PODSUMOWANIE.................................................................................................................................................... 94 ROZDZIAŁ 8. UWIERZYTELNIANIE.............................................................................................................. 95 WSTĘP................................................................................................................................................................... 95 PODSTAWOWE UWIERZYTELNIANIE W APACHE ..................................................................................................... 95 AKTUALIZACJA PLIKU .HTACCESS PRZYUŻYCIU PHP............................................................................................ 97 PODSTAWOWE UWIERZYTELNIANIE ZA POMOCĄ PHP............................................................................................ 99 KOMPLETNYSYSTEM UWIERZYTELNIANIA OPARTY O PHP.................................................................................. 100 PODSUMOWANIE.................................................................................................................................................. 104 ROZDZIAŁ 9. NIEZALEŻNOŚĆ OD PRZEGLĄDARKI ............................................................................. 105 WSTĘP................................................................................................................................................................. 105 ROZPOCZYNAMY................................................................................................................................................. 105 WEWNĘTRZNE FUNKCJE PHP .............................................................................................................................. 106 Dodatkowe informacje na temat Browscap.................................................................................................... 106 BROWSERHAWK.................................................................................................................................................. 109 WYKORZYSTANIE DANYCH O PRZEGLĄDARCE..................................................................................................... 113 PODSUMOWANIE.................................................................................................................................................. 114 ROZDZIAŁ 10. URUCHAMIANIE................................................................................................................... 115 WSTĘP................................................................................................................................................................. 115 INŻYNIERIA PROGRAMOWANIA A URUCHAMIANIE............................................................................................... 115 Projekt aplikacji............................................................................................................................................. 115 Definiowanie standardów programowania .................................................................................................... 116 Przegląd oprogramowania............................................................................................................................. 116 Testowanie...................................................................................................................................................... 117 Uruchamianie................................................................................................................................................. 117 PROGRAMOWANIE DEFENSYWNE......................................................................................................................... 118 WŁASNA OBSŁUGA BŁĘDÓW................................................................................................................................ 122
Spis Treści 4 ZAAWANSOWANA OBSŁUGA BŁĘDÓW.................................................................................................................. 125 PODSUMOWANIE.................................................................................................................................................. 129 BIBLIOGRAFIA ..................................................................................................................................................... 130 ROZDZIAŁ 11. PONOWNE WYKORZYSTANIE KODU ............................................................................ 131 WSTĘP................................................................................................................................................................. 131 PONOWNE WYKORZYSTANIE KODU A INŻYNIERIA PROGRAMOWANIA.................................................................. 131 PONOWNE UŻYCIE ISTNIEJĄCEGO KODU............................................................................................................... 132 PHP ................................................................................................................................................................ 132 C/C++............................................................................................................................................................ 133 Java................................................................................................................................................................. 138 Dodawanie obsługi Javy w PHP na *niksach............................................................................................. 138 Dołączanie obsługi Javy w PHP dla Windows........................................................................................... 139 Opcje konfiguracji Javy.............................................................................................................................. 139 COM ............................................................................................................................................................... 141 Inne metody .................................................................................................................................................... 143 PODSUMOWANIE.................................................................................................................................................. 144 BIBLIOGRAFIA ..................................................................................................................................................... 144 ROZDZIAŁ 12. ODDZIELANIE KODU HTML OD PHP............................................................................. 145 WSTĘP................................................................................................................................................................. 145 WPROWADZENIE ................................................................................................................................................. 145 ODDZIELENIE I INTEGRACJA PRZY UŻYCIU WBUDOWANYCH FUNKCJI PHP.......................................................... 146 Motywacja...................................................................................................................................................... 146 Implementacja................................................................................................................................................ 147 Czego należy unikać ....................................................................................................................................... 151 Podsumowanie: Oddzielanie i integracja przy wykorzystaniu funkcji PHP.................................................. 151 WYKORZYSTANIE SYSTEMU SZABLONÓW............................................................................................................ 152 FastTemplate.................................................................................................................................................. 152 Zaawansowane techniki użycia FastTemplate ............................................................................................... 157 PODSUMOWANIE.................................................................................................................................................. 159 BIBLIOGRAFIA ..................................................................................................................................................... 159 ROZDZIAŁ 13. FAJNY PHP.............................................................................................................................. 160 WSTĘP................................................................................................................................................................. 160 WYSYŁANIE DO PRZEGLĄDARKI PLIKÓW INNYCH NIŻ HTML.............................................................................. 160 SKRYPTYAUTOMATYZUJĄCE............................................................................................................................... 164 WDDX................................................................................................................................................................ 168 MONITOROWANIE SIECI ....................................................................................................................................... 172 PODSUMOWANIE.................................................................................................................................................. 174 ROZDZIAŁ 14. WITRYNY OPARTE O SZABLONY................................................................................... 175 PODSTAWYWYKORZYSTANIA SZABLONÓW......................................................................................................... 175 ZAPOŻYCZANIE.................................................................................................................................................... 183 PERSONALIZACJA WITRYNY................................................................................................................................. 185 OBSŁUGA WIELU JĘZYKÓW .................................................................................................................................. 187 PODSUMOWANIE.................................................................................................................................................. 189 ROZDZIAŁ 15. WITRYNY OPARTE O BAZĘ DANYCH............................................................................ 190 WSTĘP................................................................................................................................................................. 190 PROJEKT BAZYDANYCH ...................................................................................................................................... 190 ZARZĄDZANIE DANYMI APLIKACJI....................................................................................................................... 192 WYŚWIETLANIE DANYCH..................................................................................................................................... 199 PODSUMOWANIE.................................................................................................................................................. 204
PHP – Kompendium wiedzy5 ROZDZIAŁ 16. GENEROWANIE STATYCZNYCH STRON HTML W OPARCIU O DYNAMICZNE DANE..................................................................................................................................................................... 205 WSTĘP................................................................................................................................................................. 205 KONCEPCJA ......................................................................................................................................................... 205 GENEROWANIE STRON STATYCZNYCH................................................................................................................. 205 Użycie buforowania........................................................................................................................................ 205 Użycie FastTemplate...................................................................................................................................... 207 TECHNIKI BUFOROWANIA.................................................................................................................................... 208 PODSUMOWANIE.................................................................................................................................................. 210 ROZDZIAŁ 17. WITRYNY HANDLU ELEKTRONICZNEGO ................................................................... 211 WSTĘP................................................................................................................................................................. 211 BEZPIECZEŃSTWO................................................................................................................................................ 211 Zastosowanie SSL........................................................................................................................................... 211 Certyfikaty...................................................................................................................................................... 211 Bezpieczeństwo bazy danych .......................................................................................................................... 212 PRZETWARZANIE PŁATNOŚCI............................................................................................................................... 212 DOSTARCZANIE PRODUKTÓW .............................................................................................................................. 219 PODSUMOWANIE.................................................................................................................................................. 220 DODATEK A. FUNKCJE ................................................................................................................................... 221 DODATEK B. PREDEFINIOWANE ZMIENNE I STAŁE PHP................................................................... 367 ZMIENNE ............................................................................................................................................................. 367 Zmienne Apache ............................................................................................................................................. 367 Zmienne środowiska....................................................................................................................................... 369 Zmienne PHP.................................................................................................................................................. 369 STAŁE.................................................................................................................................................................. 370 DODATEK C. OPCJE KOMPILACJI PHP..................................................................................................... 372 BAZYDANYCH..................................................................................................................................................... 372 HANDEL ELEKTRONICZNY ................................................................................................................................... 374 GRAFIKA ............................................................................................................................................................. 374 RÓŻNE ................................................................................................................................................................. 375 --enable-inline-optimization........................................................................................................................... 376 SIEĆ..................................................................................................................................................................... 379 DZIAŁANIE PHP .................................................................................................................................................. 379 SERWER............................................................................................................................................................... 380 TEKST I JĘZYK ..................................................................................................................................................... 380 XML................................................................................................................................................................... 381 DODATEK D. OPCJE KONFIGURACJI PHP................................................................................................ 382 OGÓLNE DYREKTYWY KONFIGURACJI ................................................................................................................. 382 DYREKTYWYKONFIGURACJI POCZTY.................................................................................................................. 385 DYREKTYWYKONFIGURACJI TRYBU BEZPIECZNEGO ........................................................................................... 385 DYREKTYWYKONFIGURACJI DEBUGGERA........................................................................................................... 385 DYREKTYWYŁADOWANIA ROZSZERZEŃ.............................................................................................................. 385 DYREKTYWYKONFIGURACJI MYSQL................................................................................................................. 386 DYREKTYWYKONFIGURACJI MSQL.................................................................................................................... 386 DYREKTYWYKONFIGURACJI POSTGRESQL ........................................................................................................ 386 DYREKTYWYKONFIGURACJI SYBASE.................................................................................................................. 387 DYREKTYWYKONFIGURACJI SYBASE-CT ........................................................................................................... 387 DYREKTYWYKONFIGURACJI INFORMIX............................................................................................................... 388 DYREKTYWYKONFIGURACJI BC MATH .............................................................................................................. 389
Spis Treści 6 DYREKTYWYKONFIGURACJI MOŻLIWOŚCI PRZEGLĄDAREK ................................................................................ 389 DYREKTYWYKONFIGURACJI ZUNIFIKOWANEGO ODBC ..................................................................................... 389 DODATEK E. ZASOBY SIECI.......................................................................................................................... 390
Wstęp Książka ta jest przeznaczona dla programistów tworzących aplikacje WWW za pomocą PHP. Należy zwrócić uwagę, że zostało użyte określenie aplikacje WWW a nie strony WWW lub witryny WWW. W przeszłości w Sieci znajdowały się w większości proste strony HTML o ograniczonej możliwości interakcji. Dzisiejszy obraz Sieci jest o wiele bardziej skomplikowany. Użytkownicy i firmy oczekują od Sieci coraz więcej. Powoduje to powstanie coraz większej ilości dynamicznych aplikacji WWW. PHP jest idealny do tworzenia takich aplikacji, ponieważ został zaprojektowany właśnie do realizacji tego zadania. Dla kogo jest przeznaczona ta książka Książka ta powinna być użyteczna dla szerokiego grona programistów WWW, ale pisana była z myślą o średnio zaawansowanych lub zaawansowanych programistach. PHP jest językiem programowania a nie językiem opisu strony, więc przydatne będzie doświadczenie w programowaniu. Programiści znający C lub Perla powinni uznać PHP za język bardzo przyjazny, natomiast programiści pracujący w ASP Microsoftu (Active Server Pages) uznają PHP za język o podobnej strukturze. Ponieważ książka ta nie jest kierowana do początkujących programistów, podstawowe pojęcia dotyczące programowania zostaną przedstawione bardzo skrótowo. Zakłada się, że Czytelnik zna takie pojęcia programowania, jak funkcje, zmienne i stałe. Konwencje W książce przyjęto następujące konwencje: Kod programu i jego wyniki zaznaczone są czcionką o stałej szerokości. Nazwy plików i katalogów zaznaczone są czcionką pochyłą. Komendy i elementy języka zaznaczone są czcionką o stałej szerokości. Omówienie książki Książka zawiera zwięzłe wprowadzenie do PHP, oraz opis języka. Został w niej również przedstawiony sposób instalacji i konfiguracji PHP. Druga część, „Specjalne wymagania przy programowaniu WWW”, przeznaczona jest dla programistów tradycyjnych aplikacji rozpoczynających pracę przy aplikacjach WWW. W części tej przedstawione zostały takie zagadnienia jak: przetwarzanie formularzy, interakcję z użytkownikiem, utrzymywanie stanu oraz niezależność od przeglądarki. Następna część, „Zarządzanie projektem aplikacji WWW” opisuje zalety modularności i powtórnego użycia kodu. Część „Przykłady zastosowań” pokazuje użycie PHP na podstawie fragmentów działających już aplikacji. Część ta łączy zagadnienia przedstawione w poprzednich częściach i pokazuje przykłady pełnej wymiany informacji pomiędzy przeglądarką użytkownika i aplikacją zainstalowaną na serwerze WWW. Na końcu książki znajduje się skorowidz zawierający wszystkie funkcje PHP4.
Wstęp 8 Od autora Od około trzech lat tworzę aplikacje WWW przy użyciu PHP i ASP, jako niezależny przedsiębiorca. Fundamentem mojego sukcesu było użycie PHP, ponieważ pozwala on na szybkie budowanie pro totypów, oraz jest wystarczająco wydajny i pewny nawet do tworzenia dużych aplikacji WWW. Celem tej książki jest przekazanie innym programistów użytecznych informacji. Nie będę opisywał różnic pomiędzy PHP i innymi tego typu narzędziami i nie będę zajmował się historią PHP. Wszystkie te informacje można znaleźć na oficjalnej witrynie PHP, www.php.net. Zamiast tego pokażę zastosowanie PHP do stworzenia aplikacji WWW. Omówię również inżynierię programowania w projektach WWW, sposoby przeniesienia istniejącego kodu do nowych projektów WWW. Przedstawię również kilka przydatnych narzędzi napisanych dla PHP. Przykłady kodu Zamieszczone przykłady kodu były tworzone i testowane pzy użyciu PHP 4.0.1 (poprawka 2) na Apache 1.3.11 działającym w systemie RedHat 6.1. Do edycji plików HTML i PHP wykorzystuję edytor Allaire Homeite 4.5.1 zainstalowany na Windows NT. Do testowania małych fragmentów kodu stosowałem następujący szablon HTML do którego wklejałem odpowiedni kod PHP:
PHP – Kompendium wiedzy9 części „Specjalne wymagania przy programowaniu WWW”. Dlaczego powinieneś użyć PHP PHP jest pełnowartościowym językiem programowania pozwalający na tworzenie aplikacji WWW z wszystkimi potrzebnymi funkcjami. PHP współpracuje z wieloma systemami baz danych. Pozwala to na bardzo łatwe tworzenie aplikacji WW korzystających z informacji zapisanych w bazie danych. Możliwy jest również dostęp do usług sieciowych takich jak IMAP, POP3, NNTP i TTP. Pozwala on również na otwieranie gniazd sieciowych i podłączanie się do innych protokołów TCP/IP. PHP może być użyty we wielu konfiguracjach serwerów. Ponieważ PHP jest rozprowadzany głównie w postaci kodu źródłowego, może być skompilowany na wielu różnych platformach, na przykład na Linuksie, FreeBSD i nawet na Windows. Dostępne są również binarne dystrybucje dla Win32. PHP może działać jako program CGI lub może być zainstalowany jako moduł Apache lub rozszerzenie ISAPI. Dzięki temu może on działać z praktycznie każdym serwerem WWW, od Apache na Linuksie do IIS na Windows NT. W celu utworzenia najbardziej elastycznego środowiska pracy należy samodzielnie skompilować i zainstalować PHP. Jeżeli wolisz szybko zacząć pracę, możesz zastosować binarną dystrybucję PHP. Gdzie szukać pomocy Pomoc można uzyskać na witrynie PHP oraz poprzez kilka grup dyskusyjnych i wysyłkowych. W lutym 2000 roku około 1400000 domen korzystało z PHP. Ponieważ jest on tak popularny, istnieje ogromna grupa programistów i konsultantów, którzy mogą odpowiedzieć na pytania. Więcej informacji na temat dostępnych zasobów Sieci znajduje się w części „Zasoby” na końcu książki.
Wstęp 10 Podziękowania Na początku chciałbym podziękować wszystkim z wydawnictwa McGraw-Hill za umożliwienie mi zrealizowania tego zadania. Szczególne podziękowania należą się Rebece Young za wsparcie i pomoc w technicznych aspektach pisania książki. Dziękuję Johnowi Steele, mojemu redaktorowi technicznemu, który niezmiernie pomógł mi swoimi trafnymi uwagami i informacjami. Oczywiście, należy podziękować całemu zespołowi tworzącemu PHP. Wiele osób z tego zespołu pomagało mi w pracy nad książką. Cała część zawierająca skorowidz funkcji jest ich zasługą. To oni spędzili setki lub tysiące godzin tworząc ten wspaniały język programowania i bogatą dokumentację. Dziękuję Mattowi Wilson za umożliwienie mi wykorzystania w przykładzie do książki kodu MWeather. Dziękuję Nickowi Bradbury za pozwolenie wykorzystania informacji i rysunków z edytora TopStyle. Podziękowania dla Nate Weiss za pomoc przy użyciu deserializera WDDX dla JavaScript, dla Johna Kos za pomoc przy unixODBC i EasySoft ODBC-ODBC Bridge. Dla Martina Evans, głównego programisty ODBC- ODBC Bridge, za stworzenie tego świetnego produktu. Dziękuję Michaelowi Justin za pomoc przy konwerterze RTF do HTML firmy Scrooge. Dziękuję również Michaelowi C. Battilana za pomoc przy Cloanto Currency Server. Dla Sama Ockman za umożliwienie wykorzystania w książce rysunku serwera Penguin 1U. Dziękuję Richardowi Litofski za pomoc przy BrowserHawk. Podziękowania dla Ali Ersheid za umożliwienie wykorzystania w książce dokumentacji CyberCash. Dziękuję Josephowi Harris (znany jako CDI) za klasę FastTemplate oraz inne fantastyczne narzędzia dostępne na witrynie The Webmasters.net. Dziękuję rodzicom i braciom za nieustanne wsparcie nawet, gdy w latach osiemdziesiątych spędzałem całe noce na pisaniu programów w Apple Basicu. Dziękuję pani Barton, pani Smith i panu Wakefield, moim nauczycielom angielskiego z liceum, którzy mieli ogromny wpływ na moje pisanie. Dziękuję Garemu Rogers i Jasonowi Wallin za wskazanie mi PHP i Linuksa w czasie gdy coraz bardziej pogrążałem się wykorzystując ASP i Windows. Dziękuję Tracy Ard za pożyteczne komentarze do tej pracy oraz za jego niezmienną przyjaźń. Na koniec najważniejsze podziękowania należą się mojej żonie i córce za umożliwienie mi zakończenia tej pracy. Teraz znów możemy wieczorami chodzić skakać na trampolinie. O autorze Blake Schwendiman rozpoczął programowanie w 1980 roku rozpoczynając od Apple IIe i języka Basic. Zdobył licencjat na uniwersytecie Arizona State University w roku 1994. W chwili obecnej Blake zarządza firmą Intechra LLC, http://www.intechra.net/, firmą konsultingową specjalizującą się w oprogramowaniu, która ma siedzibę w Rexburg, Idaho. Intechra LLC specjalizuje się w tworzeniu oprogramowania dla WWW. Blake ma żonę Holy i trzyletnią córkę. Można się z nim skontaktować pod adresem blake@intechra.net.
Rozdział 1. Kompilacja i instalowanie PHP Wstęp Zanim rozpoczniemy naukę języka PHP, należy go poprawnie zainstalować i skonfigurować w używanym środowisku interpreter PHP. Ponieważ pakiet PHP może działać na wielu serwerach WWW i systemach operacyjnych, w rozdziale tym znajdą się szczegółowe opisy instalacji na jedynie kilku platformach, ale podane informacje są wystarczająco uniwersalne i mogą być wykorzystane przy konfigurowaniu środowiska pracy na innych platformach. W rozdziale tym opisane zostaną szczegółowo Apache dla Linuksa oraz IIS dla Windows NT. Są to często spotykane konfiguracje serwerów WWW i są one na tyle różne, że ilustrują ogólne zasady instalacji pakietu PHP na większości platform. Szczegółowe dane na temat określonej platformy można również znaleźć na witrynie www.php.net. Pobieranie PHP Pierwszym krokiem do rozpoczęcia pracy z PHP jest zaopatrzenie się w kopię interpretera PHP. Na witrynie www.php.net umieszczone jest kilka wariantów tego pakietu. Najnowsza wersja zawsze znajduje się na górze listy. W przypadku serwerów uniksowych zaleca się pobranie pakietu zawierającego kompletny kod źródłowy i przeprowadzenie samodzielnej kompilacji. Platformy uniksowe to między innymi Linux, BSD, Solaris itp. W przypadku Windows zaleca się pobranie binarnej instalacji PHP. Ze strony zawierającej pakiety instalacyjne można również pobrać poprzednie wersje programów, dokumentację i narzędzia pomocnicze. Poprzednie wersje mogą być potrzebne, jeżeli masz już gdzieś zainstalowane PHP i nie chcesz ryzykować niekompatybilności. Instalowanie wersji binarnej Po pobraniu binarnej dystrybucji PHP, instalacja jest banalna. Najczęściej binarna instalacja PHP jest przeznaczona dla Windows. Ponieważ jednak niektóre dystrybucje Uniksa zawierają binarną dystrybucję PHP, opisany zostanie również taki przypadek. Binarna instalacja dla Windows W PHP prawie wszystkie operacje można wykonać na kilka sposobów. Instalacja binarna dla Windows zawiera zarówno wersję CGI (Common Gateway Interface) PHP, jak również wersję ISAPI. Jeżeli korzystasz z serwera IIS (Internet Information Server) lub PWS (Personal Web Server) zalecane jest użycie modułu ISAPI. Wersja CGI powoduje, że PHP jest uruchamiany za każdym odwołaniem do strony, więc jest mniej efektywny od dynamicznego modułu jakim jest rozszerzenie ISAPI. Moduł ISAPI jest również ze swojej natury bezpieczniejszy od programu CGI.
Rozdział 1 – Kompilacja i instalowanie PHP 12 Instalowanie PHP w postaci modułu ISAPI Jeżeli korzystasz z serwera IIS, PWS lub innego serwera WWW obsługującego moduły ISAPI, najlepszym rozwiązaniem będzie użycie PHP w postaci modułu ISAPI. Aby zainstalować taką wersję, należy skopiować pliki php4ts.dll i msvcrt.dll do katalogu systemowego Windows (zwykle \windows\system w Windows 95 lub \winnt\system32 w Windows NT). Są to współdzielone biblioteki niezbędne do prawidłowej pracy każdej wersji PHP dla Windows. Dodatkowo można skopiować do katalogu systemowego inne pliki .dll, ale nie jest to konieczne do ich użycia. Następnie należy tak skonfigurować IIS lub PWS, aby korzystał z modułu ISAPI do obsługi plików php. Serwer IIS można konfigurować za pomocą konsoli konfiguracji zainstalowanej w menu Option Pack. Na rysunku 1.1. znajduje jest rozwinięte menu pokazujące położenie tego programu w Windows NT. Rysunek 1.1. Uruchamianie aplikacji konfigurującej IIS Po uruchomieniu konsoli Menedżer usług internetowych należy kliknąć prawym przyciskiem myszy na węźle serwera WWW (prawdopodobnie zatytułowany Domyślna witryna sieci Web) i wybrać Właściwości, tak jak jest to pokazane na rysunku 1.2. Następnie w oknie Właściwości należy przejść na zakładkę Katalog macierzysty i kliknąć przycisk Konfiguracja. Opcja ta pozwala na dodawanie i edycję skojarzeń. Rysunek 1.2. Konfigurowanie IIS Teraz należy kliknąć przycisk Dodaj i wprowadzić potrzebne informacje. Na rysunku 1.3. pokazany jest proces dodawania mapowania rozszerzenia phtml do modułu ISAPI PHP.
PHP – Kompendium wiedzy13 Rysunek 1.3. Dodawanie mapowania dla rozszerzenia w IIS Po dodaniu mapowania zmiany są od razu widoczne w oknie dialogowym Konfiguracja aplikacji. Czasami może być pożyteczne skojarzenie niektórych rozszerzeń z modułem ISAPI a niektórych z programem CGI. Na rysunku 1.4. pokazana jest konfiguracja mojego serwera WWW. Na rysunku widać mapowania dla PHP3, dla PHP4 jako CGI oraz PHP4 jako ISAPI. Jest to przydatne przy testowaniu różnic pomiędzy wersjami 3 i 4 PHP. Rysunek 1.4. Mapowanie rozszerzeń PHP Po zakończeniu konfiguracji należy ponownie uruchomić serwer WWW. Można to zrobić przy użyciu modułu Usługi w Panelu sterowania, lub uruchamiając z linii poleceń następujące polecenia: net stop iisadmin net start w3svc Po uruchomieniu serwera należy go przetestować tworząc prosty plik testowy, na przykład taki, jak pokazany na wydruku 1.1. i otwierając go poprzez twój serwer. Jeżeli wszystko jest skonfigurowane poprawnie, powinieneś zobaczyć ekran z informacjami na temat instalacji PHP. Wydruk 1.1. Testowy skrypt PHP
Rozdział 1 – Kompilacja i instalowanie PHP 14 Trzeba pamiętać, że w pakiecie instalacyjnym PHP znajduje się uwaga na temat stanu modułu ISAPI która ostrzega, że nie powinien być stosowany w środowisku produkcyjnym. Sugeruje się, że w celu zapewnienia odpowiedniej stabilności powinna być użyta wersja CGI. Następna część rozdziału opisuje użycie PHP jako CGI. Użycie PHP jako CGI Jeżeli nie masz zainstalowanego serwera WWW obsługującego moduły ISAPI lub istnieją inne powody wyboru wersji CGI, należy przeprowadzić instalację PHP jako CGI. Instalacja jest bardzo podobna do tej przedstawionej powyżej, różnice występują jedynie przy mapowaniu rozszerzeń. Zamiast wybierać bibliotekę .dll ISAPI, należy wybrać plik php.exe. Serwer IIS lub PWS wysyła parametry do pliku wykonywalnego CGI, więc oprócz nazwy pliku wykonywalnego należy podać opcje linii poleceń %s %s. Jest to pokazane na rysunku 1.4. dla rozszerzenia .php4. Różne serwery WWW mają różne metody określenia mapowania rozszerzeń. Do Apache dla Windows istnieje świetny podręcznik dostępny pod adresem www.php.net/manual/config-apache-nt.html. Zasoby sieci na temat instalacji PHP na różnych serwerach WWW dla Windows można odszukać za pomocą wyszukiwarki umieszczonej na witrynie www.php.net. Inne instalacje binarne Niektóre instalacje Uniksa posiadają instalację binarną PHP zintegrowaną z instalacją serwera WWW. Niektórzy dostawcy, na przykład Red Hat, udostępniają również binarną instalację na swoich witrynach. Instalacja taka jest wykonana w formie plików RPM (Red Hat Package Manager). Zaletą użycia plików RPM jest łatwość instalacji. Nie trzeba martwić się szczegółami procesu kompilacji, ponieważ plik RPM zawiera gotową do użycia odpowiednio skompilowaną wersję programu. Wadą jest to, że z powodu wielu możliwych wariantów platform dla Uniksa, problemem dla początkujących może być nawet wybór właściwego pliku. Poza tym w pliku RPM nie zawsze są ustawione wszystkie potrzebne opcje konfiguracji, niezbędne do prawidłowego działania programu. Jeżeli masz plik RPM z PHP, możesz go zainstalować wydając polecenie rpm -i.
Powoduje to zainstalowanie plików binarnych do katalogów określonych przez twórcę pliku RPM. Dla
większości użytkowników katalogi te są prawidłowe. Po instalacji należy ręcznie skonfigurować serwer WWW
tak, aby korzystał z zainstalowanych właśnie plików binarnych PHP. Poniżej przedstawimy sposób konfiguracji
Apache. Inne serwery WWW wymagają przeprowadzenia podobnych czynności.
Niezależnie od tego, czy PHP będzie działało jako program CGI czy w postaci modułu, pierwszy krok
konfiguracji jest zawsze taki sam. Trzeba utworzyć skojarzenie pomiędzy rozszerzeniem pliku a wewnętrznym
typem stosowanym przez serwer. Robi się to dodając do pliku konfiguracyjnego następujące linie:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .inc
Dyrektywy te powodują, że Apache uważa wszystkie pliki z rozszerzeniami .php, .phtml i .inc jako pliki
typu application/x-httpd-php. Do przetwarzania tego typu plików wykorzystywane jest PHP.
Zakładając, że masz zainstalowane PHP w postaci modułu Apache, kolejnym krokiem będzie modyfikacja
pliku konfiguracyjnego httpd.conf tak, aby Apache załadował moduł PHP:
LoadModule php4_module libexec/libphp4.so
Jeżeli zainstalowana została wersja CGI, należy wprowadzić nieco inne zmiany do pliku konfiguracji
httpd.conf. Dyrektywa konfiguracji jest podobna do poprzedniej, ale odwołuje się do programu w postaci pliku
wykonywalnego.:
Action application/x-httpd-php /cgi-bin/php
Dyrektywa Action definiuje typ pliku powodujący uruchomienie PHP po otrzymaniu żądania ściągnięcia
strony z serwera WWW. Oczywiście należy podać właściwą ścieżkę do pliku wykonywalnego.
Po wprowadzeniu zmian należy ponownie uruchomić serwer WWW, aby zaczęły działać nowe
ustawienia. Serwer Apache można zrestartować za pomocą polecenia:
/ścieżka/do/apachectl restart
Aby przetestować konfigurację można wczytać za pomocą przeglądarki skrypt testowy, przedstawiony na
wydruku 1.1.
Binarna dystrybucja PHP ułatwia szybkie rozpoczęcie pracy z PHP w Uniksach, ale może ona sprawiać
problemy. Z powodu istnienia wielu wariantów Uniksów, znalezienie gotowej wersji działającej na określonym
PHP – Kompendium wiedzy15 systemie może być czasami trudne. W wielu przypadkach będzie to bardziej czasochłonne niż ściągnięcie kodu źródłowego, skompilowanie i zainstalowanie PHP. Proces ten zostanie opisany w kolejnej części rozdziału. Kompilowanie PHP Jeżeli chcesz skorzystać z elastyczności własnej instalacji PHP lub jeżeli przewidujesz dodawanie własnych rozszerzeń do języka PHP (opisane w rozdziale 11. „Ponowne wykorzystanie kodu”), musisz dokładnie poznać proces kompilowania PHP. Jeżeli pracujesz na platformie, dla której nie ma instalacji binarnej, możesz nie mieć innego wyboru jak tylko samodzielnie kompilować PHP. Kompilowanie PHP w Uniksach W tej części rozdziału przedstawione zostaną informacje na temat kompilowania PHP na platformie Unix. Należy pamiętać, że Unix określa całą rodzinę systemów, np.: Linux, BSD, Solaris i inne. Oczywiście systemy te różnią się między sobą, ale wiele z kroków niezbędnych do kompilacji PHP jest identycznych. Więcej informacji na temat określonej platformy można odszukać za pomocą wyszukiwarki dostępnej na witrynie www.php.net. Dla każdej platformy istnieje kilka sposobów kompilacji PHP. Jeżeli serwerem WWW jest Apache, można skompilować PHP jako plik wykonywalny, jako moduł ładowany dynamicznie lub jako statyczną bibliotekę. Jeżeli nie korzystasz z Apache, należy odszukać w dokumentacji PHP i serwera WWW szczegóły postępowania. Przy okazji możemy zarekomendować korzystanie z PHP w postaci dynamicznie ładowanego modułu, jako najlepsze rozwiązanie dla większości aplikacji. Jeżeli PHP zostanie statycznie dołączony do Apache, każda zmiana konfiguracji wymaga większego nakładu pracy. W przypadku modułu CGI, występują problemy z bezpieczeństwem. W kolejnych częściach zakładamy, że ściągnąłeś już źródła PHP i rozpakowałeś je. Proces kompilacji jest właściwie taki sam dla każdego typu pliku wynikowego. Na początku trzeba uruchomić skrypt configure, który ustawia opcje kompilacji. Następnie przy pomocy narzędzia make przeprowadza się kompilację. Na koniec trzeba zainstalować gotowe PHP i zrestartować serwer WWW. Informacje na temat skryptu konfiguracyjnego są przedstawione w części poświęconej kompilowaniu modułu CGI, więc zaleca się przeczytanie tego fragmentu jako wprowadzenia. Kompilacja modułu CGI Kompilacja PHP do postaci wykonywalnego modułu CGI jest najprostszą metodą kompilacji i dobrym rozwiązaniem, jeżeli nigdy wcześniej nie kompilowałeś programów dla Uniksa. Poniżej przedstawiona jest kompletna lista operacji jakie należy wykonać. Niektóre z nich nie są obowiązkowe. Operacje opcjonalne są zaznaczone czcionką pochyłą. Odwołanie do powinno być zamienione na nazwę twojego katalogu
bazowego PHP.
cd rm config.cache
make clean
./configure
make
make install
Wykonanie tych operacji spowoduje usunięcie podręcznych danych konfiguracji, usunięcie plików
wynikowych a następnie skompilowanie PHP do postaci CGI. Jest to najprostsza metoda kompilacji, przytoczona
jedynie jako przykład. W prawdziwej kompilacji do skryptu konfiguracyjnego dołącza się opcje określające
atrybuty PHP.
Druga i trzecia linia jest nieobowiązkowa, ponieważ polecenia w nich umieszczone są używane jedynie do
wyczyszczenia poprzedniej konfiguracji i pozostałości po poprzedniej kompilacji. Jeżeli wcześniej nie
konfigurowałeś ani nie kompilowałeś PHP, nie są one potrzebne. Można również nie korzystać z tych opcji przy
kompilacji PHP, choć czasami ich wykonanie jest niezbędne. Jeżeli wprowadzane są poważne zmiany w
konfiguracji lub zmieniasz typ kompilacji z CGI na inny, może okazać się, że wykonanie czyszczenia jest
niezbędne, aby kompilacja przebiegła prawidłowo. W zależności od szybkości komputera, na którym
wykonywana jest kompilacja, przeprowadzenie całej konfiguracji i kompilacji może zająć dosyć dużo czasu.
Rozdział 1 – Kompilacja i instalowanie PHP 16 Pozostawienie zapisanych opcji konfiguracji oraz obiektów binarnych spowoduje znaczne skrócenie czasu tworzenia PHP. Wszyscy, którzy nigdy nie przeprowadzali takiego procesu powinni wiedzieć, że skrypt konfiguracyjny poszukuje w systemie narzędzi, plików i innych danych systemowych. Następnie na podstawie tych danych tworzy specyficzny dla systemu skrypt za pomocą można skompilować kod. Jeżeli w czasie działania skryptu konfiguracyjnego nastąpi awaria, często zdarza się, że wymagany plik lub narzędzie nie jest odnajdywane lub niewłaściwie skonfigurowane. Po zakończeniu działania skryptu konfiguracyjnego tworzony jest plik tymczasowy config.cache zawierający szczegóły na temat systemu, więc badanie systemu nie musi być powtarzane przy ponownym uruchomieniu konfiguracji. Jeżeli wprowadzisz duże zmiany do konfiguracji systemu, musisz usunąć plik tymczasowy przed kolejnym uruchomieniem skryptu konfiguracyjnego. W ten sposób upewniamy się, że zmiany te zostaną wykryte. Po wykonaniu wszystkich podanych poleceń zostanie utworzony nowy plik wykonywalny — php. Można przetestować poprawność kompilacji za pomocą następującego polecenia: php < /dev/null Jeżeli zobaczysz wynik podobny do poniżej przedstawionego, udało ci się poprawnie skompilować i zainstalować PHP w postaci CGI. X-Powered-By: PHP/4.0.2 Content-type: text/html Trzeba zauważyć, że skompilowana właśnie wersja PHP nie posiada funkcji, które być może będziemy chcieli wykorzystywać w aplikacjach, ponieważ została skompilowana z użyciem tylko ustawień domyślnych. Trzeba ponownie uruchomić skrypt konfiguracyjny, ustawić opcje potrzebne w aplikacji a następnie ponownie skompilować i zainstalować PHP. Pożyteczną cechą zestawu domyślnych ustawień jest to, że dołączone jest do niego wiele często używanych opcji konfiguracji, w tym obsługa bazy danych MySQL, sesji i wiele, wiele innych. Oznacza to, że przytoczone polecenia umożliwiają skompilowanie PHP, który pozwala na rozpoczęcie nauki języka. Jeżeli potrzebujesz obsługi innej bazy danych lub innego rozszerzenia, trzeba dodać odpowiednią opcję konfiguracji. Lista dostępnych opcji jest wyświetlana po wpisaniu: ./configure --help Większość opcji konfiguracji wpływających na dostępne funkcje PHP ma postać --enable-FUNKCJA lub -- with-PAKIET. Aby dodać funkcję do PHP należy użyć jednej z poniższych form: --enable-FUNKCJA --enable-FUNKCJA=yes Aby usunąć funkcję z PHP, należy użyć: --disable-FUNKCJA --enable-FUNKCJA=no Pełna lista opcji konfiguracji znajduje się w skorowidzu na końcu książki. Funkcje korzystające ze składni --enable są to zwykle wbudowane opcje PHP, takie jak możliwość wykorzystywania krótkich znaczników lub obsługa protokołu FTP. Pakiety są to zwykle moduły zewnętrzne, które mogą być dołączone do PHP, na przykład obsługa bazy danych Oracle lub Javy. Te własności wymagają zwykle wskazania zewnętrznego pliku i do jego włączania korzysta się z następującego zapisu: --with-PAKIET=/ścieżka/do/pakietu Aby wyłączyć pakiet należy użyć poleceń: --with-PAKIET=no --without-PAKIET Jako przykład przedstawimy następującą konfigurację: ./configure --with-apxs=/www/bin/apxs --with-java --with-cybercash=/home/blake/mck-3.2.0.6-i586-pc-linux- gnulibc2.1 --withunixODBC=/usr/local/unixODBC --disable-debug --enabletrack-vars -- enable-fin-funcs --with- snmp=/home/blake/ucd-snmp-4.1.2 --enable-ucd-snmp-hack Powyższe wywołanie konfiguracji powoduje dodanie do PHP obsługi Javy, CyberCash, SNMP (Simple Network Management Protocol) oraz unixODBC. Nie zostało podane położenie katalogu Javy, więc skrypt konfiguracyjny użyje domyślnej ścieżki do katalogu z tym pakietem. Dodatkowo została dodana opcja -with- apxs, która powoduje, że PHP jest kompilowane do postaci dynamicznie ładowanego modułu Apache a nie jako program typu CGI. Później omówimy to zagadnienie dokładniej. W przedstawianej konfiguracji wyłączono informacje dla debuggera oraz włączono opcje track-vars, fin-funcs oraz ucd-snmp-hack. Opcja fin-funcs powoduje dodanie własnego modułu rozszerzeń opisanego w dalszej części książki (rozdział 11.), natomiast pozostałe są standardowymi elementami konfiguracji opisanymi w skorowidzu na końcu książki.
PHP – Kompendium wiedzy17 Wiele z pakietów oprogramowania jakie chcemy dodać do PHP musi być osobno zainstalowane. Więcej informacji na temat tego, gdzie można zaopatrzyć się w potrzebne pakiety, można znaleźć w dokumentacji na witrynie www.php.net. Po utworzeniu PHP w postaci CGI, należy skonfigurować serwer WWW do współpracy z nowym programem. Aby skonfigurować serwer Apache należy dodać następujące dyrektywy do pliku httpd.conf: AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php .inc Action application/x-httpd-php /cgi-bin/php Pierwsze trzy dyrektywy definiują zawartość plików z rozszerzeniami php, phtml i inc jako typ application/x-httpd-php. Ostatnia dyrektywa powoduje wysłanie wszystkich plików tego typu do pliku wykonywalnego php. Zakładamy, że plik ten jest umieszczony w katalogu cgi-bin serwera WWW. Dyrektywy te są minimum wymaganym do konfiguracji PHP w Apache, ale ta sama czynność może być zrealizowana jeszcze na kilka sposobów. Więcej szczegółów można znaleźć w dokumentacji do Apache. Kompilacja PHP jako statycznie dołączanego modułu Apache Apache pozwala na statyczne dołączanie modułów bezpośrednio do pliku binarnego Apache. W porównaniu z wersją CGI użycie modułu pozwala poprawić wydajność aplikacji oraz zwiększyć bezpieczeństwo systemu,. Wadą tej metody jest konieczność powtórnej kompilacji Apache po każdej kompilacji PHP. Może być to czasochłonne i frustrujące, ponieważ w przypadku wystąpienia kłopotów z konfiguracją PHP, Apache może również przestać działać. Jednak niektóre aplikacje wymagają zastosowania statycznie dołączanego modułu Apache, opiszemy teraz sposób jego tworzenia. Przed skonfigurowaniem i skompilowaniem PHP niezbędne jest skonfigurowanie Apache. Zakładamy, że na dysku jest już katalog z kodem źródłowym Apache. Aby skonfigurować Apache, należy użyć następujących poleceń: cd./configure
Po zakończeniu działania tego skryptu można zająć się konfigurowaniem i kompilowaniem PHP.
cd ./configure --with-apache=make
make install
Opcja --with-apache powoduje kompilację do postaci statycznej biblioteki oraz pozwala podać katalog z
plikami źródłowymi Apache. Następnie należy skompilować serwer Apache za pomocą poleceń:
cd ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
make
make install
Dyrektywa prefix może być inna w twoim systemie, ponieważ wskazuje ona katalog gdzie zostaną
zainstalowane pliki zależne od architektury. Teraz należy uruchomić serwer Apache i przy wykorzystaniu skryptu
testowego z wydruku 1.1. sprawdzić poprawność konfiguracji.
Aby Apache prawidłowo przetwarzał pliki PHP należy odpowiednio zmodyfikować plik httpd.conf. W
zależności od rozszerzeń jakie zostały wybrane do reprezentowania plików PHP, należy wprowadzić odpowiednie
zmiany. I tym razem standardowa konfiguracja wygląda następująco:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .inc
Przedstawiony opis przedstawia jedynie bardzo prostą wersję PHP, która zawiera jedynie opcje domyślne.
Więcej informacji o zmianie konfiguracji kompilacji PHP znajduje się w części na temat kompilacji wersji CGI.
Kompilacja PHP do postaci dynamicznie ładowanego modułu Apache
Sposób kompilacji PHP do postaci dynamicznie ładowanego modułu Apache nie różni się zbytnio od
innych przedstawionych do tej pory metod. Zaletą tej metody jest możliwość kompilacji PHP bez konieczności
równoczesnej kompilacji Apache. Również niektóre moduły rozszerzeń (na przykład Java) wymagają do
poprawnej pracy, aby PHP był skompilowany do postaci dynamicznie ładowanego modułu. Aby Apache
obsługiwał dynamicznie ładowane moduły należy go przekompilować z następującymi opcjami konfiguracji:
cd make clean
./configure --enable-module=so --enable-rule=SHARED_CORE --prefix=/www
make
Rozdział 1 – Kompilacja i instalowanie PHP 18 make install Oprócz kompilacji Apache przedstawione polecenia przygotowują skrypt apxs, który jest niezbędny do kompilacji dynamicznego modułu PHP. Jeżeli wystąpią kłopoty ze skryptem apxs można powtórnie wykonać przedstawione polecenia, co spowoduje ponowne wygenerowanie prawidłowo skonfigurowanego skryptu. Po skompilowaniu Apache z obsługą dynamicznie ładowanych modułów, należy skompilować PHP w następujący sposób: cdmake clean
rm config.cache
./configure --with-apxs=/www/bin/apxs (pozostałe opcje)
make
make install
Polecenia porządkujące są zalecane, jeżeli PHP był już kompilowany w innej konfiguracji. Ścieżka podana
w dyrektywie konfiguracji --with-apxs powinna być pełną ścieżką do skryptu apxs na serwerze.
Tak jak w przypadku poprzednich sposobów kompilacji należy prawidłowo skonfigurować Apache, aby
przetwarzał pliki PHP. Po zmodyfikowaniu konfiguracji należy uruchomić Apache i wywołać skrypt testowy.
Podsumowanie kompilacji PHP w systemach Unix
Celem tego fragmentu książki nie było podawanie szczegółowego i wyczerpującego opisu wszystkich
możliwych opcji konfiguracji, ale pokazanie podstawowych metod kompilowania PHP do różnych postaci. Jeżeli
nie kompilowałeś wcześniej PHP, powinieneś na początku spróbować skompilować podstawową konfigurację, a
później uzupełniać potrzebne opcje. Po zapoznaniu się z procesem kompilacji jest już bardzo łatwo testować
różne konfiguracje i dodawać niestandardowe rozszerzenia.
Po skompilowaniu PHP i sprawdzeniu, czy działa z Apache, można zapoznać się z opcjami konfiguracji,
które można ustawiać bez potrzeby ponownej kompilacji. Zostały one opisane w dalszej części rozdziału.
Kompilowanie PHP w środowisku Windows
Kompilowanie PHP dla Windows jest na początku bardziej skomplikowanym procesem niż kompilacja
PHP dla Uniksa. Dokumentacja zaleca użycie Visual C++ wersja 6, choć wersja 5 również powinna działać.
Próbowałem sprawdzić, czy można użyć pakietu Borland C++ Builder, ale nie udało mi się tego zrobić. Problem
stanowiły prekompilowane pliki lib, ponieważ Microsoft i Borland korzystają z różnych formatów tych plików.
Prawdopodobnie można zastosować kompilator Borlanda, ale trzeba wcześniej przekompilować wszystkie
biblioteki. W poniższym opisie zakładamy użycie Visual C++.
Przed rozpoczęciem pracy należy się zaopatrzyć w kilka programów i plików pomocniczych. Tabela 1.1.
zawiera wszystkie dodatkowe programy oraz adresy w Internecie, gdzie były dostępne w czasie pisania książki.
Tabela 1.1. Dodatkowe pliki pomocnicze i ich adresy w Sieci
Program Położenie
Kod źródłowy PHP www.php.net/download.php
Pakiet Cygwin http://sources.redhat.con/cygwin/
Narzędzia do kompilacji PHP dla
Win32
www.php.net/extra/win32build.zip
Obsługa BCMath www.php.net/version4/downloads/num
ber.tar.gz
Zastępnik pliku resolv.lib www.php.net/version4/downloads/bind
lib_w32.zip
Pakiet Cygwin zawiera popularne narzędzia GNU, takie jak gcc, make i bison. Niektóre z tych programów
są wykorzystywane w procesie kompilacji, więc trzeba wcześniej zainstalować ten pakiet. Inne potrzebne pliki są
integralną częścią dystrybucji PHP. Kod źródłowy PHP jest identyczny jak ten, który jest używany do utworzenia
wersji dla Uniksa.
Potrzebny jest również program do rozpakowywania plików. Ja używam programu Winzip, ponieważ bez
problemu radzi sobie z plikami .tar.gz. Również inne programy posiadają takie możliwości. Na początku należy
zainstalować narzędzia Cygwin. Trzeba ręcznie dodać zmienną środowiska wskazując na położenie plików
Cygwin. Jeżeli pracujesz w Windows 95, trzeba dodać tą zmienną ręcznie do pliku autoexec.bat. W Windows NT
należy kliknąć prawym przyciskiem myszy ikonę Mój komputer i wybrać z menu Właściwości. Teraz trzeba
PHP – Kompendium wiedzy19 kliknąć zakładkę Środowisko i dodać nową zmienną, tak jak jest to pokazane na rysunku 1.5. Zmienna nazywa się CYGWIN a jej wartością jest ścieżka do katalogu, gdzie zainstalowane są narzędzia Cygwin. Rysunek 1.5. Ustawienie zmiennej środowiskowej CYGWIN Następnie utwórz katalog i rozpakuj do niego zawartość pliku win32build.zip. Uruchom Visual C++ i wybierz Options z menu Tools. Teraz wybierz zakładkę Directories (rysunek 1.6.) i przy użyciu listy rozwijalnej opisanej Show directories for, wybierz opcję Executable files i dodaj katalog z plikami Cygwin. Teraz z listy rozwijalnej wybierz Include files i dodaj katalog z win32build\include (rysunek 1.6.). Na koniec wybierz Library files i dodaj katalog win32build\lib. Od tej pory kompilator Visual C++ będzie mógł korzystać z zainstalowanych narzędzi i plików. Rysunek 1.6. Ustawienie katalogów w Visual C++ Kolejnym krokiem będzie skompilowanie nowej wersji pliku resolv.lib. Najpierw utwórz nowy katalog i rozpakuj do niego pliki z archiwum bindlib_w32.zip. W Visual C++ otwórz projekt bindlib.dsp. Z menu Build wybierz Set Active Project Configuration i wybierz wersję handlową biblioteki lub wersję do uruchamiania. Naciśnij klawisz F7, aby skompilować projekt. Po zakończeniu kompilacji należy skopiować plik resolv.lib do katalogu win32build\lib. Następnie rozpakuj źródła PHP i plik number.tar.gz za pomocą zewnętrznego programu lub narzędzia tar z pakietu Cygwin. Skopiuj rozpakowane pliki number.c i number.h do katalogu ext/bcmath w katalogu z kodem źródłowym PHP.
Rozdział 1 – Kompilacja i instalowanie PHP 20 Jeżeli wykonałeś wszystkie opisane wcześniej czynności, jesteś gotowy do kompilacji PHP. Uruchom Visual C++ i otwórz plik projektu php4ts.dsp, znajdujący się w podkatalogu win32 katalogu z kodem źródłowym PHP. Projekt ten zawiera kilka konfiguracji. Najłatwiej jest rozpocząć od skompilowania wersji CGI wybierając wersję handlową lub wersję z danymi dla debuggera, tak jak jest to pokazane na rysunku 1.7. Rysunek 1.7. Wybór konfiguracji dla wersji CGI Skompiluj projekt i jeżeli wszystko pójdzie dobrze posiadasz już własną wersję PHP. Jeżeli potrzebujesz wersji PHP jako ISAPI lub NSAPI, wystarczy wybrać odpowiednią konfigurację dla kompilacji i ponownie skompilować projekt. Jak wspomniałem wcześniej, najtrudniejszą częścią było wstępne przygotowanie środowiska. Gdy wszystko jest już gotowe, cała reszta jest tak samo prosta jak w Uniksie. Podsumowanie kompilacji PHP Kompilowanie wersji PHP dla Windows jest za pierwszym razem dużo trudniejsze od wersji dla Uniksa, ale gdy wszystkie potrzebne dodatki zostaną odpowiednio skonfigurowane, jest już proste. Gdy poznałeś już proces kompilowania PHP dla obu platform możesz tworzyć wysoce specjalizowane wersje PHP, spełniających precyzyjnie potrzeby konkretnej witryny. Dokładna wiedza na temat procesu kompilacji PHP jest również niezbędna, aby móc tworzyć rozszerzenia PHP. Zagadnienie to zostało opisane w rozdziale 11. Konfigurowanie PHP Niezależnie od platformy na której działa PHP, sposób jego konfigurowania jest taki sam. Wykorzystuje się w tym celu plik php.ini. Plik ten jest dostarczany w dystrybucji PHP jako php.ini-dist i php.ini-optimized. Jeżeli nie znasz dobrze opcji konfiguracji, powinieneś rozpocząć do podstawowych ustawień z pliku php.ini-dist. Pierwszym krokiem będzie skopiowanie i zmiana nazwy pliku. Plik powinien być nazwany php.ini i skopiowany do katalogu zależnego od używanej platformy. W tabeli 1.2. zamieszczone są podstawowe warianty. Tabela 1.2. Platformy PHP i położenie pliku php.ini Platforma Położenie pliku php.ini Windows Katalog zwykle \windows w Windows 95 i \winnt w
Windows NT
Unix Można to sprawdzić za pomocą funkcji phpinfo(), ale zwykle jest
to /usr/local/lib.
Po umieszczeniu pliku konfiguracyjnego w odpowiednim katalogu, należy do niego wprowadzić
odpowiednie zmiany. Plik php.ini jest podzielony na sekcje, rozpoczynające się od linii [nazwa_sekcji] podobnie,
jak w standardowych plikach ini systemu Windows. Plik ten zawiera obszerne komentarze opisujące
przeznaczenie sekcji i opcji konfiguracji. W pozostałej części książki czasami będą przytaczane opcje niezbędne
do uruchomienia przykładów. Zwykle przykład taki zawiera nazwę sekcji, nazwę opcji oraz wartość. Aby
wprowadzić zmiany najczęściej zmienia się plik php.ini i ponownie uruchamia Apache, ale istnieją również inne
mechanizmy zmiany opcji. Mechanizmy te opisane zostaną w późniejszej części rozdziału.
Korzystanie z pliku php.ini
Zalecaną metodą zmiany konfiguracji jest modyfikacja pliku php.ini i ponowne uruchomienie serwera
WWW. Jeżeli korzystasz z PHP w postaci programu CGI nie musisz restartować serwera, ponieważ plik php.ini
jest odczytywany za każdym uruchomieniem programu CGI. Dla przykładu można zmienić sposób raportowania
błędów przez PHP, korzystając z odpowiednich opcji konfiguracji. Opcje te mają następujące wartości domyślne:
PHP – Kompendium wiedzy21 error_reporting = E_ALL & ~E_NOTICE ; Pokaż wszystkie błędy oprócz informacji display_errors = On ; Wypisuj błędy (jako część wynikowego HTML) log_errors = Off ; Zapisuj błędy do pliku błędów error_log = syslog ; Zapisuj błędy do dziennika systemowego Pierwsza opcja powoduje generowanie komunikatów dla wszystkich typów błędów poza typem E_NOTICE. Następna linia powoduje wstawianie komunikatów błędów do wynikowego kodu HTML. Następne dwa wiersze powodują zapisywanie komunikatów błędów w pliku. Załóżmy, że w instalacji produkcyjnej nie chcemy wyświetlać błędów, a zamiast tego błędy będą zapisywane do określonego pliku. Można to zrealizować zmieniając konfigurację w następujący sposób: error_reporting = E_ALL ; Pokaż wszystkie błędy display_errors = Off ; log_errors = On ; Zapisuj błędy error_log = /tmp/php_log ; Zapisuj błędy do pliku /tmp/php_log Taka konfiguracja powoduje, że wszystkie komunikaty błędów, w tym informacje, będą zapisywane w pliku /tmp/php_log. Oczywiście plik ten powinien mieć odpowiednio ustawione prawa dostępu, aby serwer WWW mógł zapisać w nim dane. Z powodu dużej ilości opcji konfiguracji, nie zostaną tu przedstawione wszystkie możliwe opcje. Pełna lista znajduje się w skorowidzu na końcu książki. Tutaj przedstawione zostaną jedynie ogólne sposoby wykorzystywania tych opcji. Aby zmienić opcję konfiguracji, należy otworzyć w edytorze plik php.ini i odszukać opcję. Zwykle znajduje się tam sporo komentarzy opisujących możliwe wartości danej opcji. Inne metody zmiany konfiguracji PHP Istnieją dwie metody zmiany konfiguracji PHP bez konieczności modyfikacji pliku php.ini. Pierwszym sposobem jest wstawienie tych opcji do pliku konfiguracyjnego Apache httpd.conf lub do pliku .htaccess. Pierwsza metoda jest użyteczna, jeżeli chcemy mieć różne ustawienia PHP dla różnych serwerów wirtualnych lub różnych katalogów. Druga metoda jest wykorzystywana, gdy nie jest możliwy dostęp do plików php.ini i httpd.conf. Jest to częsta sytuacja, witryna jest umieszczona na dzierżawionym serwerze zewnętrznej firmy. Jest to jednak najmniej zalecana metoda, ponieważ plik .htaccess jest wczytywany i analizowany za każdym odwołaniem do stron znajdujących się w tym katalogu. Powoduje to znaczne spowolnienie serwera WWW. W obu tych przypadkach sposób zmiany konfiguracji PHP jest tak sam. Należy użyć dyrektyw konfiguracji php_value i php_flag do ustawienia potrzebnych opcji. Na przykład, aby ustawić poprzednio opisane opcje konfigurujące sposób raportowania błędów, należy użyć następujących dyrektyw Apache:ServerAdmin admin@server.net
DocumentRoot /www/hosts/wwwprojects/
ServerName www.testserver.com
php_value error_reporting 2047
php_flag display_errors off
php_flag log_errors on
php_value error_log /tmp/php_log Umieszczenie tych ustawień w pliku httpd.conf spowoduje, że zostanie ustawiony sposób raportowania
błędów dla serwera wirtualnego o nazwie www.testserver.com. Jeżeli na tej samej maszynie istnieją inne serwery
wirtualne, używają one konfiguracji określonej przez plik php.ini. Pozwala to na posiadanie różnych konfiguracji
PHP dla różnych serwerów wirtualnych lub katalogów.
Jeżeli musisz zmienić konfigurację PHP a nie masz dostępu do pliku php.ini ani do httpd.conf, możesz
wykorzystać pliki Apache .htaccess. Jest to również użyteczne, jeżeli określony katalog musi mieć inne
ustawienia konfiguracji niż reszta witryny. Na przykład, można zmienić sposób raportowania błędów dla jednego
katalogu na czas uruchamiania skryptów w nim się znajdujących. W tym celu należy stworzyć plik .htaccess z
następującą zawartością:
php_value error_reporting 2039
php_flag log_errors off
php_flag display_errors on
Należy zauważyć, że w obu przykładowych plikach konfiguracyjnych Apache wartość zmiennej
konfiguracji error_reporting jest ustawiana za pomocą wartości numerycznej a nie stałej. Jest o jedyny sposób
poprawnego ustawienia wartości. Należy pamiętać, że konfigurując PHP poprzez dyrektywy Apache nie można
używać jako wartości żadnych stałych PHP. W przeciwnym wypadku efekty mogą być niespodziewane.
Aby zilustrować potęgę dostępnego mechanizmu konfiguracji na rysunku 1.8. przedstawiony został
schemat możliwości konfiguracji środowiska PHP.
Rozdział 1 – Kompilacja i instalowanie PHP 22 Rysunek 1.8. Elastyczność konfiguracji z zastosowaniem php.ini oraz plików konfiguracyjnych Apache Podsumowanie W tym rozdziale przedstawiono kilka informacji niezbędnych do rozpoczęcia pracy z PHP. Z powodu elastyczności i dużej ilości obsługiwanych platform niemożliwe jest szczegółowe opisanie wszystkich dostępnych konfiguracji. Korzystając jednak z informacji umieszczonych w tej książce, oraz na witrynie www.php.net powinieneś być w stanie zainstalować i skonfigurować PHP na twojej platformie. Trzeba zauważyć, że PHP posiada wiele własnych funkcji zmieniających ustawienia konfiguracji. Przykładami takich funkcji są error_reporting() oraz set_time_limit(). Więcej informacji na temat tych funkcji można znaleźć w skorowidzu na końcu książki.
Rozdział 2. Język Wstęp W rozdziale tym znajduje się zwięzły opis języka programowania PHP. Jak wspomniałem we wstępie do książki nie jest moją intencją poświęcać zbyt wiele czasu na omawianiu ogólnych koncepcji programowania. W tym rozdziale znajduje się opis składni podstawowych konstrukcji programowania, na przykład zmiennych, stałych i funkcji. Przykłady przytoczone w tym rozdziale nie pokazują najlepszych technik programowania a jedynie ilustrują składnię i użycie omawianych elementów. Pełny opis języka znajduje się w dokumentacji języka dostępnej na witrynie http://www.php.net. Ogólne informacje na temat składni Ponieważ PHP jest zwykle wbudowywany w kod HTML istnieją specjalne znaczniki ograniczające bloki PHP. Użycie tych znaczników jest nazywane czasem wyjściem z trybu HTML. Wydruk 2.1. Sposoby oznaczania bloku kodu PHP w HTML echo "użycie krótkich znaczników PHP do wyjścia z trybu HTML
"; ?>"; ?><% echo "można stosować również znaczniki w stylu ASP
"; %>Pierwsza metoda oznaczania bloków PHP jest dostępna jedynie wtedy, gdy uaktywnione są krótkie znaczniki. Aby to zrobić należy użyć funkcji short_tags(), włączyć w pliku konfiguracyjnym opcję short_tag_open lub skompilować PHP z opcją -enable-short-tags. Znaczniki w stylu ASP są dostępne jedynie wtedy, gdy uaktywniona jest opcja konfiguracji asp_tags. Więcej informacji na temat kompilowania i konfiguracji PHP znajduje się w rozdziałach „Kompilacja i instalowanie PHP” oraz dodatku D - „Opcje konfiguracji”. PHP jest syntaktycznie bardzo podobny do C. Na przykład, instrukcje są oddzielone średnikiem. Znacznik ?> jest niejawnym końcem instrukcji, więc poniższe przykłady są poprawne składniowo: Wydruk 2.2. Koniec instrukcji"; ?>" ?>Komentarze w PHP można oznaczać symbolami komentarzy pochodzącymi z C, C++ lub stosowanych w skryptach Uniksa. Komentarze jednoliniowe komentują tekst do końca linii lub do końca bieżącego bloku PHP w zależności od tego, co będzie pierwsze. Nie można zagłębiać wielowierszowych komentarzy w stylu C. Wydruk 2.3. Komentarze"; // To jest jednowierszowy komentarz w stylu C++ /* To jest wielowierszowy blok komentarza */ echo "Witamy ponownie.
"; # To jest komentarz w stylu skryptów Uniksa ?>To wyświetli nic.
Rozdział 2 – Język 24 /* echo "A tutaj mamy problem."; /* Komentarz ten jest nieprawidłowy */ */ ?>Typy PHP posiada następujące typy: liczby zmiennoprzecinkowe, liczby całkowite, ciągi, tablice i obiekty. Typ zmiennej jest ustalany w oparciu o kontekst w jakim jest użyta zmienna i nie jest on jawnie ustalany przez programistę. Jest to ważna cecha o której należy pamiętać podczas programowania aplikacji PHP, ponieważ niejawna konwersja typów może spowodować trudne do odnalezienia błędy. Na przykład poniższa instrukcja jest prawidłowa i spowoduje wyświetlenie liczby 9: print( 3* "3 małe świnki"); Aby można było zapanować nad typami, PHP posiada funkcje gettype() i settype() oraz kilka funkcji przeznaczonych dla określonych typów, na przykład is_integer() lub is_array(). W skorowidzu funkcji na końcu książki znajduje się pełne omówienie tych funkcji. Teraz zostanie opisany każdy z typów zmiennych (oprócz obiektów). Obiekty PHP zostaną opisane w dalszej części rozdziału. Liczby — całkowite i zmiennoprzecinkowe Liczby całkowite można podawać używając notacji dziesiętnej, ósemkowej i szesnastkowej. Liczby zmiennoprzecinkowe można podawać używając notacji zwykłej lub zapisu naukowego. Na poniższym wydruku pokazana jest składnia PHP dla wszystkich tych notacji. Wydruk 2.4. Reprezentacja liczb" ); ?>Ciągi Ciągi w PHP są ograniczane apostrofami (') lub cudzysłowami ("). Zapisy te różnią się sposobem interpretacji ciągu. Jeżeli ciąg jest otoczony cudzysłowami, zmienne zapisane w ciągu zostają zamienione na ich wartości. Aby zapisać znaki specjalne w ciągach otoczonych cudzysłowami, należy użyć znaku lewego ukośnika (\), tak jak zostało to pokazane w tabeli 2.1. Tabela 2.1. Znaki specjalne w ciągach otoczonych cudzysłowami Sekwencja znaków Znaczenie \n nowa linia \r powrót karetki (CR) \t tabulacja \\ lewy ukośnik \" cudzysłów \$ znak dolara W ciągach otoczonych apostrofami zmienne nie są zastępowane. Jedynymi dopuszczalnymi sekwencjami sterującymi są te oznaczające lewy ukośnik (\\) i apostrof (\'). Sekwencje te pozwalają na wpisanie do ciągu znaku apostrofu i lewego ukośnika. Ciągi mogą być łączone przy użyciu operatora kropki (.). Dokładniej jest to opisane w części rozdziału na temat operatorów. Podobnie jak w języku C, mamy dostęp do poszczególnych znaków ciągu, traktując go jak tablicę znaków. Wydruk 2.5. Przykład operacji na ciągach
PHP – Kompendium wiedzy25 $aStr1 = "To jest zwykły ciąg."; print( "$aStr1
" ); $aStr2 = "Thatcher"; print( "$aStr2
" ); $aStr3 = "Nazywam się $aStr2"; // $aStr3 = "Nazywam się Thatcher" print( "$aStr3
" ); $aStr4 = "Nazywam się \$aStr2"; // $aStr4 = "Nazywam się $aStr2" print( "$aStr4
" ); $aStr5 = 'Nie rozwijaj \'$aStr2\''; // $aStr5 = "Nie rozwijaj '$aStr2'" print( "$aStr5
" ); // wypisuje "Nazywam się Thatcher i Nazywam się $aStr2" print( "$aStr3" . " i " . "$aStr4" ); ?>Z powodu ulotnej natury typów w PHP, zmienne mogą zmieniać swój typ w zależności od kontekstu w jakim występują. Liczby mogą być konwertowane niejawnie na ciągi, jeżeli zostaną użyte jako argument operatora operującego na ciągach. Ciągi mogą również zostać skonwertowane na liczby, jeżeli będą użyte w wyrażeniach matematycznych. Jeżeli PHP próbuje skonwertować ciąg na liczbę, korzysta z następujących zasad: Jeżeli ciąg zaczyna się od danych numerycznych, zostaną one skonwertowane na liczbę. Jeżeli ciąg nie zaczyna się prawidłowymi danymi liczbowymi, wartością ciągu będzie zero (0). Jeżeli dane numeryczne zawierają jeden ze znaków .,e lub E, wartość będzie liczbą zmiennoprzecinkową a w przeciwnym przypadku liczbą całkowitą. Prawidłowymi danymi numerycznymi są: opcjonalny znak po którym następuje jedna lub więcej cyfr, opcjonalna kropka dziesiętna oraz opcjonalny znak wykładnika. Znakiem wykładnika jest „e” lub „E”, po którym następuje jedna lub więcej liczb. Wydruk 2.6. Niejawna konwersja pomiędzy ciągiem i liczbą" ); $aVar2 = $aVar . " niejawnie skonwertowane do ciągu"; print( "\$aVar2 = $aVar2, typ = " . gettype( $aVar2 ) . "
" ); $aVar3 = $aVar2 + 1; // niejawna konwersja na liczbę całkowitą print( "\$aVar3 = $aVar3, typ = " . gettype( $aVar3 ) . "
" ); $aVar3 = $aVar2 * 1.1; // niejawna konwersja na liczbę zmiennoprzecinkową print( "\$aVar3 = $aVar3, typ = " . gettype( $aVar3 ) . "
" ); $aNotNumber = "abc"; $aVar4 = $aNotNumber * 1; // próba konwersji na liczbę, zwracane jest 0 print( "\$aVar4 = $aVar4, typ = " . gettype( $aVar4 ) . "
" ); $aIsNumber = "3 małe świnki"; $aVar5 = $aIsNumber + 1; // konwersja $aIsNumber na liczbę 3 print( "\$aVar5 = $aVar5, typ = " . gettype( $aVar5 ) . "
" ); ?>Tablice Tablice w PHP zachowują się zarówno tak jak tablice indeksowane (wektory) oraz jak tablice mieszające (asocjacyjne). PHP pozwala również na tworzenie tablic wielowymiarowych. Z powodu unikalnej konstrukcji tablic w PHP, można indeksować jeden wymiar tablicy wielowymiarowej liczbami a inny w sposób asocjacyjny. Tablice mogą być tworzone przy użyciu funkcji list() lub array() albo poprzez jawne podanie każdej z wartości. W skorowidzu funkcji na końcu książki zostały opisane wszystkie funkcje do manipulacji tablicami. Jednowymiarowe tablice mogą zamieniane w ciągach przez mechanizm zastępowania zmiennych na wartości w sposób identyczny jak wszystkie inne zmienne. W przypadku tablic wielowymiarowych należy użyć nawiasów klamrowych do zaznaczenia indeksów. Poniższy wydruk pokazuje przykłady użycia różnych typów tablic. Wydruk 2.7. Inicjowanie i użycie tablic