Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
01161 011033 11044681 na godz. na dobę w sumie
PHP5. Zaawansowane tworzenie stron WWW. Szybki start - książka
PHP5. Zaawansowane tworzenie stron WWW. Szybki start - książka
Autor: Liczba stron: 600
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-1171-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Kurs zaawansowanych technik programistycznych w języku PHP

PHP to dziś jeden z najpopularniejszych języków programowania stosowanych do tworzenia aplikacji i witryn internetowych. Za jego pomocą powstały setki tysięcy blogów, galerii, portali, sklepów internetowych, serwisów społecznościowych i innych stron WWW. PHP jest prosty, ma czytelną składnię i duże możliwości, a jego najnowsza wersja -- PHP5 -- umożliwia wykorzystanie wszystkich zalet, jakie płyną z programowania obiektowego. Skrypty PHP łatwo połączyć z bazami danych i stosować razem z innymi technologiami, np. z zyskującym coraz większe uznanie Ajaksem.

Książka 'PHP5. Zaawansowane tworzenie stron WWW. Szybki start' to wprowadzenie do rozwiązywania przy użyciu tego języka bardziej złożonych zagadnień programistycznych. Czytając ją, poznasz zasady programowania obiektowego, komunikacji z bazami danych, zabezpieczania aplikacji i poprawy ich wydajności. Dowiesz się, jak projektować złożone aplikacje sieciowe i tworzyć dokumentację projektową. Przeczytasz o interakcji skryptów PHP z serwerem i technikach uruchamiania ich z poziomu wiersza poleceń. Znajdziesz tu także informacje o tworzeniu aplikacji e-commerce. Ostatni rozdział został poświęcony technologii Ajax w skryptach PHP.

Pokonaj kolejny etap w PHP
i zostań ekspertem w dziedzinie programowania.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

PHP5. Zaawansowane tworzenie stron WWW. Szybki start Autor: Larry Ullman T‡umaczenie: Rados‡aw Meryk ISBN: 78-83-246-1171-3 Tytu‡ orygina‡u: PHP 5 Advanced for the World Wide Web: Visual QuickPro Guide (2nd Edition) Format: B5, stron: oko‡o 6002 Kurs zaawansowanych technik programistycznych w jŒzyku PHP (cid:149) Programowanie obiektowe (cid:149) Komunikacja z bazami danych (cid:149) Korzystanie z technologii Ajax PHP to dzi(cid:156) jeden z najpopularniejszych jŒzyk(cid:243)w programowania stosowanych do tworzenia aplikacji i witryn internetowych. Za jego pomoc„ powsta‡y setki tysiŒcy blog(cid:243)w, galerii, portali, sklep(cid:243)w internetowych, serwis(cid:243)w spo‡eczno(cid:156)ciowych i innych stron WWW. PHP jest prosty, ma czyteln„ sk‡adniŒ i du¿e mo¿liwo(cid:156)ci, a jego najnowsza wersja (cid:150) PHP5 (cid:150) umo¿liwia wykorzystanie wszystkich zalet, jakie p‡yn„ z programowania obiektowego. Skrypty PHP ‡atwo po‡„czy(cid:230) z bazami danych i stosowa(cid:230) razem z innymi technologiami, np. z zyskuj„cym coraz wiŒksze uznanie Ajaksem. Ksi„¿ka (cid:132)PHP5. Zaawansowane tworzenie stron WWW. Szybki start(cid:148) to wprowadzenie do rozwi„zywania przy u¿yciu tego jŒzyka bardziej z‡o¿onych zagadnieæ programistycznych. Czytaj„c j„, poznasz zasady programowania obiektowego, komunikacji z bazami danych, zabezpieczania aplikacji i poprawy ich wydajno(cid:156)ci. Dowiesz siŒ, jak projektowa(cid:230) z‡o¿one aplikacje sieciowe i tworzy(cid:230) dokumentacjŒ projektow„. Przeczytasz o interakcji skrypt(cid:243)w PHP z serwerem i technikach uruchamiania ich z poziomu wiersza poleceæ. Znajdziesz tu tak¿e informacje o tworzeniu aplikacji e-commerce. Ostatni rozdzia‡ zosta‡ po(cid:156)wiŒcony technologii Ajax w skryptach PHP. (cid:149) Projektowanie aplikacji i dokumentowanie kodu (cid:149) Przechowywanie danych sesji w bazie (cid:149) Zabezpieczanie aplikacji WWW (cid:149) Tworzenie element(cid:243)w sklep(cid:243)w internetowych (cid:149) Komunikacja z innymi witrynami WWW (cid:149) Interakcja z serwerem (cid:149) Uruchamianie skrypt(cid:243)w PHP z wiersza poleceæ (cid:149) Korzystanie z repozytorium PEAR (cid:149) Technologia Ajax w PHP Pokonaj kolejny etap w PHP i zostaæ ekspertem w dziedzinie programowania Wydawnictwo Helion ul. Ko(cid:156)ciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Spis treści Spis treści Rozdział 1. Rozdział 2. Rozdział 3. Rozdział 4. Rozdział 5. Wprowadzenie 9 Zaawansowane techniki programowania w PHP 17 Tablice wielowymiarowe ..................................................................................... 18 Definiowanie zaawansowanych funkcji .............................................................. 34 Składnia heredoc .................................................................................................. 47 Korzystanie z funkcji printf() i sprintf() ............................................................... 53 Projektowanie aplikacji WWW 59 Dokumentowanie kodu ........................................................................................ 60 Styl i struktura kodu ............................................................................................. 63 Modularyzacja witryny WWW ............................................................................ 65 Operacje z buforem przeglądarki ........................................................................ 90 Zaawansowane zagadnienia dotyczące baz danych 97 Zapisywanie danych sesji w bazie danych .......................................................... 98 Przetwarzanie kodów pocztowych .................................................................... 112 Tworzenie funkcji składowanych ...................................................................... 126 Wyświetlanie wyników w układzie poziomym ................................................. 132 Techniki zabezpieczania stron WWW 139 Podstawy ............................................................................................................. 140 Sprawdzanie poprawności danych przesyłanych za pomocą formularzy ........... 142 Korzystanie z biblioteki Filter z repozytorium PECL ..................................... 152 Uwierzytelnianie z wykorzystaniem pakietu Auth z repozytorium PEAR ......... 159 Korzystanie z pakietu MCrypt .......................................................................... 173 Techniki e-commerce 185 Pojęcia związane z dziedziną e-commerce ....................................................... 186 Tworzenie bazy danych ..................................................................................... 187 Tworzenie pliku konfiguracyjnego .................................................................... 199 Tworzenie szablonu ........................................................................................... 206 Tworzenie strony głównej ................................................................................. 213 Przeglądanie towarów według kategorii ........................................................... 215 S p i s t r e ś c i 5 Spis treści Rozdział 6. Rozdział 7. Rozdział 8. Rozdział 9. i c ś e r t s i p S Wyświetlanie informacji o produkcie ................................................................ 221 Implementacja koszyka na zakupy .................................................................... 228 Sprawdzanie ważności karty kredytowej .......................................................... 240 Podstawy programowania obiektowego 249 Teoria programowania obiektowego ................................................................. 250 Definiowanie klas ............................................................................................... 251 Tworzenie obiektu ............................................................................................. 256 Atrybut $this ....................................................................................................... 260 Tworzenie konstruktorów .................................................................................. 267 Tworzenie destruktorów .................................................................................... 272 Automatyczne ładowanie klas ............................................................................ 276 Zaawansowane programowanie obiektowe 279 Zaawansowane teorie ......................................................................................... 280 Dziedziczenie klas ............................................................................................. 282 Dziedziczenie konstruktorów i destruktorów ................................................... 287 Przesłanianie metod ........................................................................................... 292 Kontrola dostępu ................................................................................................ 297 Stosowanie operatora zasięgu ............................................................................ 305 Tworzenie składowych statycznych .................................................................. 310 Klasy i metody abstrakcyjne .............................................................................. 316 Praktyczne zastosowania technik obiektowych 325 Przechwytywanie wyjątków ............................................................................... 326 Rozszerzanie klasy Exception ............................................................................ 333 Tworzenie klasy koszyka na zakupy .................................................................. 344 Posługiwanie się klasą koszyka na zakupy ........................................................ 356 PHP w sieci 363 Dostęp do innych witryn WWW ....................................................................... 364 Obsługa gniazd ................................................................................................... 371 Identyfikacja geograficzna adresu IP ................................................................ 379 Korzystanie z cURL ........................................................................................... 384 389 Kompresowanie plików ..................................................................................... 390 PHP-GTK ........................................................................................................... 401 Korzystanie z serwisu cron ................................................................................ 415 Planowanie zadań w systemie Windows ........................................................... 418 Wykorzystanie modułu COM w PHP ............................................................... 420 Rozdział 10. PHP a serwer 6 Rozdział 11. PHP w wierszu polecenia Spis treści 433 Testowanie instalacji .......................................................................................... 434 Uruchamianie fragmentów kodu ....................................................................... 438 Tworzenie skryptu działającego w wierszu polecenia ...................................... 440 Uruchamianie skryptów działających w wierszu polecenia ............................. 444 Wykorzystanie argumentów wiersza polecenia ................................................ 448 Pobieranie danych wejściowych ........................................................................ 453 459 Korzystanie z pakietu Benchmark ..................................................................... 460 Korzystanie z klasy HTML_QuickForm ........................................................... 472 Korzystanie z pakietu Mail_Mime .................................................................... 485 497 Wprowadzenie do Ajaksa ................................................................................... 498 Prosty przykład ................................................................................................... 500 Ajax w pełnej krasie ........................................................................................... 522 Debugowanie aplikacji Ajax .............................................................................. 539 545 Czym jest XML? ................................................................................................ 546 Składnia XML .................................................................................................... 548 Atrybuty, puste elementy i encje ....................................................................... 552 Definicje typu dokumentów .............................................................................. 556 Parsowanie dokumentu XML ............................................................................ 564 Tworzenie kanałów RSS .................................................................................... 578 Skorowidz 585 Rozdział 12. Korzystanie z PEAR Rozdział 13. Ajax Rozdział 14. XML i PHP S p i s t r e ś c i 7 Projektowanie aplikacji WWW Rozdział 2. Projektowanie aplikacji WWW Kariera programisty PHP zazwyczaj rozpoczyna się od tworzenia pojedynczych skryptów, przeznaczonych do wykonania określonego zadania. Na ich bazie zwykle zaczynamy definiować coraz to więcej plików, aż w końcu powstaje aplikacja internetowa. W końcu tworzymy witryny działające na własnym serwerze, a nawet korzystające z wielu serwerów. Niezależnie od stopnia złożoności projektu, nauczenie się nowych i lepszych sposobów tworzenia aplikacji internetowych to istotna część życia programisty języka PHP. Warto o tym pamiętać. W tym rozdziale skoncentrowano się na tworzeniu aplikacji internetowych wykraczających poza poziom początkującego lub średnio zaawansowanego programisty. Założono, że Czytelnicy potrafią posługiwać się standardowymi mechanizmami stosowanymi w aplikacjach internetowych, takimi jak sesje i szablony. Omówione tematy służą zarówno ugruntowaniu podstaw (które w dużych projektach nabierają większego znaczenia), jak i zmianie sposobu tworzenia stron WWW. Rozdział kończy się omówieniem dwóch rodzajów buforowania usprawniających komunikację pomiędzy częścią kliencką a serwerową aplikacji. P r o j e k t o w a n i e a p l i k a c j i W W W 59 Rozdział 2. Dokumentowanie kodu Właściwe dokumentowanie kodu jest tak ważne, że życzyłbym sobie, aby interpreter PHP generował błędy w przypadku napotkania kodu pozbawionego komentarzy. Wiem z mojego wieloletniego doświadczenia w nauczaniu języka PHP i kontaktów z Czytelnikami, że komentarze są bardzo często zaniedbywane. Czasami programiści odkładają wstawianie komentarzy na tzw. „później” (którego zwykle nigdy nie ma). Prawidłowe dokumentowanie kodu jest czymś, co warto robić dla własnego dobra, dla dobra klientów, współpracowników oraz programistów, którym przypadnie w udziale wprowadzanie poprawek do naszej pracy. Trzeba to robić nawet wtedy, a może zwłaszcza wtedy, gdy to my sami będziemy tymi programistami. Można zaryzykować stwierdzenie, że dokumentacji nigdy za wiele. Warto robić notatki dotyczące funkcji, zmiennych, fragmentów kodu i całych stron. Należy także pamiętać, że dokumentowanie trzeba rozpocząć razem z kodowaniem i kontynuować przez cały czas trwania prac. Powrócenie do kodu w późniejszym czasie w celu wprowadzenia notatek to nie to samo (często się zdarza, że jeśli czegoś nie zrobimy od razu, nie zrobimy tego nigdy). Coś, co wydaje się oczywiste w momencie tworzenia, zaledwie trzy miesiące później okazuje się bardzo zagmatwane. u d o k e i n a w o t n e m u k o D 60 Komentarze i spacje w przykładach w tej książce Z powodu ograniczeń wynikających z formatu książkowego skrypty zaprezentowane w tej książce nigdy nie są tak dobrze udokumentowane, jakbym sobie tego życzył (i jak powinienem je udokumentować). Istnieją jednak granice w zapełnianiu cennego miejsca w książce notatkami w stylu: // Opracował: Larry E. Ullman. Zakładam, że Czytelnicy uczą się PHP ode mnie i z tej książki. W związku z tym w kwestii dokumentowania kodu i układu komentarzy zalecam przyjęcie wzoru z tej książki za niezbędne minimum. Objętość komentarzy w tej książce być może nie jest zbyt mała, ale bez szkody dla nikogo mogłaby być dwukrotnie większa. Projektowanie aplikacji WWW Aby właściwie udokumentować kod: 1. Na początku skryptu dokładnie opisz wszystkie metawłaściwości. Metawłaściwości odnoszą się do informacji na temat pliku: kto go utworzył, kiedy, dlaczego, w ramach jakiej witryny itp. Można tu również umieścić informacje dotyczące autora skryptu, nawet jeśli wydaje się nam, że nikt inny nigdy nie będzie go oglądał. 2. Opisz wszystkie elementy środowiska. Jest to dokładniejszy typ dokumentacji od tej, którą stworzyliśmy w punkcie 1. Przez pojęcie „elementy środowiska” rozumiem wszystko to, co musi istnieć lub być wykonane, aby skrypt mógł działać zgodnie z przeznaczeniem. Czy skrypt pobiera informacje z bazy danych? Czy wymaga repozytorium PEAR lub innego kodu zewnętrznego? Czy korzysta z szablonu? Ogólnie rzecz biorąc, należy wymienić wszystkie pliki, z którymi skrypt się komunikuje lub z których korzysta. Jeśli skrypt ma jakieś wymagania dotyczące minimalnej wersji PHP, również to należy zanotować. 3. Dokładnie opisz wszystkie funkcje. Funkcje należy opisywać tak samo jak skrypty: ich przeznaczenie, zależności, pobierane wartości, zwracane wyniki itp. 4. Zrób notatki opisujące przeznaczenie zmiennych, jeśli nazwy nie są oczywiste dla początkujących programistów. Nazwy zmiennych powinny dobrze opisywać ich przeznaczenie. Nie zawsze jednak można założyć, że będą one czytelne dla wszystkich. 5. Objaśnij przeznaczenie fragmentów kodu. D o k u m e n t o w a n i e k o d u 61 Rozdział 2. 6. Opisz przeznaczenie instrukcji warunkowych. Upewnij się, że powód użycia warunku nie ulega wątpliwości oraz że pożądane wyniki są czytelne. Jeśli w instrukcji warunkowej występuje odwołanie do określonej liczby lub wartości, napisz w komentarzu, do czego służy ta liczba lub wartość. 7. Oznacz zamykające nawiasy klamrowe złożonych funkcji i konstrukcji sterujących (instrukcji warunkowych, pętli itp.). W moich skryptach bardzo często występuje zapis następującej postaci: } // Koniec funkcji nazwa_funkcji(). 8. Pamiętaj o zaktualizowaniu komentarzy po wprowadzeniu modyfikacji w kodzie. Oto częsty błąd, stwarzający wiele problemów: zaktualizowano kod, ale bez modyfikacji w komentarzach. Kiedy powrócimy do kodu za jakiś czas, przeczytamy, że kod wykonuje operację X, podczas gdy w rzeczywistości wykonuje operację Y. W związku z tym trudno nam będzie stwierdzić, czy działa tak, jak powinien. Wskazówki (cid:132) W modułach wchodzących w skład repozytorium PEAR wykorzystuje się program phpDocumentor (www.phpdoc.org — rysunek 2.1), który automatycznie generuje dokumentację pakietów. Narzędzie to jest napisane w PHP i przypomina popularny system JavaDoc (używany przez programistów Javy). Jego działanie polega na analizowaniu kodu i tworzeniu odpowiednich komentarzy w skryptach. Automatycznie wygenerowanych komentarzy nie należy używać zamiast komentarzy pisanych samodzielnie, ale można je wykorzystać jako standardową dokumentację stron. (cid:132) Nieco przestarzały, ale w dalszym ciągu przydatny jest dokument o nazwie PHP Coding Standard, opisujący standardy kodowania w PHP. Warto go przeczytać, nawet jeśli nie zawsze będziemy stosować się do opisanych w nim zasad. Niestety, adres URL dokumentu często się zmienia, zatem by go znaleźć, trzeba skorzystać z wyszukiwarki. (cid:132) Wiele sugestii dotyczących sposobu wprowadzania komentarzy, ich stylu i struktury można również znaleźć, studiując standardy kodowania dla innych języków. u d o k e i n a w o t n e m u k o D 62 Styl w całości zależy od preferencji programisty. Wszelkie rekomendacje, włącznie z tymi, których ja udzielam, są tylko sugestiami. Trzeba jedynie dbać o zachowanie spójności. Projektowanie aplikacji WWW Styl i struktura kodu Drugim tematem, który można przypisać do kategorii „warto przestrzegać tych zasad, choć właściwie nie służą niczemu konkretnemu”, jest styl kodowania i struktury kodu. Najbardziej podstawowe zasady dotyczące struktury kodu mówią o sposobach stosowania wcięć w kodzie, pozostawiania pustych wierszy, stosowania nawiasów klamrowych itp. Samo stosowanie właściwej składni implikuje określoną strukturę kodu, są jednak dwie „złote” zasady: (cid:88) należy zachować spójność kodu, (cid:88) należy zadbać o to, by kod był czytelny. Trzeba bardzo mocno podkreślić, że zachowanie spójności ma znaczenie podstawowe. Niespójność prowadzi do powstania wielu błędów i wymaga dodatkowego czasu, który trzeba poświęcić na ich usuwanie. Styl to sprawa znacznie bardziej subiektywna. Obejmuje stosowanie konwencji nazewnictwa (stron, zmiennych, klas i funkcji), miejsc, w których można definiować funkcje, sposobów ich organizacji itp. S t y l i s t r u k t u r a k o d u Rysunek 2.1. Macierzysta strona programu phpDocumentor 63 Rozdział 2. Aby kod miał właściwą strukturę i styl: (cid:88) Zawsze używaj nawiasów klamrowych, nawet jeśli z punktu widzenia poprawności składniowej są one zbędne. Wielu programistów ignoruje to zalecenie, jednak stosowanie nawiasów klamrowych w każdym przypadku umożliwia uniknięcie wielu błędów. (cid:88) Stosuj wcięcia dla bloków kodu (np. treści instrukcji warunkowych lub instrukcji wewnątrz funkcji) — najlepiej o szerokości jednej tabulacji lub czterech spacji (z punktu widzenia formalnego należy używać spacji zamiast tabulacji, ale programiści często używają tabulacji, ponieważ są one wygodniejsze). Właściwe stosowanie wcięć w kodzie bezpośrednio przekłada się na jego czytelność. Wcięcia umożliwiają oznaczenie czytelnych relacji pomiędzy kodem a strukturami sterującymi (pętlami, instrukcjami warunkowymi itp.), funkcjami, klasami i innymi elementami, których częścią jest określony kod. (cid:88) Używaj pustych wierszy do wizualnego oddzielania fragmentów kodu. (cid:88) Tam, gdzie pozwala na to składnia, używaj spacji pomiędzy słowami, argumentami funkcji, operatorami itp. (ogólnie rzecz biorąc, spacje wewnątrz kodu w PHP nie mają znaczenia). (cid:88) Umieszczaj funkcje na początku skryptu lub w osobnym pliku. (cid:88) Zawsze używaj formalnych znaczników PHP. Ponieważ krótkie znaczniki ( ? ? ) mają specjalne znaczenie w języku XML, w przypadku korzystania z XML zawsze należy używać formalnych znaczników PHP ( ?php ? ). Więcej informacji na ten temat można znaleźć w rozdziale 14., „XML i PHP”. Zaleca się używanie formalnych znaczników PHP niezależnie od sytuacji, ponieważ jest to najlepszy sposób zapewnienia zgodności kodu pomiędzy różnymi serwerami. u d o k a r u t k u r t s i l y t S 64 Struktura serwisu Podczas tworzenia większych aplikacji internetowych istotne są nie tylko struktura kodu i jego dokumentowanie, ale także — w równym stopniu — struktura serwisu, czyli sposób organizacji plików i ich zapisywania na serwerze. Zachowanie właściwej struktury serwisu ma na celu poprawę bezpieczeństwa i ułatwienie administracji, a także poprawę skalowalności, przenośności i łatwości wprowadzania zmian. Kluczowe znaczenie dla stworzenia właściwej struktury serwisu ma podział kodu i aplikacji na strony i katalogi zgodnie z ich zastosowaniem, przeznaczeniem i funkcją. Wewnątrz głównego katalogu dokumentów witryny, który nosi nazwę html, powinien się znaleźć osobny katalog na grafikę (tak przynajmniej czyni większość programistów), osobny dla klas (jeśli używamy technik obiektowych), dla funkcji itp. Co więcej, ze względów bezpieczeństwa zalecam stosowanie własnych nazw folderów. Im trudniej złośliwemu użytkownikowi odgadnąć nazwy folderów i dokumentów, tym lepiej. Jeśli ktoś zastosuje nazwę admin dla administracyjnej części witryny, z punktu widzenia bezpieczeństwa nie wyświadczy sobie przysługi. (cid:88) Zaleca się stosowanie rozszerzenia .php dla plików, których zawartość ma być interpretowana jako kod PHP (w przypadku skryptów włączanych, takich jak klasy i skrypty konfiguracyjne, można stosować inne rozszerzenia). Dozwolone rozszerzenia plików określa konfiguracja serwera WWW, jednak w społeczności programistów PHP istnieje trend stosowania rozszerzenia .php jako domyślnego. Projektowanie aplikacji WWW Modularyzacja witryny WWW Wiem z doświadczenia, że większość programistów rozpoczyna swoją „krzywą rozwoju” od pisania jednostronicowych aplikacji, które wykonują proste operacje. Aplikacje te przekształcają się w narzędzia złożone z dwóch stron i na koniec w wielostronicowe witryny, w których stosuje się szablony, sesje i (lub) pliki cookie do powiązania ich ze sobą. W przypadku wielu programistów krzywa rozwoju jest właściwie „krzywą dzwonu”. W miarę zdobywania doświadczenia programista PHP zaczyna wykonywać tę samą liczbę operacji za pomocą mniejszej liczby stron — na przykład wykorzystuje ten sam skrypt zarówno do wyświetlania, jak i do obsługi formularza. Inni zaawansowani programiści zaczynają tworzyć pojedyncze skrypty, które wykonują mniej działań, bowiem każdy ze skryptów koncentruje się na osobnym zadaniu. Jest to jedna z przesłanek modularyzacji witryny WWW. Dla potrzeb tego przykładu utworzę witrynę-atrapę (tzn. taką, która nie będzie wykonywała zbyt wielu działań) i podzielę ją na części. Z pokazanego przykładu Czytelnicy dowiedzą się, w jaki sposób wydziela się poszczególne funkcje, jak należy je zorganizować i połączyć ze sobą. Zamiast używania wielu stron (contact.php, about.php, index.php itp.), cała aplikacja będzie działać za pośrednictwem jednej głównej strony. Strona będzie włączała odpowiedni moduł na podstawie wartości przekazywanych za pośrednictwem adresu URL. M o d u l a r y z a c j a w i t r y n y W W W 65 Rozdział 2. Tworzenie pliku konfiguracyjnego Każda aplikacja internetowa, jaką tworzę, rozpoczyna się od pliku konfiguracyjnego. Pliki konfiguracyjne spełniają kilka funkcji. Cztery najważniejsze to: (cid:88) definicja stałych, (cid:88) zdefiniowanie parametrów obowiązujących w całej witrynie, (cid:88) utworzenie funkcji użytkownika, (cid:88) obsługa błędów. Ogólnie rzecz biorąc, wszystkie dane, do których jest potrzebny dostęp z poziomu każdej strony w witrynie, powinny być zapisane w pliku konfiguracyjnym (jeśli funkcja nie będzie używana przez większość stron witryny, lepiej umieścić ją w osobnym pliku; w ten sposób unikamy dodatkowych kosztów związanych z definiowaniem funkcji na stronach, na których nie będzie używana). Aby utworzyć plik konfiguracyjny: 1. Utwórz nowy skrypt PHP w edytorze tekstu lub środowisku IDE (skrypt 2.1): ?php # Skrypt 2.1 - config.inc.php Skrypt 2.1. Plik konfiguracyjny to skrypt o kluczowym znaczeniu. Definiuje stałe obowiązujące w całym skrypcie oraz decyduje o sposobie obsługi błędów 1 ?php # Skrypt 2.1 - config.inc.php 2 3 /* 4 *Nazwa pliku: config.inc.php 5 *Utworzony przez: Larry E. Ullman z firmy DMC Insights, Inc. 6 *Kontakt: LarryUllman@DMCInsights.com, http://www.dmcinsights.com 7 *Data ostatniej modyfikacji: 8 listopada 2006 8 * 9 *Plik konfiguracyjny spełnia następujące zadania: 10 * - definiuje wszystkie parametry witryny w jednej lokalizacji, 66 W W W y n y r t i w a j c a z y r a l u d o M Projektowanie aplikacji WWW Skrypt 2.1. — ciąg dalszy 11 * - zawiera adresy URL i URI w formie stałych, 12 * - określa sposób obsługi błędów. 13 */ 14 15 # ******************** # 16 # ***** PARAMETRY ***** # 17 18 // Komunikaty o błędach są wysyłane pocztą elektroniczną. 19 $contact_email = adres@przyklad.pl ; 20 21 // Sprawdzamy, czy skrypt pracuje na serwerze lokalnym, 22 // czy na serwerze produkcyjnym: 23 if (stristr($_SERVER[ HTTP_HOST ], local ) || (substr($_SERVER[ HTTP_HOST ], 0, 7) == 192.168 )) { 24 $local = TRUE; 25 } else { 26 $local = FALSE; 27 } 28 29 // Określenie lokalizacji plików i adresu URL witryny: 30 // umożliwienie pracy na innych serwerach. 31 if ($local) { 32 33 // Na serwerze lokalnym skrypt zawsze działa w trybie diagnostycznym: 34 $debug = TRUE; 35 36 // Definicja stałych: 37 define ( BASE_URI , /ścieżka/do/folderu/html/ ); 38 define ( BASE_URL , http://localhost/katalog/ ); 39 define ( DB , /ścieżka/do/mysql.inc.php ); 40 41 } else { 42 43 define ( BASE_URI , /ścieżka/do/produkcyjnego/folderu/html/ ); 44 define ( BASE_URL , http://www.przyklad.com/ ); 45 define ( DB , /ścieżka/do/produkcyjnego/mysql.inc.php ); 46 47 } 48 49 /* 50 *Najważniejsze ustawienia… 51 *Zmienna $debug służy do ustawienia obsługi błędów. 52 *W celu debugowania określonej strony należy dodać poniższy kod do strony index.php: 53 54 if ($p == thismodule ) $debug = TRUE; 55 require_once( ./include/config.inc.php ); 56 57 *W celu debugowania całej witryny należy ustawić zmienną $debug 58 59 $debug = TRUE; 60 61 *przed następną instrukcją warunkową. 62 */ M o d u l a r y z a c j a w i t r y n y W W W 67 Rozdział 2. Skrypt 2.1. — ciąg dalszy 63 64 // Zakładamy, że debugowanie wyłączono. 65 if (!isset($debug)) { 66 $debug = FALSE; 67 } 68 69 # ***** PARAMETRY ***** # 70 # ******************** # 71 72 73 # **************************** # 74 # ***** OBSŁUGA BŁĘDÓW ***** # 75 76 // Utworzenie procedury obsługi błędów. 77 function my_error_handler ($e_number, $e_message, $e_file, $e_line, $e_vars) { 78 79 global $debug, $contact_email; 80 81 // Stworzenie komunikatu o błędzie. 82 $message = Wystąpił błąd w skrypcie $e_file w wierszu $e_line: \n br / $e_message\n br / ; 83 84 // Umieszczenie daty i godziny. 85 $message .= Data/godzina: . date( n-j-Y H:i:s ) . \n br / ; 86 87 // Dołączenie zmiennej $e_vars do komunikatu $message. 88 $message .= pre . print_r ($e_vars, 1) . /pre \n br / ; 89 90 if ($debug) { // Wyświetlenie komunikatu o błędzie. 91 92 echo p class= error . $message . /p ; 93 94 } else { 95 96 // Zarejestrowanie błędu: 97 error_log ($message, 1, $contact_email); // Wysłanie wiadomości email. 98 99 // Wyświetlenie komunikatu o błędzie tylko wtedy, gdy nie jest to błąd klasy NOTICE lub STRICT. 100 if ( ($e_number != E_NOTICE) ($e_number 2048)) { 101 echo p class= error Wystąpił błąd systemowy. Przepraszamy za niedogodności. /p ; 102 } 103 104 } // Koniec instrukcji IF $debug. 105 106 } // Koniec definicji funkcji my_error_handler(). 107 108 // Użycie procedury obsługi błędów: 109 set_error_handler ( my_error_handler ); 110 111 # ***** OBSŁUGA BŁĘDÓW ***** # 112 # **************************** # 113 114 ? 68 W W W y n y r t i w a j c a z y r a l u d o M 2. Dodaj komentarze opisujące naturę i przeznaczenie strony: /* * Nazwa pliku: config.inc.php * Utworzony przez: Larry E. Ullman z firmy (cid:166)DMC Insights, Inc. * Kontakt: LarryUllman@DMCInsights.com, (cid:166)http://www.dmcinsights.com * Data ostatniej modyfikacji: 8 listopada 2006 * * Plik konfiguracyjny spełnia następujące (cid:166)zadania: * - definiuje wszystkie parametry witryny (cid:166)w jednej lokalizacji; * - zawiera adresy URL i URI w formie stałych; * - określa sposób obsługi błędów. */ Ponieważ plik konfiguracyjny jest wspólny dla całej witryny, powinien być najlepiej udokumentowanym skryptem w całym serwisie. 3. Ustaw adres e-mail, pod który będą przesyłane zgłoszenia błędów: $contact_email = adres@przyklad.com ; W przypadku „żywych” (tzw. produkcyjnych) witryn preferuję sposób powiadamiania o błędach za pomocą poczty elektronicznej. W związku z tym zadeklarowałem zmienną, która definiuje adres docelowy dla wiadomości. Może to być adres programisty w fazie testowej witryny lub adres administratora po przekazaniu jej do eksploatacji. 4. Sprawdź, czy skrypt działa na serwerze „produkcyjnym” czy testowym. if (stristr($_SERVER[ HTTP_HOST ], (cid:166) local ) || (cid:166)(substr($_SERVER[ HTTP_HOST ], 0, 7) == (cid:166) 192.168 )) { $local = TRUE; } else { $local = FALSE; } Projektowanie aplikacji WWW Ja zawsze najpierw tworzę skrypty na serwerze lokalnym, a następnie kopiuję ukończoną stronę na serwer docelowy. Te dwa środowiska charakteryzują się innymi ustawieniami, zatem plik konfiguracyjny powinien potwierdzić, w jakim środowisku pracuje serwis. W celu sprawdzenia, czy witryna pracuje lokalnie, wykorzystałem dwie instrukcje warunkowe sprawdzające parametr $_SERVER[ HTTP_HOST ]. Jeśli zmienna zawiera słowo local (na przykład http://localhost lub http://powerbook.local) albo jeśli adres IP witryny zaczyna się od 192.168 (co wskazuje na sieć lokalną), wówczas ustawiamy zmienną $local na wartość TRUE. W przeciwnym przypadku ustawiamy ją na FALSE. 5. Ustaw stałe specyficzne dla serwera. if ($local) { $debug = TRUE; define ( BASE_URI , (cid:166) /ścieżka/do/folderu/html/ ); define (cid:166)( BASE_URL , http://localhost/ (cid:166)katalog/ ); define ( DB , (cid:166) /ścieżka/do/mysql.inc.php ); } else { define ( BASE_URI , /ścieżka/ (cid:166)do/produkcyjnego/folderu/html/ ); define( BASE_URL , (cid:166) http://www.przyklad.com/ ); define ( DB , /ścieżka/ (cid:166)do/produkcyjnego/mysql.inc.php ); } M o d u l a r y z a c j a w i t r y n y W W W 69 Rozdział 2. W aplikacjach internetowych, które tworzę, zawsze używam tych trzech stałych. Stała BASE_URI zawiera bezwzględną ścieżkę do głównego folderu witryny na serwerze (rysunek 2.2). Dzięki tej stałej można z łatwością korzystać z bezwzględnych adresów URL w przypadku, gdy skrypt włącza plik. Stała BASE_URL definiuje nazwę hosta i katalog (jeśli serwis działa w podkatalogu). Na serwerze testowym może to być na przykład http://localhost/r02/. Na koniec ustawiliśmy zmienną DB zawierającą bezwzględną ścieżkę do pliku zawierającego parametry połączeń z bazą danych. Ze względów bezpieczeństwa plik ten należy zapisać poza głównym katalogiem dokumentów witryny. Zwróćmy uwagę na to, że dla każdej stałej istnieją dwie reprezentacje: jedna dla serwera testowego i druga dla produkcyjnego. W przypadku serwera testowego (zmienna $local ma wartość TRUE) dodatkowo włączyłem debugowanie. Wkrótce opiszę to dokładniej. 6. Ustawiamy poziom debugowania. if (!isset($debug)) { $debug = FALSE; } Do określenia sposobu obsługi błędów użyłem zmiennej $debug. Jeśli witryna działa lokalnie, zmienna $debug ma wartość TRUE. Aby można było debugować skrypt w serwisie przekazanym do eksploatacji, trzeba użyć następującego wiersza: $debug = TRUE; przed włączeniem pliku konfiguracyjnego. We wszystkich pozostałych przypadkach debugowanie jest wyłączone. W W W y n y r t i w a j c a z y r a l u d o M 70 Rysunek 2.2. Główna strona witryny jest zapisana w głównym folderze serwisu. Wewnątrz tego folderu mogą być zdefiniowane podfoldery, na przykład grafika, include lub moduly Projektowanie aplikacji WWW 7. Rozpocznij funkcję obsługi błędów. 8. Skonstruuj komunikat o błędzie: function my_error_handler ($e_number, (cid:166)$e_message, $e_file, $e_line, (cid:166)$e_vars) { global $debug, $contact_email; PHP umożliwia zdefiniowanie własnej funkcji obsługi błędów, którą można wykorzystywać zamiast funkcji wbudowanej. Więcej informacji na temat tego procesu, a także na temat składni funkcji można znaleźć w podręczniku PHP online lub w mojej książce PHP i MySQL. Dynamiczne strony WWW. Szybki start (Helion 2006). W funkcji wykorzystywane będą dwie zmienne globalne. $message = Wystąpił błąd w skrypcie (cid:166) $e_file w wierszu $e_line: \n br (cid:166)/ $e_message\n br / ; $message .= Data/godzina: . (cid:166)date( n- j-Y H:i:s ) . \n br / ; $message .= pre . print_r ($e_vars, 1) . (cid:166) /pre \n br / ; W celu ułatwienia diagnozowania błędów komunikat o błędzie powinien być opisowy. Powinien zawierać co najmniej nazwę pliku, w którym wystąpił błąd, oraz numer wiersza. Następnie w komunikacie powinna znaleźć się data i godzina wystąpienia błędu oraz wszystkie występujące zmienne. To sporo danych (rysunek 2.3), ale są one potrzebne, by można było szybko zlokalizować i usunąć błąd. M o d u l a r y z a c j a w i t r y n y W W W 71 Rysunek 2.3. Oto niektóre informacje zgłaszane w przypadku wystąpienia błędu Rozdział 2. 9. Jeśli włączono debugowanie, wyświetlamy komunikat o błędzie: if ($debug) { echo p class= error . $message . (cid:166) /p ; Jeśli włączono debugowanie, w przeglądarce WWW zostanie wyświetlony pełny komunikat o błędzie (rysunek 2.4). Jest to doskonały mechanizm w fazie projektowania witryny i olbrzymia luka w systemie bezpieczeństwa dla serwisu w eksploatacji. Kod należy odpowiednio zmodyfikować, tak aby pasował do środowiska wybranego serwisu. 10. Jeśli debugowanie wyłączono, przesyłamy komunikat o błędzie pocztą elektroniczną i wyświetlamy domyślny komunikat: } else { error_log ($message, 1, (cid:166)$contact_email); if ( ($e_number != E_NOTICE) (cid:166)($e_number 2048)) { echo p class= error Wystąpił (cid:166)błąd systemowy. Przepraszamy za (cid:166)niedogodności. /p ; } } // Koniec instrukcji IF $debug. W przypadku witryny przekazanej już do eksploatacji nie należy wyświetlać szczegółowego komunikatu o błędzie (chyba że dla strony czasowo włączono tryb diagnostyczny). Można to zrobić za pomocą funkcji error_log(), jeśli przekaże się do niej liczbę 1 jako drugi argument. Użytkownik powinien jednak wiedzieć, że coś nie działa tak jak powinno, dlatego wyświetlamy domyślny komunikat (rysunek 2.5). Jeśli błąd jest klasy NOTICE lub STRICT (o numerze 2048), nie należy wyświetlać komunikatu o błędzie, ponieważ błąd prawdopodobnie nie przeszkadza w działaniu strony. W W W y n y r t i w a j c a z y r a l u d o M 72 Rysunek 2.4. Wyświetlanie komunikatów o błędach podczas diagnostycznego uruchamiania strony Rysunek 2.5. W serwisach przekazanych do eksploatacji błędy należy obsługiwać bardziej dyskretnie (i bezpieczniej) Projektowanie aplikacji WWW 11. Zakończ funkcję, zainicjuj używanie zdefiniowanej procedury obsługi błędów i zakończ stronę: } // Koniec definicji funkcji my_error_handler(). set_error_handler( my_err_handler ); ? 12. Zapisz plik jako config.inc.php i umieść na serwerze WWW (w podfolderze include). Układ katalogów dla przykładowego serwisu pokazano na rysunku 2.2. Tworzenie pliku konfiguracji bazy danych W tym przykładzie nie utworzyłem pliku konfiguracji bazy danych, ponieważ witryna nie korzysta z baz danych. Gdyby była potrzebna baza danych, trzeba by napisać plik mysql.inc.php (lub postgresql.inc.php, oracle.inc.php czy jakiś inny), którego zadaniem byłoby nawiązanie połączenia z bazą danych. W takim pliku definiuje się również funkcje wykonujące operacje na bazie danych aplikacji. Plik można zapisać w katalogu include, choć najlepiej zapisać go poza katalogiem dokumentów serwisu WWW. W pliku config.inc.php zdefiniowano stałą DB, która określa bezwzględną ścieżkę do tego pliku na serwerze. Jeśli na jakiejś stronie jest potrzebne połączenie z bazą danych, można włączyć potrzebny plik za pomocą następującej instrukcji: require_once(DB); Ponieważ stała DB reprezentuje bezwzględną ścieżkę do pliku, nie ma znaczenia, czy włączany skrypt znajduje się w głównym folderze, czy w podkatalogu. M o d u l a r y z a c j a w i t r y n y W W W 73 Rozdział 2. Tworzenie szablonu HTML Niemal we wszystkich większych aplikacjach stosuje się szablony HTML. Można w tym celu skorzystać z technologii Smarty (http://smarty. php.net) lub wielu innych systemów obsługi szablonów. Ja jednak preferuję użycie dwóch prostych plików: nagłówka, który zawiera wszystko, co ma się znaleźć na stronie do miejsca, w którym występuje specyficzna treść, oraz stopki zawierającej pozostałą część strony (rysunek 2.6). Dla potrzeb tego szablonu skorzystałem z projektu, który znalazłem w witrynie Open Source Web Design (www.oswd.org) — doskonałego źródła materiałów do projektowania aplikacji internetowych. Autorem tego projektu (rysunek 2.7) jest Anthony Yeung (www.smallpark.org). Użyłem go grzecznościowo, dzięki uprzejmości autora. Aby stworzyć strony korzystające z szablonów: 1. Zaprojektuj stronę HTML w edytorze tekstowym lub WYSIWYG. Aby przystąpić do tworzenia szablonu witryny WWW, należy zaprojektować standardową stronę HTML niezależną od kodu PHP. Dla potrzeb tego przykładu, jak już wspominałem, skorzystam z projektu Leaves CSS (rysunek 2.7). Uwaga! W celu zaoszczędzenia miejsca plik CSS dla tego przykładu (decydujący o układzie strony) nie został dołączony do książki. Można go pobrać ze strony WWW towarzyszącej książce (www.DMCInsights.com/phpvqp2/ — patrz strona Extras). Można też uruchomić przykład bez arkusza CSS (szablon będzie działał, tylko będzie mniej estetyczny). 2. Skopiuj do nowego dokumentu treść szablonu od pierwszego wiersza do miejsca, w którym zaczyna się treść specyficzna dla strony (skrypt 2.2). Tak więc, skopiuj tekst począwszy od: !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 (cid:166)Transitional//EN http://www.w3.org/ (cid:166)TR/xhtml1/DTD/xhtml1-transitional.dtd 74 W W W y n y r t i w a j c a z y r a l u d o M html xmlns= http://www.w3.org/ (cid:166)1999/xhtml head aż do: div id= content !-- Koniec nagłówka. -- W pierwszym pliku są początkowe znaczniki HTML (począwszy od znacznika DOCTYPE, przez nagłówek, aż do początku treści strony). Jest w nim również kod tworzący kolumnę łączy po lewej stronie okna przeglądarki oraz margines po prawej (rysunek 2.7). W tym kroku pominąłem duży fragment kodu HTML. Kompletny kod zamieszczono w skrypcie 2.2. Można go również pobrać ze strony WWW towarzyszącej książce. Rysunek 2.6. Bardzo prosty przykład szablonu witryny: obszar treści specyficznej dla strony został otoczony dwoma plikami włączanymi Rysunek 2.7. Szablon używany dla wszystkich stron w tej witrynie Projektowanie aplikacji WWW Skrypt 2.2. Plik nagłówka rozpoczyna szablon HTML Zawiera również plik CSS oraz wykorzystuje zmienną PHP w celu zdefiniowania tytułu okna przeglądarki 1 ?php # Skrypt 2.2 - header.html 2 3 // Ta strona rozpoczyna nagłówek HTML witryny. 4 5 // Sprawdzenie wartości zmiennej $page_title: 6 if (!isset($page_title)) $page_title = Domyślny tytuł strony ; 7 ? 8 !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//PL http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd 9 html xmlns= http://www.w3.org/1999/xhtml 10 head 11 meta http-equiv= Content-Type content= text/html; charset=windows-1250 / 12 title ?php echo $page_title; ? /title 13 link href= ./include/style.css rel= stylesheet type= text/css / 14 /head 15 body 16 div id= container 17 div id= header 18 h1 Twoja witryna /h1 19 p lubię podpisy /p 20 form name= form1 id= form1 method= get action= index.php 21 input type= text name= terms value= Szukaj... / 22 input type= hidden name= p value= search / 23 input class= button type= submit name= Wyślij value= GO / 24 /form 25 /div 26 27 div id= navigation 28 ul id= navlist 29 li a href= index.php Strona główna /a /li 30 li a href= index.php?p=about O nas /a /li 31 li a href= index.php?p=this To /a /li 32 li a href= index.php?p=that Tamto /a /li 33 li a href= index.php?p=contact Kontakt /a /li 34 li p strong Niewielka reklama usług. /strong br/ Umieść swoje informacje lub zdjęcia w tym niewielkim, choć bardzo przydatnym obszarze. /p /li 35 /ul 36 37 /div 38 div id= sidebar 39 h2 Margines /h2 40 p Doszedłeś do marginesu, umieść aktualności, łącza lub dowolne informacje tekstowe. Będę tu pisał bezsensowne teksty, aż poczujecie się bardzo senni. Oczywiście nie warto marnować czasu na czytanie tej strony. Bardziej przydałoby się trochę łaciny. 41 p Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas venenatis enim ut purus. In hac habitasse platea dictumst. Sed rutrum tempus turpis. Sed rhoncus dui eu ipsum. Pellentesque tincidunt. Quisque pulvinar. Morbi quis leo sit amet neque tempo fringilla.Pellentesque faucibus metus vitae erat. Quisque a urna ut sapien accumsan ornare Nulla porta pretium eros. Fusce velit erat, accumsan pellentesque, porttitor eu, commodo quis augue. a href= # Fusce convallis ipsum eget felis /a . /p M o d u l a r y z a c j a w i t r y n y W W W 75 Rozdział 2. 3. Zmodyfikuj wiersz zawierający tytuł strony w taki sposób, by przyjął następującą postać: Skrypt 2.2. — ciąg dalszy title ?php echo $page_title; ? /title Chciałbym, aby tytuł strony (wyświetlający się na początku strony w przeglądarce WWW — na rysunku 2.7 wyświetla się jako Tytuł strony) można było definiować osobno dla każdej ze stron. W tym celu ustawię zmienną, której wartość wyświetli interpreter PHP. 4. Przed kodem HTML strony utwórz sekcję kodu PHP, która sprawdza wartość zmiennej $page_title. ?php # Script 2.2 - header.html if (!isset($page_title)) $page_title = (cid:166) Domyślny tytuł strony ; ? Na wypadek, gdyby skrypt PHP włączył plik nagłówkowy bez ustawienia zmiennej $page_title, w tym fragmencie kodu PHP zadeklarowano domyślny tytuł strony (oczywiście można go zmienić na bardziej opisowy). Gdyby 42 p Aenean eros arcu, condimentum nec, dapibus ut, tincidunt sit amet, urna. Quisque viverra, eros sed imperdiet iaculis, est risus facilisis quam, id malesuada arcu nulla luctus urna. /p /div 43 44 div id= content 45 !-- Koniec nagłówka. -- nie było tego fragmentu, a opcja zgłaszania błędów byłaby włączona, tytuł strony w przeglądarce mógłby wyświetlić się w postaci pokazanej na rysunku 2.8. W W W y n y r t i w a j c a z y r a l u d o M 76 Rysunek 2.8. Należy sprawdzić, czy ustawiono zmienną $page_title. Jeśli nie ustawiono wartości tej zmiennej, system zgłaszania błędów zamiast tytułu wyświetli szczegółowy komunikat o błędzie Skrypt 2.3. Plik stopki uzupełnia szablon HTML 5. Zapisz plik jako header.html. Projektowanie aplikacji WWW 1 !-- # Skrypt 2.3 - footer.html -- 2 /div 3 4 div id= footer 5 p a href= http://validator.w3.org/ check?uri=referer target= _blank Prawidłowy kod 6 XHTML /a | a href= http://jigsaw.w3.org/ css-validator/check/referer target= _blank Prawidłowy kod 7 CSS /a | Copyright copy; Tu umieść swoje nazwisko | Zaprojektowała firma a href= http:// smallpark.org SmallPark /a /p 8 /div 9 /div 10 /body 11 /html Dla plików włączanych można używać dowolnych rozszerzeń. Niektórzy programiści stosują rozszerzenie .inc, które wskazuje, że plik jest włączany. W tym przypadku można także użyć rozszerzenia .inc.html, które wskazuje, że plik jest włączany i zawiera kod HTML (dla odróżnienia od plików złożonych wyłącznie z kodu PHP). 6. Skopiuj z pliku szablonu całą treść, począwszy od końca zawartości specyficznej dla strony do końca strony, i wklej ją do nowego pliku (skrypt 2.3). !-- # Skrypt 2.3 - footer.html -- /div div id= footer p a href= http://validator.w3.org/ (cid:166)check?uri=referer (cid:166)target= _blank Prawidłowy kod XHTML /a | a href= http:// (cid:166)jigsaw.w3.org/css-validator/check/ (cid:166)referer target= _blank Prawidłowy kod CSS /a | Copyright copy; Tu umieść swoje (cid:166)nazwisko | Zaprojektowała firma a (cid:166)href= http://smallpark.org SmallPark / (cid:166)a /p /div /div /body /html W pliku stopki zamieszczono pozostałe elementy formatowania dla treści strony, włącznie z jej stopką, oraz znaczniki zamykające dokument HTML. 7. Zapisz plik jako footer.html. 8. Umieść oba pliki w katalogu include serwera WWW. M o d u l a r y z a c j a w i t r y n y W W W 77 Rozdział 2. Tworzenie strony głównej Strona index.php to główny skrypt w aplikacji podzielonej na moduły. W rzeczywistości jest to jedyna strona, która obowiązkowo musi być załadowana w przeglądarce WWW. Strona index.php spełnia jeden cel: scala odpowiednie fragmenty, które razem tworzą kompletną stronę WWW. Proces ten może obejmować następujące działania: (cid:88) włączenie pliku konfiguracyjnego; (cid:88) włączenie pliku parametrów połączenia z bazą danych; (cid:88) zastosowanie szablonu HTML; (cid:88) załadowanie właściwego modułu z zawartością. Pamiętając o tym, pozostaje jedynie opracować kod i upewnić się, że właściwie go obsłużono. Proces ten objaśnię szczegółowo w poniższej procedurze. Aby stworzyć główną stronę witryny: 1. Utwórz nowy skrypt PHP w edytorze tekstu lub środowisku IDE (skrypt 2.4): ?php # Skrypt 2.4 - index.php 2. Dołącz plik konfiguracyjny. require_once( ./include/config.inc.php ); W pliku konfiguracyjnym znajdują się definicje wielu ważnych ustawień, dlatego należy go dołączyć w pierwszej kolejności. Skrypt 2.4. Strona index.php to skrypt, za pośrednictwem którego wykonywane są wszystkie operacje w witrynie. Określa moduły, które należy dołączyć, ładuje plik konfiguracyjny i łączy treść strony z szablonem HTML W W W y n y r t i w a j c a z y r a l u d o M 1 ?php # Skrypt 2.4 - index.php 2 3 /* 4 * To jest główna strona. 5 * Skrypt ten dołącza pliki konfiguracyjne, 6 * szablony i wszystkie moduły zawierające treść strony. 7 */ 8 9 // Załadowanie pliku konfiguracyjnego przed kodem PHP: 10 require_once( ./include/config.inc.php ); 11 12 // Sprawdzenie, jaką stronę należy wyświetlić: 13 if (isset($_GET[ p ])) { 14 $p = $_GET[ p ]; 15 } elseif (isset($_POST[ p ])) { // Formularze 16 $p = $_POST[ p ]; 17 } else { 18 $p = NULL; 19 } 20 21 // Sprawdzenie, jaką stronę należy wyświetlić: 22 switch ($p) { 23 78 Skrypt 2.4. — ciąg dalszy 24 case about : 25 $page = about.inc.php ; 26 $page_title = Informacje o tej witrynie ; 27 break; 28 29 case this : 30 $page = this.inc.php ; 31 $page_title = To jest inna strona. ; 32 break; 33 34 case that : 35 $page = that.inc.php ; 36 $page_title = A to jeszcze inna strona. ; 37 break; 38 39 case contact : 40 $page = contact.inc.php ; 41 $page_title = Skontaktuj się z nami ; 42 break; 43 44 case search : 45 $page = search.inc.php ; 46 $page_title = Wyniki wyszukiwania ; 47 break; 48 49 // Domyślnie skrypt włącza stronę główną. 50 default: 51 $page = main.inc.php ; 52 $page_title = Główna strona witryny ; 53 break; 54 55 } // Koniec głównej instrukcji switch. 56 57 // Sprawdzenie, czy plik istnieje: 58 if (!file_exists( ./moduly/ . $page)) { 59 $page = main.inc.php ; 60 $page_title = Główna strona witryny ; 61 } 62 63 // Włączenie pliku nagłówkowego: 64 include_once ( ./include/header.html ); 65 66 // Włączenie modułu z treścią: 67 // zmienna $page jest określona na podstawie powyższej instrukcji switch. 68 include ( ./moduly/ . $page); 69 70 // Włączenie pliku stopki w celu uzupełnienia szablonu: 71 include_once ( ./include/footer.html ); 72 73 ? Projektowanie aplikacji WWW M o d u l a r y z a c j a w i t r y n y W W W 79 case contact : $page = contact.inc.php ; $page_title = Skontaktuj się (cid:166)z nami ; break; case search : $page = search.inc.php ; $page_title = Wyniki (cid:166)wyszukiwania ; break; default: $page = main.inc.php ; $page_title = Główna strona (cid:166)witryny ; break; } // Koniec głównej instrukcji switch. Dla każdego dostępnego modułu treści użyto osobnego warunku case instrukcji switch. Ze względów bezpieczeństwa domyślny warunek case ma znaczenie kluczowe. Jeśli zmiennej $p nie przypisano wartości lub jeśli jej wartość jest niewłaściwa (tzn. nie istnieje dla niej właściwy przypadek case ) — skrypt ładuje plik main.inc.php. Jest to niezbędna operacja ze względów bezpieczeństwa. Złośliwy użytkownik może zauważyć, że w witrynie są stosowane adresy URL postaci index.php?p=contact i spróbować użyć adresu postaci index.php?p=/ sciezka/do/jakiegos/skryptu. W takim przypadku skrypt włączy główną stronę witryny. Rozdział 2. 3. Sprawdź poprawność wyświetlanej strony. if (isset($_GET[ p ])) { $p = $_GET[ p ]; } elseif (isset($_POST[ p ])) { // Formularze $p = $_POST[ p ]; } else { $p = NULL; } Zawartość, która zostanie wyświetlona na stronie, zależy od wartości parametru przesłanego do strony. W przypadku kliknięcia łącza wartości są przesyłane za pomocą adresu URL. W większości formularzy wartości są przesyłane za pomocą tablicy superglobalnej $_POST. Dla pozostałych przypadków należy ustawić zmienną $p na wartość NULL. 4. Rozpocznij instrukcję switch, która określa tytuł strony i plik. switch ($p) { case about : $page = about.inc.php ; $page_title = Informacje o tej (cid:166)witrynie ; break; Każdy moduł ma nazwę nazwa.inc.php. Użyte rozszerzenie to mój sposób oznaczenia, że jest to zarówno skrypt PHP, jak i plik włączany. Ze względu na sposób interpretowania rozszerzeń w komputerach, znaczenie ma tylko końcowe rozszerzenie, tzn. przy próbie bezpośredniego uruchomienia pliku zostałby on zinterpretowany jako skrypt PHP. Dla każdego modułu ustawiono również tytuł strony (który zostanie wyświetlony w przeglądarce). 5. Uzupełnij instrukcję switch. case this : $page = this.inc.php ; $page_title = To jest inna strona. ; break; case that : $page = that.inc.php ; $page_title = A to jeszcze (cid:166)inna strona. ; break; 80 W W W y n y r t i w a j c a z y r a l u d o M Projektowanie aplikacji WWW 6. Sprawdź, czy istnieje plik modułu. if (!file_exists( ./moduly/ . $page)) { $page = main.inc.php ; $page_title = Główna strona witryny ; } Umieszczenie powyższej instrukcji nie jest absolutnie konieczne, jeśli dla każdego przypadku case istnieje właściwy moduł. Użycie tej instrukcji tworzy jednak dodatkową warstwę bezpieczeństwa. 7. Dołącz plik nagłówkowy. include_once ( ./include/header.html ); W tym pliku znajduje się początek szablonu HTML. 8. Włącz moduł. include ( ./moduly/ . $page); Spowoduje to wstawienie odpowiedniej zawartości. 9. Dołącz plik stopki: include_once ( ./include/footer.html ); Ten plik uzupełnia szablon HTML. 10. Zakończ stronę. ? 11. Zapisz plik jako index.php i umieść go w katalogu dokumentów na serwerze WWW. Skryptu nie można przetestować do momentu utworzenia przynajmniej jednego modułu zawartości (co najmniej main.inc.php). Wskazówka (cid:132) Instrukcja switch, która sprawdza poprawność wartości zmiennej $p, jest bardzo ważnym zabezpieczeniem. Inne zabezpieczenie polega na użyciu osobnej zmiennej jako nazwy włączanego pliku (tzn. $page). Poniższy kod stwarzałby bardzo duże zagrożenie: include ($_GET[ p ]); 81 M o d u l a r y z a c j a w i t r y n y W W W Moja przygoda związana z zabezpieczeniami Latem 2006 roku usprawniłem witrynę WWW mojej firmy (www.DMCInsights.com), wprowadzając organizację modułową. Już pierwszej nocy po opublikowaniu nowej wersji witryny ktoś próbował włamać się na serwer, zmieniając adres URL postaci about.php?i=phpmysql2 na wartość about.php?i=http://jakisserwis.com/plik.txt. Skrypt plik.txt na tym serwerze zawierał kod PHP wyświetlający zawartość mojego serwera. Gdyby hakerowi udało się go uruchomić, bezpieczeństwo mojej witryny byłoby zagrożone. Próba nie powiodła się z dwóch powodów. Po pierwsze, sprawdziłem poprawność elementu $_GET[ i ], porównując go ze zbiorem dopuszczalnych wartości. Po drugie, zachowałem ostrożność podczas operacji włączania plików. Równie ważny był jednak mechanizm zgłaszania błędów zaimplementowany w witrynie. Ponieważ witryna była przekazana do eksploatacji, użytkownik nie uzyskał żadnych interesujących informacji przy próbie włączenia niewłaściwego pliku, ale ja otrzymałem informację o próbie włamania pocztą elektroniczną. Aby stworzyć główny moduł treści: 1. Utwórz nowy skrypt PHP w edytorze tekstu lub w środowisku IDE (skrypt 2.5): ?php # Skrypt 2.5 - main.inc.php Rozdział 2. Utworzenie modułów treści Teraz, kiedy wykonaliśmy wszystkie czynności wstępne — napisaliśmy plik konfiguracyjny, szablon i skrypt index.php, nadszedł czas, by przystąpić do tworzenia modułów treści. W takim systemie zaimplementowanie modułu treści jest niezwykle proste. Pliki z treścią nie muszą włączać plików konfiguracyjnych bądź szablonów, ponieważ zrobiono to już w głównym skrypcie. Ponieważ wszystkie moduły treści są włączane, mogą one zawierać zarówno kod HTML, jak i PHP. Jest jednak jedna pułapka: moduły nie powinny być ładowane bezpośrednio. Gdyby ktoś spróbował bezpośrednio wywołać skrypt main.inc.php (lub dowolny inny moduł) w przeglądarce WWW, zobaczyłby wynik bez szablonu HTML (rysunek 2.9), bez odpowiedniej obsługi błędów oraz potencjalnie bez kodu nawiązującego połączenie z bazą danych. W związku z tym w każdym z modułów powinien znaleźć się kod, który w przypadku próby bezpośredniego wywołania przekieruje użytkownika do właściwej strony. W W W y n y r t i w a j c a z y r a l u d o M Rysunek 2.9. Należy tak zaprojektować witrynę, aby nie było możliwości bezpośredniego dostępu do modułów z treścią za pomocą adresu URL. W takim przypadku strona wyświetlałaby się, między innymi, bez szablonu HTML 82 Projektowanie aplikacji WWW Skrypt 2.5. W pierwszym module treści znajduje się kod HTML strony głównej. Wykorzystano również kod PHP, który przekierowuje użytkownika w przypadku próby bezpośredniego dostępu do skryptu w przeglądarce 1 ?php # Skrypt 2.5 - main.inc.php 2 3 /* 4 * To jest główny moduł treści strony. 5 * Ta strona jest dołączana przez skrypt index.php. 6 */ 7 8 // Przekierowanie w przypadku próby bezpośredniego dostępu: 9 if (!defined( BASE_URL )) { 10 11 // Potrzebna jest stała BASE_URL zdefiniowana w pliku konfiguracyjnym: 12 require_once ( ../include/config.inc.php ); 13 14 // Przekierowanie do strony głównej: 15 $url = BASE_URL . index.php ; 16 header ( Location: $url ); 17 exit; 18 19 } // Koniec instrukcji IF !defined(). 20 ? 21 22 h2 Witajcie na stronie o szablonie Liście. /h2 23 p Witajcie na stronie o szablonie Liście - statycznym składającym się z 3 kolumn szablonie stworzonym za pomocą arkusza stylów CSS i kodu XHTML. Szablon pozwala na właściwą interpretację dowolnego powiększenia lub zmniejszenia czcionki. Działa prawidłowo w przeglądarkach Firefox, Opera, Internet Explorer i Safari. Jest prostszy od innych projektów, ponieważ uważam, że takie elementy, jak grafika (cienie, olbrzymie grafiki nagłówkowe), są ostatnio nadużywane. Myślę, że to zaciemnia treść i prezentuje użytkownikom o wiele za dużo informacji naraz. Oto moja propozycja: szablon Liście - idealny dla minimalistów. Można go dowolnie modyfikować zgodnie z własnymi upodobaniami. Myślę, że nadszedł czas na dodatkową lekcję łaciny. strong Jeśli chcesz, bym wykonał dla ciebie indywidualny projekt, możesz skontaktować się ze mną pod adresem web@smallpark.org /strong /p 24 h2 Dlaczego lubię teksty przykładowe po łacinie?. /h2 25 p Aenean eros arcu, condimentum nec, dapibus ut, tincidunt sit amet, urna. Quisque viverra, eros sed imperdiet iaculis, est risus facilisis quam, id malesuada arcu nulla luctus urna. Nullam et est. Vestibulum velit sem, faucibus cursus, dapibus vestibulum, pellentesque et, urna. Donec luctus. Donec lectus. Aliquam eget eros facilisis tortor feugiat sollicitudin. Integer lobortis vulputate sapien. Sed iaculis erat ac nunc. a href= # Etiam eu enim. /a Mauris ipsum urna, rhoncus at, bibendum sit amet, euismod eget, dolor. Mauris fermentum quam vitae ligula. Vestibulum in libero feugiat justo dictum consectetuer. Vestibulum euismod purus eget elit. Nunc sed massa porta elit bibendum posuere. Nunc pulvinar justo sit amet odio. In sed est. Phasellus ornare elementum nulla. Nulla ipsum neque, cursus a, viverra a, imperdiet at, enim. Quisque facilisis, diam sed accumsan suscipit, odio arcu hendrerit dolor, quis aliquet massa nulla nec sem. /p 26 h2 Po prostu je lubię. /h2 27 p a href= # Proin sagittis leo in diam /a . Vestibulum vestibulum orci vel libero. Cras molestie pede quis odio. Phasellus tempus dolor eu risus. Aenean tellus tortor, dignissim sit amet, tempus eu, eleifend porttitor, ipsum. Fusce diam. Suspendisse sed nunc quis odio aliquet feugiat. Pellentesque sapien. Phasellus sed lorem eu augue luctus commodo. Nullam interdum convallis nunc. Fusce varius. Ut egestas. Fusce interdum iaculis pede. Sed vehicula vestibulum odio. a href= # Donec id diam. /a /p 83 M o d u l a r y z a c j a w i t r y n y W W W Rozdział 2. 2. Sprawdź, czy nie nastąpiła próba bezpośredniego dostępu do skryptu: if (!defined( BASE_URL )) { { Jest wiele elementów, które można sprawdzić w tym celu — na przykład czy ustawiono zmienne $page lub $p. Gdyby jednak włączono parametr register globals, a użytkownik spróbowałby wejść na stronę main.inc.php?p=true, taki test nie powiódłby się. W związku z tym lepiej sprawdzić, czy zdefiniowano stałą. Tworzy się ją w pliku konfiguracyjnym, który należy załadować w głównym skrypcie w pierwszej kolejności, jeszcze przed załadowaniem modułu treści. 3. Przekieruj użytkownika. require_once ( ../include/config.inc.php ); $url = BASE_URL . index.php ; header ( Location: $url ); exit ; Użytkownika należy przekierować do strony głównej. Ponieważ pożądane jest przekierowanie z użyciem bezwzględnego adresu URL (co jest najbardziej niezawodne), trzeba włączyć plik konfiguracyjny i odczytać wartość BASE_URL. 4. Zakończ sekcję PHP. } // Koniec instrukcji IF defined() ? 5. Dodaj dowolną treść. h2 Witajcie na stronie (cid:166)o szablonie Liście. /h2 p Witajcie na stronie o szablonie (cid:166)Liście - statycznym składającym się (cid:166)z 3 kolumn szablonie stworzonym za (cid:166)pomocą arkusza stylów CSS i kodu XHTML. (cid:166)Szablon pozwala na właściwą (cid:166)interpretację dowolnego powiększenia (cid:166)lub zmniejszenia czcionki. Działa (cid:166)prawidłowo w przeglądarkach Firefox, (cid:166)Opera, Internet Explorer i Safari. Jest (cid:166)prostszy od innych projektów, ponieważ (cid:166)uważam, że takie elementy, jak grafika (cid:166)(cienie, olbrzymie grafiki nagłówkowe), (cid:166)są ostatnio nadużywane. Myślę, że to (cid:166)zaciemnia treść i prezentuje (cid:166)użytkownikom o wiele za dużo informacji (cid:166)naraz. Oto moja propozycja: szablon (cid:166)Liście - idealny dla minimalistów. (cid:166)Można go dowolnie modyfikować zgodnie (cid:166)z własnymi upodobaniami. Myślę, że (cid:166)nadszedł czas na dodatkową lekcję (cid:166)Łaciny. strong Jeśli chcesz, bym (cid:166)wykonał dla ciebie indywidualny (cid:166)projekt, możesz skontaktować się ze mną (cid:166)pod adresem web@smallpark.org (cid:166) /strong /p Można tu wprowadzić dowolną kombinację HTML i PHP, tak jak na dowolnej innej stronie PHP. W tym kroku pominąłem nieco treści, można ją jednak znaleźć w wersji skryptu dostępnej do pobrania. W W W y n y r t i w a j c a z y r a l u d o M 84 Projektowanie aplikacji WWW 6. Zapisz plik jako main.inc.php, umieść w katalogu dokumentów na serwerze WWW (w folderze moduly — rysunek 2.2) i przetestuj przez wywołanie skryptu index.php w przeglądarce WWW (rysunek 2.10). M o d u l a r y z a c j a w i t r y n y W W W 85 Rysunek 2.10. Kompletna główna strona serwisu — modularna i zarządzana za pomocą szablonu Rozdział 2. Tworzenie modułu wyszukiwania W ostatnim przykładzie utworzyłem główny moduł treści. Był zaskakująco prosty, w związku z czym, dla urozmaicenia, pokażę inny przykład. W
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP5. Zaawansowane tworzenie stron WWW. Szybki start
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ą: