Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00497 014125 11055616 na godz. na dobę w sumie
PHP4. Kompendium programisty - książka
PHP4. Kompendium programisty - książka
Autor: Liczba stron: 864
Wydawca: Helion Język publikacji: polski
ISBN: 83-7197-521-X Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).
Korzystając z tej książki, możesz tworzyć w PHP4 aplikacje WWW korzystające z baz danych. Dowiesz się, jak korzystać z nowych rozszerzeń -- sesji, szybszego interpretera oraz rozszerzonej obsługi języków Java i XML -- powodujących, że język ten świetnie nadaje się do tworzenia aplikacji WWW. Niniejsza książka zawiera wiele praktycznych przykładów objaśniających sposoby tworzenia witryn za pomocą szablonów. Podręcznik ten jest przydatny dla każdego zawodowego programisty, gdyż opisuje wszystko -- od instalacji i konfiguracji, do wykorzystywania istniejących fragmentów oprogramowania.

Znajdziesz tu wszelkie informacje potrzebne do:

Żadna inna książka nie zawiera tak obszernego opisu programowania w PHP, uwzględniającego najnowsze funkcje, jak ten nieoceniony przewodnik.
Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TRE(cid:140)CI SPIS TRE(cid:140)CI KATALOG KSI¥flEK KATALOG KSI¥flEK KATALOG ONLINE KATALOG ONLINE ZAM(cid:211)W DRUKOWANY KATALOG ZAM(cid:211)W DRUKOWANY KATALOG TW(cid:211)J KOSZYK TW(cid:211)J KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAM(cid:211)W INFORMACJE ZAM(cid:211)W INFORMACJE O NOWO(cid:140)CIACH O NOWO(cid:140)CIACH ZAM(cid:211)W CENNIK ZAM(cid:211)W CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥flEK ONLINE FRAGMENTY KSI¥flEK ONLINE PHP4. Kompendium programisty Autor: Blake Schwendiman T‡umaczenie: Pawe‡ Gonera, Grzegorz Kowalski ISBN: 83-7197-521-X Tytu‡ orygina‡u: Format: B5, stron: 840 PHP 4 Developer’s Guide Korzystaj„c z tej ksi„¿ki, mo¿esz tworzy(cid:230) w PHP4 aplikacje WWW korzystaj„ce z baz danych. Dowiesz siŒ, jak korzysta(cid:230) z nowych rozszerzeæ (cid:151) sesji, szybszego interpretera oraz rozszerzonej obs‡ugi jŒzyk(cid:243)w Java i XML (cid:151) powoduj„cych, ¿e jŒzyk ten (cid:156)wietnie nadaje siŒ do tworzenia aplikacji WWW. Niniejsza ksi„¿ka zawiera wiele praktycznych przyk‡ad(cid:243)w obja(cid:156)niaj„cych sposoby tworzenia witryn za pomoc„ szablon(cid:243)w. PodrŒcznik ten jest przydatny dla ka¿dego zawodowego programisty, gdy¿ opisuje wszystko (cid:151) od instalacji i konfiguracji, do wykorzystywania istniej„cych fragment(cid:243)w oprogramowania. Znajdziesz tu wszelkie informacje potrzebne do: Poznania nowych funkcji PHP4 Przetwarzania formularzy i kontrolowania poprawno(cid:156)ci danych Oddzielania HTML-a od kodu PHP4 Uruchamiania i ponownego wykorzystywania kodu Korzystania z szablon(cid:243)w i baz danych Generowania statycznych stron HTML na podstawie dynamicznych danych fladna inna ksi„¿ka nie zawiera tak obszernego opisu programowania w PHP, uwzglŒdniaj„cego najnowsze funkcje, jak ten nieoceniony przewodnik. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Rozdział 1. Rozdział 2. O Autorze ............................................................................................................................................................ 9 Wstęp ...................................................................................................................................................................11 Kompilacja i instalowanie PHP ...............................................................................................................15 Wstęp...................................................o...................................................o...........................15 Pobieranie PHP ...................................................o...................................................o...........15 Instalowanie wersji binarnej...................................................o...........................................16 Binarna instalacja dla Windows...................................................o...............................16 Inne instalacje binarne ...................................................o.............................................19 Kompilowanie PHP...................................................o...................................................o.....20 Kompilowanie PHP w systemach uniksowych...................................................o........20 Kompilowanie PHP w środowisku Windows...................................................o..........25 Podsumowanie wiadomości na temat kompilacji PHP...............................................27 Konfigurowanie PHP ...................................................o...................................................o..27 Korzystanie z pliku php.ini ...................................................o......................................28 Inne metody zmiany konfiguracji PHP...................................................o....................29 Podsumowanie ...................................................o...................................................o............30 Język................................................................................................................................................................... 31 Wstęp...................................................o...................................................o...........................31 Ogólne informacje na temat składni...................................................o...............................31 Typy ...................................................o...................................................o..................... .......32 Liczby — całkowite i zmiennoprzecinkowe...................................................o............33 Ciągi ...................................................o...................................................o.................... ..33 Tablice...................................................o...................................................o...................35 Zmienne i stałe ...................................................o...................................................o............36 Zmienne predefiniowane ...................................................o.........................................37 Zasięg zmiennych ...................................................o...................................................o.40 Stałe...................................................o...................................................o.................... ...41 Operatory i kolejność ich występowania ...................................................o.......................41 Instrukcje sterujące...................................................o...................................................o......42 if, else, elseif ...................................................o...................................................o.........43 ..43 while...................................................o...................................................o.................... 4 PHP4. Kompendium programisty do .. while...................................................o...................................................o..............43 for ...................................................o...................................................o........................44 foreach...................................................o...................................................o...................45 switch ...................................................o...................................................o................... .45 break i continue...................................................o...................................................o.....47 include i require ...................................................o...................................................o....49 Funkcje ...................................................o...................................................o........................50 Klasy i programowanie obiektowe ...................................................o..........................51 Porównywanie wzorców ...................................................o................................................53 Podsumowanie ...................................................o...................................................o............53 Formularze i cookie ...................................................................................................................................... 55 Wstęp...................................................o...................................................o...........................55 Obsługa formularzy w PHP...................................................o............................................57 Skalarne i wielowartościowe elementy formularza ...................................................o.57 Alternatywne metody odczytywania wartości z formularza.......................................58 Wykorzystanie formularzy do przesyłania plików ...................................................o..62 Wykorzystanie danych...................................................o.............................................62 Kontrola poprawności danych formularza ...................................................o.....................63 Kontrola danych za pomocą wyrażeń regularnych ...................................................o..63 Kontrolowanie poprawności za pomocą sprawdzania typów .....................................66 Klasa Validator ...................................................o...................................................o.....66 Cookie ...................................................o...................................................o................... Specyfika programowania dla WWW...................................................o............................70 Obsługa nieprawidłowych danych ...................................................o...........................70 Obsługa i formatowanie wyświetlanych danych ...................................................o.....73 Podsumowanie ...................................................o...................................................o............78 ......68 Operacje wykonywane na plikach........................................................................................................79 Wstęp...................................................o...................................................o...........................79 Odczytywanie i zapisywanie plików...................................................o..............................79 Wykorzystanie gniazd ...................................................o...................................................o.81 Wykorzystanie potoków...................................................o.................................................82 Klasa File...................................................o...................................................o.....................83 Podsumowanie ...................................................o...................................................o............85 Rozdział 3. Rozdział 4. Rozdział 5. Wysyłanie plików za pomocą formularza...........................................................................................87 Wstęp...................................................o...................................................o...........................87 Wysyłanie pojedynczego pliku ...................................................o......................................87 Problemy związane z przesyłaniem plików ...................................................o...................90 Przesyłanie wielu plików ...................................................o...............................................91 Bezpieczeństwo...................................................o...................................................o...........92 Podsumowanie ...................................................o...................................................o............93 Rozdział 6. Współpraca PHP z bazami danych.......................................................................................................95 Wstęp...................................................o...................................................o...........................95 Wprowadzenie...................................................o...................................................o.............95 Funkcje baz danych ...................................................o...................................................o.....96 MySQL...................................................o...................................................o.................... ....97 Rozpoczynamy pracę z MySQL ...................................................o..............................97 Wykorzystanie MySQL ...................................................o...........................................97 ODBC...................................................o...................................................o..................... ...101 Podstawy ODBC...................................................o...................................................o.101 Korzystanie z ODBC ...................................................o.............................................104 Spis treści Rozdział 7. Rozdział 8. Rozdział 9. 5 PHPLIB ...................................................o...................................................o................... Przechowywanie danych pochodzących z formularzy...................................................o.107 Wykorzystanie możliwości bazy danych ...................................................o.....................110 Podsumowanie ...................................................o...................................................o..........112 ..106 Sesje i stan aplikacji.................................................................................................................................... 113 Wstęp...................................................o...................................................o.........................113 Podstawy działania sesji...................................................o...............................................113 Mechanizm zarządzania sesjami wbudowany w PHP ...................................................o...114 Uruchomienie sesji w PHP ...................................................o....................................115 Przesyłanie identyfikatora sesji bez wykorzystania cookie ......................................116 Zapisywanie zmiennych sesji w bazie danych...................................................o.......120 Inne funkcje i opcje dotyczące sesji...................................................o.......................125 Wykorzystanie PHPLIB do obsługi sesji ...................................................o.....................127 Tworzenie własnego mechanizmu obsługi sesji ...................................................o..........130 Inżynieria programowania a sesje ...................................................o................................130 Podsumowanie ...................................................o...................................................o..........133 Uwierzytelnianie ......................................................................................................................................... 135 Wstęp...................................................o...................................................o.........................135 Podstawowy system uwierzytelniania w serwerze Apache ............................................135 Aktualizacja pliku .htaccess z wykorzystaniem PHP...................................................o...138 Podstawowe uwierzytelnianie za pomocą PHP ...................................................o...........142 Kompletny system uwierzytelniania oparty na PHP...................................................o....143 Podsumowanie ...................................................o...................................................o..........149 Niezależność aplikacji od przeglądarki .............................................................................................. 151 Wstęp...................................................o...................................................o.........................151 Wprowadzenie...................................................o...................................................o...........151 Wewnętrzne funkcje PHP ...................................................o............................................152 BrowserHawk...................................................o...................................................o............156 Wykorzystanie informacji na temat przeglądarki ...................................................o........161 Podsumowanie ...................................................o...................................................o..........164 Rozdział 10. Uruchamianie aplikacji WWW............................................................................................................165 Wstęp...................................................o...................................................o.........................165 Inżynieria programowania a uruchamianie aplikacji WWW ..........................................166 Projekt aplikacji ...................................................o...................................................o..166 Definiowanie standardów programowania ...................................................o............167 Przegląd oprogramowania ...................................................o.....................................167 Testowanie ...................................................o...................................................o..........168 Uruchamianie ...................................................o...................................................o......168 Programowanie defensywne ...................................................o........................................169 Dostosowanie mechanizmu obsługi błędów do potrzeb aplikacji ..................................175 Zaawansowana obsługa błędów ...................................................o...................................179 Podsumowanie ...................................................o...................................................o..........186 Bibliografia...................................................o...................................................o................186 Rozdział 11. Wielokrotne wykorzystanie kodu.......................................................................................................187 Wstęp...................................................o...................................................o.........................187 Ponowne wykorzystanie kodu a inżynieria programowania...........................................187 Ponowne wykorzystanie istniejącego kodu...................................................o..................188 PHP ...................................................o...................................................o.....................188 C/C++...................................................o...................................................o..................190 6 PHP4. Kompendium programisty Java ...................................................o...................................................o.....................197 COM ...................................................o...................................................o...................201 Inne metody ...................................................o...................................................o........204 Podsumowanie ...................................................o...................................................o..........205 Bibliografia...................................................o...................................................o................205 Rozdział 12. Oddzielanie kodu HTML od PHP..................................................................................................... 207 Wstęp...................................................o...................................................o.........................207 Wprowadzenie...................................................o...................................................o...........207 Oddzielanie i integracja modułów kodu z wykorzystaniem wewnętrznych funkcji PHP ......209 Przesłanki ...................................................o...................................................o............209 Implementacja...................................................o...................................................o.....210 Czego należy unikać? ...................................................o............................................214 Oddzielanie i integrowanie kodów HTML i PHP z wykorzystaniem funkcji PHP — podsumowanie ............................................214 Wykorzystanie systemu szablonów ...................................................o.............................215 FastTemplate...................................................o...................................................o.......215 Zaawansowane techniki wykorzystania klasy FastTemplate ...................................222 Podsumowanie ...................................................o...................................................o..........225 Bibliografia...................................................o...................................................o................225 Ten wspaniały PHP!................................................................................................................................. 227 Wstęp...................................................o...................................................o.........................227 Wysyłanie do przeglądarki plików innych niż HTML...................................................o.227 Skrypty wspomagające pracę administratora sieci...................................................o.......233 WDDX ...................................................o...................................................o......................239 Monitorowanie sieci ...................................................o...................................................o..244 Podsumowanie ...................................................o...................................................o..........246 Rozdział 13. Rozdział 14. Witryny tworzone na podstawie szablonów ..................................................................................247 Podstawy wykorzystania szablonów...................................................o............................247 Zapożyczanie...................................................o...................................................o.............258 Personalizacja witryny ...................................................o.................................................261 Obsługa wielu języków w witrynie ...................................................o..............................263 Podsumowanie ...................................................o...................................................o..........266 Rozdział 15. Tworzenie witryny opartej na bazie danych.................................................................................. 267 Wstęp...................................................o...................................................o.........................267 Projekt bazy danych ...................................................o...................................................o..267 Zarządzanie danymi aplikacji...................................................o.......................................271 Wyświetlanie danych ...................................................o...................................................o280 Podsumowanie ...................................................o...................................................o..........286 Rozdział 16. Generowanie statycznych stron HTML na podstawie dynamicznych danych............. 287 Wstęp...................................................o...................................................o.........................287 Koncepcja...................................................o...................................................o..................288 Generowanie stron statycznych...................................................o....................................288 Wykorzystanie buforowania ...................................................o..................................288 Wykorzystanie klasy FastTemplate ...................................................o.......................290 Techniki buforowania ...................................................o..................................................293 Podsumowanie ...................................................o...................................................o..........295 Spis treści 7 Rozdział 17. Witryny handlu elektronicznego ........................................................................................................ 297 Wstęp...................................................o...................................................o.........................297 Bezpieczeństwo...................................................o...................................................o.........297 Zastosowanie SSL...................................................o..................................................298 Certyfikaty ...................................................o...................................................o..........298 Bezpieczeństwo bazy danych ...................................................o................................299 Przetwarzanie płatności...................................................o................................................300 Dostarczanie produktów...................................................o...............................................309 Podsumowanie ...................................................o...................................................o..........310 Dodatek A Opis funkcji PHP w porządku alfabetycznym ..............................................................................311 Dodatek B Predefiniowane zmienne i stałe PHP ................................................................................................. 775 Zmienne...................................................o...................................................o.....................775 Zmienne Apache ...................................................o...................................................o.775 Zmienne środowiska ...................................................o..............................................778 Zmienne PHP ...................................................o...................................................o......778 Stałe...................................................o...................................................o.................... .......780 Opcje kompilacji PHP...............................................................................................................................783 Bazy danych ...................................................o...................................................o..............783 Handel elektroniczny...................................................o...................................................o.787 Grafika...................................................o...................................................o.......................787 Różne...................................................o...................................................o.........................788 Sieć ...................................................o...................................................o............................794 Działanie PHP ...................................................o...................................................o...........795 Serwer.............................................o...................................................o..............................796 Tekst i język ...................................................o...................................................o..............797 XML ...................................................o...................................................o..........................797 Opcje konfiguracji PHP .......................................................................................................................... 799 Ogólne dyrektywy konfiguracji ...................................................o...................................799 Dyrektywy konfiguracji poczty...................................................o....................................803 Dyrektywy konfiguracji trybu bezpiecznego ...................................................o...............804 Dyrektywy konfiguracji debuggera...................................................o..............................804 Dyrektywy ładowania rozszerzeń ...................................................o................................804 Dyrektywy konfiguracji MySQL ...................................................o.................................805 Dyrektywy konfiguracji mSQL...................................................o....................................806 Dyrektywy konfiguracji PostgreSQL...................................................o...........................806 Dyrektywy konfiguracji Sybase ...................................................o...................................806 Dyrektywy konfiguracji Sybase-CT...................................................o.............................807 Dyrektywy konfiguracji Informix ...................................................o................................808 Dyrektywy konfiguracji BC Math...................................................o................................809 Dyrektywy konfiguracji możliwości przeglądarek ...................................................o......810 Dyrektywy konfiguracji zunifikowanego ODBC ...................................................o........810 Zasoby Sieci.................................................................................................................................................... 811 Skorowidz........................................................................................................................................................813 Dodatek C Dodatek D Dodatek E Uruchamianie aplikacji WWW jest, tak jak w przypadku innych typów aplikacji, procesem krytycznym. Problemem może być zdalne uruchamianie programu, szczególnie jeśli nie masz odpowiednich uprawnień do administrowania serwerem WWW. W tym rozdziale zaprezentowane są porady i narzędzia, które mogą usprawnić proces uruchamiania aplikacji. Ponadto w niektórych podrozdziałach przedstawione są zasady inżynierii programowania, ponieważ można uniknąć wielu problemów przy uruchamianiu aplikacji, jeżeli jej projekt jest odpowiednio przygotowany. Z powodu ogromnego zainteresowania aplikacjami WWW powstało wiele narzędzi (między innymi PHP) do tworzenia takich aplikacji. Niektóre spośród tych narzędzi zostały stworzone na podstawie narzędzi już istniejących, na przykład ASP i JSP, natomiast inne zostały stworzone specjalnie dla potrzeb projektowania interaktywnych aplikacji WWW. Większość tych narzędzi nie spełnia podstawowych zasad inżynierii programowania. Być może wynika to z faktu, że pro- jektowanie aplikacji WWW to zupełnie nowa dziedzina informatyki, a pierwszymi projektantami nowej technologii nie byli doświadczeni programiści. Niezależnie od tych przyczyn, do nowego środowiska programowania należy zaadaptować wszystkie istniejące zasady inżynierii programo- wania. W poniższym podrozdziale zostały przypomniane zasady inżynierii programowania. Prze- strzeganie tych zasad pozwala uniknąć wielu błędów w projektowaniu, dzięki czemu uruchamianie aplikacji przebiega sprawniej i szybciej. 166 PHP4. Kompendium programisty Jak napisałem w rozdziale 3., „Formularze i cookie”, można uniknąć sprawdzania poprawności niektórych danych w przypadku zastosowania lepszego mechanizmu wprowadzania danych. Analogicznie, napisanie lepszego (bardziej defensywnego) kodu znacznie skraca czas uruchamia- nia aplikacji. Projekt aplikacji WWW musi być dokładnie przemyślany, podobnie jak projekt każdej innej apli- kacji. Tworzenie sprawnej, efektywnej aplikacji wymaga opracowania właściwego projektu, zacho- wania zgodności ze standardami tworzenia oprogramowania, sprawdzania oprogramowania, testowania modułów oraz ostatecznego uruchomienia aplikacji. Poszczególne czynności są omó- wione poniżej, w kolejnych sekcjach. Zakładam, że posiadasz ogólną wiedzę na temat inżynierii programowania. Projekt aplikacji Przed rozpoczęciem pisania kodu należy określić wstępne założenia aplikacji. W przypadku realizacji dużych projektów takie planowanie może zająć tygodnie lub miesiące. Z kolei wstępne założenia niewielkich projektów mogą zostać zapisane na skrawku papieru w ciągu kilku minut. Zawsze należy przeanalizować wymagania aplikacji, an także opracować wszelkie alternatywne sposoby realizacji zadań aplikacji przed rozpoczęcienm pisania kodu. Badania firm TRW i IBM wskazują, że wprowadzenie zmian do aplikacji w początkowym okresie programowania jest 10 do 200 razy tańsze niż wprowadzanie tych samych zmian na końcu całego procesu tworzenia aplikacji (McConnell, 1993). W zależności od rodzaju projektu, określenie wymaganych funkcji aplikacji może być bardzo praco- chłonne. Wstępny podział aplikacji na moduły może uprościć ten proces. W aplikacji WWW mo- dułami takimi mogą być: współpraca z bazą danych, autoryzacja użytkownika, obsługa stanu itd. Po określeniu zadań poszczególnych modułów należy — w razie potrzeby — podzielić je na mniejsze fragmenty i zapisać przeznaczenie każdego fragmentu. W małych aplikacjach dobrą strategią jest podział modułów na pliki kodu bądź klasny obiektowe. Po zdefiniowaniu zadań aplikacji należy opracować architekturę systemu. Trzeba określić rodzaj stosowanego systemu zarządzania relacyjną bazą danych (SZRBD) i przeanalizować wiele innych elementów struktury, np. organizację plików kodu, sposób realizacji ewentualnych zmian itp. Trzeba także rozważyć, czy niektóre moduły należy zakupić, czy też lepiej napisać je samodzielnie. Mimo że PHP może działać na wielu serwerach WWW i platformach systemowych, każda z takich kombinacji posiada indywidualne cechy. Należy poświęcić trochę czasu na określenie, która platforma sprzętowa i serwer WWW będzie najlepiej odpowiadać potrzebom tworzonej aplikacji. Wstępny budżet projektu rzadko jest dobrym powodem wyboru określonej platformy. Wybór bazy danych jest równie istotny, jeżeli aplikacja ma być dynamiczna. Ponadto należy rozważyć, czy serwer WWW i baza danych będą pracowały na tym samym komputerze, czy osobno. W zależno- ści od wielkości i charakteru aplikacji może być to nkrytyczne zagadnienie. Rozdział 10. //// Uruchamianie aplikacji WWW 167 Po przeanalizowaniu tych wszystkich zagadnień należy określić organizację kodu. Zdefiniuj kon- wencję nazywania plików i katalogów, co uprości identyfikację kodu. Wymyśl alternatywny plan na wypadek, gdy istnieje duże prawdopodobieństwo zmian. Jeżeli przewidujesz wystę- powanie zmian, napisz aplikację, która będzie lokalinzowała zmiany w kilku modułach, a resztę — buforowała. Jest to szczególnie istotne wtedy, gdy przy tworzeniu aplikacji korzystasz z narzędzi pochodzących z innych źródeł lub oprogramowania w wersji beta. Tworzenie zastępni- ków takiego kodu jest łatwe do zaimplementowania i w dłuższym okresie czasu zapewnia łatwiej- sze utrzymanie aplikacji. Na koniec należy zadecydować, które moduły aplikacji zostaną stworzone przy pomocy go- towych narzędzi pochodzących od zewnętrznych dostawców. Dylemat „tworzyć czy kupić” jest dość problematyczny. W zależności od harmonogramu projektu, możesz nie mieć wystar- czająco dużo czasu, aby móc dostatecznie przetestować dostępne narzędzia. Jednak możesz również nie mieć wystarczająco dużo czasu na stworzenie ich od podstaw. Aby zmniejszyć wpływ tej decyzji na projekt, można stworzyć własne funkcje pośrednie, ukrywające implementa- cję gotowych narzędzi. Właściwe zaprojektowanie aplikacji wymaga czasu. W dobrych systemach faza projektowania zajmowała 20 do 30 procent czasu ich tworzenia (McConnell, 1993). Jest to czas przeznaczony na projektowanie wysokiego poziomu, a przecież projektowanie szczegółów implementacji również zabiera sporo czasu. Definiowanie standardów programowania Zdefiniowanie standardów programowania ułatwia zarządzanie aplikacjami o dowolnej wielkości. Nawet małe aplikacje programowane przez jednego programistę mogą korzystać ze standardów programowania. Taki standard obejmuje sposoby nazywania, komentowania oraz konwencje układu. Niektóre z nich, na przykład układ kodu, są mniej istotne, ponieważ nowoczesne edytory potrafią przeformatować kod, jednak inne, na przykład konwencje nazw plików i katalogów, mogą mieć ogromne znaczenie w procesie konserwacji kodu1. Przegląd oprogramowania Przegląd oprogramowania umożliwia zrealizowanie kilku celów naraz. Na przykład, przegląd oprogramowania umożliwia porównanie kodu ze standardami kodowania. Początkujący pro- gramiści mogą korzystać z wiedzy bardziej doświadczonych kolegów. Przeglądy oprogramowania umożliwiają także zapewnienie odpowiedniej jakości oprogramowania. Analizy przeglądów opro- gramowania stosowanych przy tworzeniu rzeczywistych aplikacji wykazały, że przeglądy umoż- liwiają wykrywanie błędów ze skutecznością 55 – 60 . Ten wynik należy zestawić z jedynie 25-procentową skutecznością testowania modułów, 35-procentową testowania funkcji oraz 1 Z powodu swobodnego traktowania typów w PHP szczegónlnie istotne jest odpowiednie nazywanie zmiennych. Dobrym pomysłem może być stosowanie tzw. notacji węgierskiej, w której nazwa zmiennej zaczyna się od liter określających jej typ, np.: 237- to zmienna przechowująca liczby całkowite, 7$89 zawiera ciąg znaków, a ,782// to zmienna logiczna — przyp. tłum. 168 PHP4. Kompendium programisty 45-procentową skutecznością testowania integracyjnego. Ponadto przeglądy takie zwiększają w dużych projektach ogólną wydajność zespołu. W niektórych przypadkach ograniczają one moż- liwość wystąpienia awarii do 80 – 90 , a także zapewniają 10 – 25 wzrost wydajności aplikacji (McConnell, 1993). Przegląd powinien być przeprowadzany zarówno podczas testowania, jak i podczas implementacji. Przegląd projektu umożliwia wykrycie jego wad w momencie, gdy ich usuwanie jest najprostsze i najtańsze. Przegląd może być realizowany na kilka sposobów. Niektóre z nich są formalną inspekcją kodu inne przeglądem ogólnym lub czytaniem kodu. W przypadku formalnej inspekcji kodu kilku członków zespołu spotyka się w celu odszukania błędów. Prowadzący spotkanie powinien dbać o postępy w pracy i pilnować, aby jedynym tematem była identyfikacja błędów. Formalna inspekcja kodu nie powinna dotyczyć zasadności stosowanych rozwiązań. W przypadku przeglądu ogólnego grupa programistów prowadzi nieformalną dyskusję na temat kodu, zadając pytania. Głównym celem spotkania jest identyfikacja błędów, a nie ustalenie sposobów ich usunięcia. Czytanie kodu poświęcone jest jedynie udoskonalaniu istniejącego kodu programu. Zwykle część kodu jest przekazywana dwóm lub więcej osobom, które, pracując niezależnie, identyfikują błędy. Wynik ich pracy jest przekazywany autorowi kodu. Wybór metody przeglądu kodu zależy od rozmiaru i sposobu organizacji projektu. Jeśli pracujesz sam lub w małym zespole, przegląd metodą czytania kodu możesz zlecić osobie trzeciej. Niezależ- nie od rodzaju wybranej metody, przeprowadzenie przeglądu kodu jest najbardziej efektywną metodą identyfikacji problemów w projekcie bądź implemnentacji. Testowanie Podobnie jak w przypadku innych projektów, testowanie aplikacji WWW powinno obejmować różne poziomy aplikacji: testowanie funkcji, testowanie modułów oraz testowanie integracyjne. Testowanie każdego modułu powinno być odpowiednio zaplanowane. Testy stanowią zbiór okre- ślonych oczekiwań i wymagań. Testowanie niewielkich projektów może polegać na sprawdzeniu funkcjonowania aplikacji w kilku przypadkach jej wykorzystania. W przypadku tworzenia większych projektów często zatrudniani są specjaliści, którzy zajmują się jedynie testowaniem, jednak każdy z programistów powinien być odpowiedzialny za dostarczenie testerom tylu danych, aby ich praca była efektywna. Każdy twórca kodu powinien również być odpowiedzialny za testowanie swoich modułów na po- ziomie funkcji lub strony. Uruchamianie Uruchamianie jest ostatnim etapem w procesie tworzenia aplikacji, ponieważ w momencie, gdy następuje uruchamianie, powinny być ukończone procesy projektowania, programowania i część testowania. Uruchamianie może być przeprowadzane w każdej fazie testowania jako część tego procesu. Wszystkie zmiany wprowadzone do kodu w trakcie procesu uruchamiania powinny zostać ponownie przetestowane na wszystkich poziomach testowania, ponieważ zmiany te mogą być przyczyną powstania nowych błędów. Rozdział 10. //// Uruchamianie aplikacji WWW 169 Uruchamianie powinno być gruntownym procesem zmierzającym do zidentyfikowania źródeł ewentualnych problemów. Każdy programista biorący udział w testowaniu powinien znać źródło problemu w momencie, gdy stwierdza się, że problem został usunięty. Znalezienie źródła problemu powinno owocować stworzeniem kompletnego rozwiązania, a nie próbą obejścia problemu. W nie- których przypadkach tymczasowe rozwiązania mogą być wystarczające, ale muszą zostać odpo- wiednio udokumentowane. W trakcie rozwiązywania problemów należy uwzględniać priorytety. Nie sposób w tej książce, poświęconej głównie PHP, przedstawić wszelkich zasad inżynierii programowania. Programista winien pamiętać, że zasady inżynierii programowania obowiązują we wszystkich aplikacjach, czyli również w aplikacjach WWW, a ich przestrzeganie ułatwia uruchamianie i późniejsze administrowanie aplikacją. W następnej części rozdziału przedsta- wione są techniki i narzędzia specyficzne dla aplikacnji PHP. Zanim zaczniesz uruchamiać program, powinieneś podjąć czynności prowadzące do ograni- czenia ilości błędów w kodzie. Taki sposób programowania jest nazywany programowaniem defensywnym. Polega ono na odpowiednim komentowaniu błędów, a także wewnętrznym sprawdzaniu stanu procedur w trakcie programowania. Każdy programista może komentować błędy na swój sposób, jednak komentarze te powinny być zgodne z ogólnym standardem. Pro- gramiści powinni opisywać przeznaczenie funkcji, klasy lub dołączanego pliku oraz zawsze komentować niejasne fragmenty kodu. Do sprawdzania stanu funkcji PHP, tak jak wiele języków wysokiego poziomu, stosuje funkcję +77/68(cid:6)(cid:7). Funkcja +77/68(cid:6)(cid:7) oblicza wartość przekazanego parametru i podejmuje określone akcje w przypadku, gdy jego wartość wynosi +7/. W PHP do funkcji +77/68(cid:6)(cid:7) można przekazać zarówno ciąg, jak i wartość Boolean. Jeżeli przekazany został ciąg, jest on wykonywany jako blok kodu PHP. Opcje asercji w pliku php.ini (+77/68 +-8:/, +77/68 ;+6221, +77/68 ,+, +77/68 -+,+- i +77/68 59/8)/:+) lub opcje przekazane jako parametr wywołania funkcji +77/68)348327(cid:6)(cid:7) definiują akcję, jaką podejmuje funkcja +77/68(cid:6)(cid:7). W tabeli 10.1 wyszczególnione są różne opcje asercji. Tabela 10.1. Opcje asercji i ich opis Opcja +77/68)+-8:/ +77/68);+6221 +77/68),+ +77/68)59/8)/:+ Domyślnie +77/68)-+,+- (cid:25)29(cid:26) Opis Włącza wykonywanie funkcji +77/68(cid:6)(cid:7) Wyświetla ostrzeżenie PHP przy każdej nieudanej aserncji Kończy wykonanie w przypadku nieudanej asercji Wyłącza raportowanie błędów w czasie obliczenia wyrażnenia asercji Nazwa funkcji użytkownika wykonywanej w przypadku nineudanej asercji 170 PHP4. Kompendium programisty Funkcja +77/68(cid:6)(cid:7) jest zaprojektowana jedynie do wykorzystywania w czasie tworzenia programu i nie powinna być używana w czasie zwykłej pracy aplikacji. Aplikacja powinna działać iden- tycznie z wywołaniami funkcji +77/68(cid:6)(cid:7), jak i bez nich. Skrypt z wydruku 10.1 przedstawia przy- kład wykorzystania funkcji +77/68(cid:6)(cid:7) do kontrolowania poprawności parametrów wejściowychn. Wydruk 10.1. Wykorzystanie funkcji assert() do kontrolowania pomprawności parametrów wejściowych 44 092-83266+:/6+1/(cid:25)+66+(cid:26)  +$38+   43786303+2-+-12/28/646/83;+246/ 9 +77/68(cid:25) 7)+66+(cid:25)+66+(cid:26) (cid:26) 036/+-(cid:25)+66++7+//28(cid:26)  +77/68(cid:25) 7)29/6-(cid:25)+//28(cid:26) (cid:26) +$38+.+//28  6/8962(cid:25)+$38+ -3928(cid:25)+66+(cid:26)(cid:26)   Umieszczona w powyższym skrypcie funkcja 66+:/6+1/(cid:6)(cid:7) spodziewa się jako parametru tablicy wartości numerycznych (liczb lub ciągów zawierających liczby) i zwraca średnią z wartości w tablicy. Wyrażenie +77/68(cid:6)(cid:7) jest wykorzystywane do kontrolowania poprawności pnarametru przekazanego do funkcji, a później do sprawdzania, czy tablica zawiera wartości numeryczne. Do +77/68(cid:6)(cid:7) można przekazać ciąg, który jest wykonywany jako kod PHP, więc jeżeli wyko- rzystywane są zmienne, należy zapewnić, że PHP nie podstawi zbyt wcześnie wartości zmiennej w miejsce jej nazwy. Aby tego uniknąć, należy używać ciągów w apostrofach. Testowy skrypt dla funkcji z wydruku 10.1 jest zamieszczony na wydruku 10.n2. Wydruk 10.2. Wykorzystanie funkcji ArrayAverage() 44 2-9./(cid:25) +66+092- 44(cid:26)  8 /+. 88/$/783;+2/+7/6- 88/  /+. ,3. 44 + /79866+:/6+1/(cid:25)+66+(cid:25) 5555(cid:26)(cid:26) 4628(cid:25)66+:/6+1/(cid:25)+66+(cid:25) 5555(cid:26)(cid:26)+ /7989,6(cid:26) + /79866+:/6+1/(cid:25)+66+(cid:25) 5 555(cid:26)(cid:26) 4628(cid:25)66+:/6+1/(cid:25)+66+(cid:25) 5 555(cid:26)(cid:26)+ /798,6(cid:26) + /79866+:/6+1/(cid:25)+66+(cid:25) 55-+855(cid:26)(cid:26) 4628(cid:25)66+:/6+1/(cid:25)+66+(cid:25) 55-+855(cid:26)(cid:26)+ /9798,6(cid:26) + /79866+:/6+1/(cid:25) 5(cid:26) 4628(cid:25)66+:/6+1/(cid:25) 5(cid:26)+ /798,6(cid:26)   ,3.  8 Rozdział 10. //// Uruchamianie aplikacji WWW 171 Testowy skrypt wywołuje funkcję 66+:/6+1/(cid:6)(cid:7) cztery razy. Najpierw dwukrotnie przeka- zywane są właściwe wartości, a następnie dwukrotnie skrypt przekazuje wartości nieprawidłowe. Wynik działania skryptu jest przedstawiony na rysunku 10.1. Ponieważ PHP wewnętrznie wy- musza typy zmiennych, wywołanie 66+:/6+1/(cid:6)+66+(cid:6) (cid:27)(cid:27)-+8(cid:27)(cid:27)(cid:7)(cid:7) jest realizowane bez żadnych ostrzeżeń (poza generowanymi przez asercje). Rysunek 10.1. Testowanie funkcji ArrayAverage() Podejmowane przez funkcję +77/68(cid:6)(cid:7) działania zależą od ustawień asercji. W poprzednim przy- kładzie wykorzystane zostały domyślne ustawienia asercji. Asercje mają tę zaletę, że gdy +77/68 +-8:/ jest ustawione na +7/, przestają działać. Aby zmienić tę opcję, należy albo wywołać funkcję +77/68)348327(cid:6)## $)$ (cid:27)+7/(cid:7), albo odpowiednio ustawić dyrektywę kon- figuracji. Wykorzystując opcję konfiguracji, można instalować aplikację w środowisku z wy- łączonymi asercjami, a pracować w takim, w którym asnercje są aktywne. Istnieje jeszcze jedna funkcja pomagająca w programowaniu defensywnym, /6636)6/436821(cid:6)(cid:7). Funkcja ta jako argumentu wymaga liczby całkowitej określającej poziom raportowania błędów. Argument ten jest traktowany jako maska bitowa, więc można podać zestaw kilku ustawień. PHP posiada zestaw stałych używanych razem z tą funkcjną. Są one wyszczególnione poniżej. Wartość 1 2 4 8 16 32 64 128 256 512 1024 Nazwa )  )   )  # )$ ) )  ) )   ) )  ) )   ) # )  ) # )   ) # )$ 172 PHP4. Kompendium programisty Istnieje również dodatkowa stała, ), która uaktywnia wszystkie informacje o błędach. W trak- cie tworzenia aplikacji poziom raportowania błędów należy ustawić na ), co spowoduje wyświetlanie wszystkich informacji o błędach w kodzie. Ustawienie to jest również przydatne w trakcie dołączania do aplikacji zewnętrznej biblioteki. Przykładowy kod zamieszczony na wy- druku 10.3 generuje ostrzeżenia w przypadku ustawienia maksymalnego poziomu raportowania błędów. Przy standardowych ustawieniach skrypt nie wnyświetla żadnego komunikatu. Wydruk 10.3. Przykład wykorzystania funkcji error_reporting() 8 /+. 88/ 336+43683;+2+,oE.F; 88/  /+. ,3. 44 +66++66+(cid:25)78+8/.+35-3928+.7325 -8 /,9615-39286 #(cid:26)  #8+2.+6.3;4336+43683;+2+,oE.F; 4628(cid:25)+66+78+8/ +66+78+8/ ,6(cid:26) /6636)6/436821(cid:25))(cid:26) 4628(cid:25)+66+78+8/ +66+78+8/ ,6(cid:26)   ,3.  8 Wyniki działania powyższego skryptu są przedstawione na rysunku 10.2. Jak można zauważyć, ustawienie bardziej restrykcyjnego poziomu raportowania błędów może zaowocować wykryciem błędów w kodzie, które mogą być źródłem wielu problemów w procesie tworzenia aplikacji. W tym przypadku problem może wydawać się błahy, ale jeżeli zdefiniujemy stałą o nazwie 78+8/ reprezentującą stan działania aplikacji, problem nabierze znaczenia. Na wydruku 10.4 przedstawiony jest skrypt z taką właśnie stałą. Wyniki jego działania są widoczne na rysunku 10.3. Wydruk 10.4. Drugi przykład wykorzystania funkcji error_reporting(m) oraz stałej state 44  #8+2.+o+2++4+- ./02/(cid:25)78+8/5(cid:26)   3378+o3.9 ;+-78+o/78+8/  8 /+. 88/ 336+43683;+2+,oE.F; 88/  /+. ,3. 44 +66++66+(cid:25)78+8/.+35-3928+.7325 -8 /,9615-39286 #(cid:26)  324336+43683;+2+ 4628(cid:25)+66+78+8/ +66+78+8/ ,6(cid:26) /6636)6/436821(cid:25))(cid:26) 4628(cid:25)+66+78+8/ +66+78+8/ ,6(cid:26)   ,3.  8 Rozdział 10. //// Uruchamianie aplikacji WWW 173 Rysunek 10.2. Wynik działania skryptu error_reporting0() Rysunek 10.3. Wynik działania drugiego skryptu error0_reporting() W obu przykładach, gdy poziom raportowania błędów był ustawiony na poziom standardowy, nie były generowane żadne ostrzeżenia i program działał niemal bezbłędnie. Jednak po dodaniu stałej (w drugim przykładzie) świetnie działający program nagle przestał działać. Problem taki może być bardzo trudny do zidentyfikowania, jeżeli stała byłaby zdefiniowana w dołączanym pliku. Jak widać, warto ustawiać poziom raportowania błędów na maksimum. Wszystkie wyświetlane ostrzeżenia powinny zostać zlikwidowane, aby uniknąnć występowania błędów w przyszłości. W zależności od specyfiki Twojego środowiska pracy, możesz ustawić poziom raportowania błę- dów na maksymalny w trakcie tworzenia aplikacji i na minimalny na serwerze produkcyjnym. Takie ustawienie powoduje, że w przeglądarkach użytkowników nie pojawiają się ostrzeżenia i komunikaty błędów. Uważam jednak, że najlepiej ustawić na serwerze produkcyjnym poziom raportowania na maksimum, kierując strumień błędów do pliku dziennika. Można to zrealizować, ustawiając zmienne konfiguracji .74+)/66367, 31)/66367 i /6636)31 na, odpowiednio: 00, 2 i 78./66. Powoduje to, że PHP nie wyświetla błędów w przeglądarce, ale zapisuje je do pliku 78./66. Dla serwera Apache plikiem 78./66 jest dziennik błędów. Jeżeli chcesz, możesz sko- rzystać z innej lokalizacji dziennika. Gdy zostanie wykonany skrypt z wydruku 10.3 po skonfigurowaniu PGP w sposób przedsta- wiony powyżej, na ekranie nie pojawią się ostrzeżenia, a w pliku dziennika błędów Apache znajdą się następujące pozycje:  N/-N     +6221 2./02/.3007/82-/32494N ./:19./78/- /6636)6/436821) 48322/   N/-N      +6221 7/3092./02/.-3278+2878+8/N+779/. 78+8/ 2 -/3244N./:19./78/- /6636)6/436821 483292/  174 PHP4. Kompendium programisty  N/-N     +6221 7/3092./02/.-3278+2878+8/N+779/. 78+8/ 2 -/3244N./:19./78/- /6636)6/436821 483292/   N/-N     +6221 2./02/.3007/82-/32494N ./:19./78/- /6636)6/436821) 48322/   N/-N      +6221 2./02/.3007/82-/32494N ./:19./78/- /6636)6/436821) 48322/   N/-N     +6221 7/3092./02/.-3278+2878+8/N+779/. 78+8/ 2 -/3244N./:19./78/- /6636)6/436821 483292/  Następną czynnością realizowaną w ramach programowania defensywnego może być napisa- nie własnego mechanizmu rejestrującego. W dowolnych miejscach aplikacji można sprawdzać stan niektórych funkcji lub raportować błędy wewnętrzne i kontynuować pracę. PHP udostęp- nia funkcję /6636)31(cid:6)(cid:7), przy pomocy której można dodawać własne zapisy do pliku śladu aplikacji. Prototyp funkcji /6636)31(cid:6)(cid:7) wygląda następująco: 28/6636)31(cid:25)78621392+852884578621-/95786212+13;(cid:26) Pierwszy parametr, 392+8, zawiera zapisywane dane. Drugi z parametrów określa miejsce, w którym zostanie zapisany komunikat. Lista prawidłowych wartości parametru 84 znajduje się w tabeli 10.2. Tabela 10.2. Wartości parametru typ Wartość Opis 0 1 2 3 Parametr 392+8 jest wysyłany do systemowego mechanizmu rejestrowannia PHP przy użyciu mechanizmu rejestrowania zapewnianego pnrzez system operacyjny lub pliku — w zależności od ustawienia zmiennej konfiguracji /6636)31 Komunikat jest wysyłany pocztą elektroniczną na adres podany w parametrze -/. Jedynie ten typ zapisu wykorzystuje parametr 2+13;. Do obsługi tego typu komunikatu wykorzystywana jest ta sama funkcja wewnnętrzna, co w funkcji +(cid:25)(cid:26) Komunikat jest wysyłany poprzez połączenie PHP używane do uruchamiania zdalnego. Opcja ta jest dostępna jedynie w przypadku, gdy jest nwłączone uruchamianie zdalne. W tym przypadku parametr -/ określa nazwę komputera lub adres IP oraz, opcjonalnine, numer portu używanego do odbierania informacji urucnhamiania Komunikat jest dołączany do końca pliku o nazwie -/ W czasie pisania książki typ 2 nie był dostępny. Kod źródłowy zawierał komentarz informujący, że zdalne uruchamianie nie jest jeszcze dostępne. Inne typy komunikatów działają w sposób opisany w tabeli. Skrypt zamieszczony na wydruku 10.5 stanowi przykład wykorzystania funkcji /6636)31(cid:6)(cid:7). Wydruk 10.5. Wykorzystanie funkcji error_log() 8 /+. 88/ //7863;+2/,oE.F; 88/  /+. ,3. 44  +47+2/,oE.9.3./22+778/3;/13 Rozdział 10. //// Uruchamianie aplikacji WWW 175 /6636)31(cid:25)n;784o,o.5 (cid:26)   7o+2/,oE.943-8/N+ /6636)31(cid:25)n;784o,o.5 5+44)/6636728/-69+ 2/85 63/6636)311/6378 -362(cid:26)  +47+2/,oE.9;49+.9+4+- /6636)31(cid:25)n;784o,o.55 84 /6636 31(cid:26)   784o,oE.  ,3.  8 Pierwsze wywołanie funkcji /6636)31(cid:6)(cid:7) zapisuje komunikat błędu w systemowym dzienniku błędów. W powyższym przykładzie błąd ten wysyłany jest do dziennika błędów Apache. Drugie wywołanie skutkuje wysłaniem poczty elektronicznej do odbiorcy określonego w parametrze -/. Informacje zawarte w dodatkowych nagłówkach są utworzone na podstawie tych samych zasad, co w przypadku funkcji +(cid:6)(cid:7). Ostatnie wywołanie powoduje zapisanie komunikatu błędu do pliku, w tym przypadku /tmp/error.log. Wykorzystanie tego mechanizmu nie jest w dosłownym znaczeniu uruchamianiem, ale jego zastosowanie może znacznie skrócić i ułatwić właściwe uruchamianie, umożliwiając wyelimi- nowanie niektórych błędów i przeoczeń już w fazie programowania. Jak wcześniej wspomniałem, ograniczenie liczby błędów w kodzie powinno być prionrytetem dla każdego programisty. Tak jak niemal każdy element PHP, mechanizm obsługi błędów można dostosować do własnych potrzeb, aby spełniał wymagania aplikacji. Funkcja /6636)31(cid:6)(cid:7) umożliwia skonstruowanie prostego mechanizmu rejestrowania własnych błędów występujących w aplikacji, ale nie umożliwia obsługi błędów generowanych przez PHP. Nie pozwala również na przechwytywanie komunikatów gene- rowanych przez funkcje +77/68(cid:6)(cid:7). Na szczęście w PHP takie przypadki można obsługiwać w inny sposób. Funkcja 7/8)/6636)+2./6(cid:6)(cid:7) pozwala zarejestrować funkcję w PHP, która będzie wywoływana za każdym razem, gdy zostanie wygenerowany komunikat błędu. Funkcja 7/8)/6636)+2./6(cid:6)(cid:7) wymaga podania jednego argumentu — nazwy funkcji obsługi błędów. Prototyp takiej funkcji wygląda następująco: 092-8326636++-(cid:25)2826),/.9578621-+1),/.959786212+;+)76489528 26)25+66+328/78(cid:26) Sposób rejestrowania i wykorzystania funkcji obsługi błędów jest przedstawiony w przykładowym skrypcie na wydruku 10.6. 176 PHP4. Kompendium programisty Wydruk 10.6. Wykorzystanie funkcji set_error_handler() 44 092-8326636+2./6(cid:25)+663635+6636#865+/5+2/95+328/8(cid:26)  7;8-(cid:25)+66363(cid:26)  -+7/)   +6636$4/)   2/43;2/2;784 ,6/+ -+7/)   +6636$4/)   ,6/+ -+7/)  # +6636$4/)  # 2/43;2/2;784 ,6/+ -+7/)$ +6636$4/)$ ,6/+ -+7/) )   +6636$4/) )   2/43;2/2;784 ,6/+ -+7/) )   +6636$4/) )   2/43;2/2;784 ,6/+ -+7/) )   +6636$4/) )   2/43;2/2;7849 ,6/+ -+7/) )   +6636$4/) )   2/43;2/2;784 ,6/+ -+7/) # )   +6636$4/) # )   ,6/+ -+7/) # )   +6636$4/) # )   ,6/+ -+7/) # )$ +6636$4/) # )$ ,6/+ ./0+98 +6636$4/    $  ,6/+  4628(cid:25)8+,/,36./6 868.(cid:26) 4628(cid:25),+6636$4/ ,+6636#86 ,6(cid:26) 4628(cid:25);49+/2++2/,6(cid:26) 4628(cid:25) 8. 86 8+,/(cid:26)  7/8)/6636)+2./6(cid:25)6636+2./6(cid:26) /6636)6/436821(cid:25))(cid:26)  8 /+. 88/ o+72+3,7o91+,oE.F; 88/  /+. ,3. 44 Rozdział 10. //// Uruchamianie aplikacji WWW 177 8611/6)/6636(cid:25)$/78,oE.F;5) # )  (cid:26) +66++66+(cid:25)78+8/.+35-3928+.7325 -8 /,9615-39286 #(cid:26) 4628(cid:25)+66+78+8/ +66+78+8/ ,6(cid:26)   ,3.  8 W powyższym skrypcie została zdefiniowana funkcja obsługi błędów 6636+2./6(cid:6)(cid:7), która wyświetla komunikaty błędów w obramowanej tabeli zawierającej jedną komórkę, co pomaga w odróżnieniu komunikatu błędu od reszty kodu HTML. Po zainstalowaniu funkcji obsługi skrypt powoduje dwa błędy. Pierwszy jest generowany przy użyciu funkcji PHP 8611/6)/6636(cid:6)(cid:7). Drugi błąd (ostrzeżenie) jest identyczny z błędem przedstawionym na wydruku 10.3. Na rysunku 10.4 przedstawiony jest wynik działania skryptu. Rysunek 10.4. Działanie funkcji set_error_handler() Przy stosowaniu funkcji 7/8)/6636)+2./6(cid:6)(cid:7) należy pamiętać o tym, że PHP nie przekazuje do funkcji obsługi błędów typu )  , )  #, ) )  , ) )  , ) )   oraz ) )  . Obsługa tego typu błędów przez użytkownika nie jest bezpieczna. Z tego powodu w kodzie funkcji obsługi błędów z wydruku 10.6 pojawiły się komentarze „nie powinien wystąpić”. Uwaga na temat funkcji set_error_handler() Funkcja 7/8)/6636)+2./6(cid:6)(cid:7) jest dostępna w PHP od wersji 4.0.1. Dodatkowo, funkcja użyta w tym przykładzie posiada pięć parametrów, w tym nazwę skryptu, numer linii i dane kontekstu. Parametry te są dostępne dopiero w wersji 4.0.2. Wcześniejsze wersje miały tylko dwa parametry: typ komunikatu i komunikat. W skrypcie z wydruku 10.6 nie są wykorzystane dane na temat kontekstu. Będą one opisane w następnej części rozdziału. Dane te zawierają nazwy i wartości zmiennych istniejących w skryp- cie w momencie wystąpienia błędu. Również funkcja +77/68(cid:6)(cid:7) umożliwia zdefiniowanie wywoływanej funkcji. Aby to zrealizować, należy zastosować funkcję +77/68)348327(cid:6)(cid:7). Funkcja obsługująca nieudane asercje jest zdefinio- wana w następujący sposób: 092-83277/68+,+-(cid:25)+;+ 956257/6-+(cid:26) 178 PHP4. Kompendium programisty Uwaga na temat funkcji assert_options() W PHP do wersji 4.0.2 włącznie w funkcji +77/68)348327(cid:6)(cid:7) był obecny drobny błąd. Wystę- pował on w przypadku wywołania funkcji w postaci +77/68)348327(cid:6)## $)(cid:7) w celu odczytania ustawionej funkcji obsługi. Mimo że w dokumentacji napisano, że wy- wołanie takie zwróci jedynie nazwę bieżącej funkcji obsługi, to dodatkowo, oprócz zwra- cania nazwy, usuwane było bieżące ustawienie funkcji obsługi. Dlatego jeżeli chcesz użyć funkcji +77/68(cid:6)(cid:7) z funkcją obsługi, upewnij się, że nie jest wywoływana później funkcja +77/68)348327(cid:6)(cid:7) w celu sprawdzenia nazwy zarejestrowanej funkcji. Błąd ten został za- uważony i poprawiony w PHP od wersji 4.0.2. Skrypt zamieszczony na wydruku 10.7 przedstawia przykład zdefiniowania i użycia funkcji wywoływanej przez +77/68(cid:6)(cid:7). Wydruk 10.7. Wykorzystanie funkcji wywoływanej przez ASSERT_CALLBACK 44 /6636)6/436821(cid:25))(cid:26) 092-832+,+-(cid:25)+/+/5+2/95+77/6832(cid:26)  4628(cid:25)8+,/,36./6 868.(cid:26) 4628(cid:25),+77/68(cid:25)(cid:26) ,2/9.+2/+77/6832 ,69(cid:26) 4628(cid:25);49+/+/;2+2/9,6(cid:26) 4628(cid:25) 8. 86 8+,/(cid:26)   +6//7863;+2/092-3,7o91 +77/68)348327(cid:25)## $)5+,+-(cid:26)   o-/2/;;/8+2+;o-3786/ /q +77/68)348327(cid:25)## $)  5 (cid:26)  8 /+. 88/ o+72+3,7o91++7/6- 88/  /+. ,3. /9.+2++7/6-+ 44 +77/68(cid:25) (cid:26)   ,3.  8 Kod z powyższego wydruku jest podobny do tego z wydruku 10.6. Wywołanie asercji powoduje wyświetlenie jednokomórkowej tabeli. Jeżeli nie zostanie zastosowana opcja ## $)  , oprócz informacji zdefiniowanych przez użytkownika wyświetlony zostanie standardowy komu- nikat PHP. Na rysunku 10.5 przedstawiony jest wynik dzniałania skryptu z wydruku 10.7. Mechanizm obsługi błędów w PHP jest ba
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP4. Kompendium programisty
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: