3 Spis treści Wprowadzenie ..............................................................................................................7 1. Treść ge...
Wprowadzenie .............................................................................................................. 7 1. Treść generowana dynamicznie i Internet ..................................................................11 Protokół HTTP i Internet Miejsce PHP i MySQL w programowaniu sieciowym Zalety używania PHP oraz MySQL Wartość wolnego oprogramowania Komponenty aplikacji PHP Integracja wielu źródeł informacji Żądanie danych ze strony internetowej
11 12 13 13 14 17 21
2. Instalacja ......................................................................................................................25 Lokalne tworzenie aplikacji Praca zdalna
25 46
3. Poznajemy PHP ............................................................................................................ 51 PHP i tekst HTML Tworzenie klocków kodu
51 55
4. Podejmowanie decyzji w PHP ..................................................................................... 73 Wyrażenia Operatory Instrukcje warunkowe Pętle
73 75 82 88
5. Funkcje .........................................................................................................................95 Wywoływanie funkcji Definiowanie funkcji Programowanie zorientowane obiektowo
7. Praca z bazą danych MySQL .......................................................................................131 Baza danych MySQL Zarządzanie bazą danych Używanie narzędzia phpMyAdmin Koncepcja bazy danych Język SQL
131 134 135 139 141
8. Bazy danych ............................................................................................................... 155 Projekt bazy danych Tworzenie kopii zapasowej danych i ich przywracanie Zaawansowany SQL
155 164 168
9. Współpraca PHP i MySQL .......................................................................................... 187 Proces Wykonywanie zapytania do bazy danych za pomocą funkcji PHP Używanie PEAR
188 188 198
10. Praca z formularzami sieciowymi ............................................................................. 207 Tworzenie formularza sieciowego Szablony
207 225
11. Praktyczne PHP ..........................................................................................................233 Funkcje dotyczące ciągu tekstowego Funkcje daty i godziny Operacje na plikach Wywoływanie poleceń systemowych
233 244 248 260
12. XHTML ........................................................................................................................263 Dlaczego XHTML? Przestrzenie nazw XHTML i XML Wersje XHTML Generowanie dokumentu XHTML w PHP
265 266 266 273
13. Modyfikowanie obiektów MySQL i danych PHP ...................................................... 275 Zmiana obiektów bazy danych z poziomu PHP Operacje na danych tabeli Wyświetlanie wyników zapytania wraz z osadzonymi łączami Jeden plik wyświetlający formularz i przetwarzający jego dane
4
|
Sp s treśc
275 278 279 283
Uaktualnianie danych Usuwanie danych Wykonywanie podzapytania
289 290 296
14. Pliki cookie, sesje i kontrola dostępu ........................................................................299 Pliki cookie PHP i uwierzytelnianie HTTP Sesje Wykorzystanie modułu Auth_HTTP do uwierzytelniania
299 302 307 314
15. Bezpieczeństwo ......................................................................................................... 319 Bezpieczeństwo sesji
328
16. Sprawdzanie poprawności danych i obsługa błędów ............................................. 337 Sprawdzanie poprawności danych wprowadzanych przez użytkowników za pomocą JavaScript Dopasowywanie wzorców Ponowne wyświetlenie formularza w przypadku niepomyślnego testu poprawności danych
337 341 345
17. Przykładowa aplikacja .............................................................................................. 351 Plik konfiguracyjny Szkielet stron Baza danych Wyświetlanie streszczeń artykułów Wyświetlanie artykułów wraz z komentarzami Dodawanie i modyfikowanie artykułów Dodawanie i modyfikowanie komentarzy
352 352 355 358 360 364 371
18. Kończymy naszą podróż ............................................................................................ 377 Standardy kodowania w PHP PEAR Struktury PHP Ajax Wiki Szukanie pomocy w Internecie
377 381 383 383 384 384
Dodatek. Odpowiedzi na pytania ......................................................................................387 Skorowidz ............................................................................................................................. 401
Sp s treśc
|
5
6
|
Sp s treśc
Wprowadzenie
Technologie PHP i MySQL stanowią doskonałe połączenie możliwości pozwalających na łatwe budowanie aplikacji sieciowych. Jeżeli Czytelnik tworzył już strony internetowe, ale chciałby konstruować znacznie bardziej zaawansowane witryny, które mogą się rozrastać i współdziałać z użytkownikami, to PHP i MySQL są świetnym wyborem. Celem niniejszej książki jest przedstawienie wad i zalet technologii PHP i MySQL, a tym samym uniknięcie pytań typu „dlaczego to nie działa?”. W książce zostaną przedstawione wskazówki pozwalające programiście uporać się z mogącymi wystąpić problemami bez wyrywania sobie włosów z głowy.
Dla kogo przeznaczona jest książka? Książka została napisana z myślą o Czytelnikach, którzy chcą poznać sposoby tworzenia dynamicznych witryn internetowych. Grono odbiorców może obejmować także grafików pracujących w działach IT lub firmach reklamowych zajmujących się tworzeniem statycznych witryn internetowych, którzy chcą pójść o krok dalej i rozpocząć budowę witryn działających w oparciu o bazy danych. Książka może zainteresować również programistów Flash i HTML, choć oni będą musieli poszerzyć wiedzę z zakresu baz danych i programowania.
Założenia przyjęte w książce W książce przyjęto założenie, że Czytelnik doskonale zna sposób działania przeglądarek internetowych oraz ma podstawową wiedzę na temat języka HTML. Znajomość języka JavaScript może być natomiast użyteczna (rozdział 16.), ale ogólnie nie jest wymagana. Oczywiście może się zdarzyć, że Czytelnik będzie miał znacznie większą wiedzę niż przedstawiona w książce. Dla osób znających techniki tworzenia stron internetowych za pomocą MySQL i PHP lepszym rozwiązaniem będzie sięgnięcie po książkę bardziej w rodzaju encyklopedii niż wprowadzenia. Przykładem książki dla zaawansowanych jest „PHP. Almanach” Paula Hudsona oraz „MySQL. Almanach” Russella Dyersa — obie wydane przed Wydawnictwo Helion.
7
W jaki sposób zorganizowana jest ta książka? Książka rozpoczyna się od zaprezentowania sposobów współpracy technologii w niej omówionych. Ponieważ istnieje wiele języków i technologii współdziałających z dynamicznymi stronami internetowymi, najlepszym rozwiązaniem jest solidne zrozumienie zasad ich współpracy. Przedstawiony w książce język PHP stanowi pakiet integrujący technologie używane do budowania dynamicznych witryn internetowych. Następnym krokiem będzie omówienie instalacji na komputerze lokalnym podstawowych pakietów oprogramowania. Książka koncentruje się na PHP i MySQL, ale do wykorzystania pełni ich możliwości wymagany jest także serwer WWW Apache. Interpreter PHP współpracuje z serwerem WWW podczas przetwarzania dynamicznych treści. Zaprezentowana zostanie również instalacja bazy danych MySQL w systemach Windows, Mac i Linux. Jeżeli Czytelnik nie chce instalować wymienionego oprogramowania na komputerze lokalnym, w procesie tworzenia dynamicznych stron internetowych można wykorzystać konto na serwerze oferowanym przez dostawcę usług internetowych (ISP). Język PHP pełni bardzo ważną funkcję w integracji wszystkich komponentów, stąd kolejnym krokiem będzie przedstawienie podstaw pracy z PHP. Omówione zagadnienia obejmują podstawy języka, takie jak rodzaje danych, logika programu oraz zmienne. Funkcje, tablice i formularze zostaną przedstawione w oddzielnych rozdziałach w celu dokładnego objaśnienia sposobu ich działania. Ponieważ zagadnienia baz danych mogą być dla Czytelnika zupełną nowością, w pierwszej kolejności zostaną więc zaprezentowane koncepcje stosowane podczas projektowania i używania relacyjnych baz danych. Następnie będą omówione poszczególne przykłady używania bazy MySQL do operacji na zgromadzonych w niej danych. Po pobraniu danych z bazy danych trzeba będzie użyć języka PHP w celu umieszczenia tych danych w dynamicznie generowanej treści. Zagadnienia związane z bezpieczeństwem oraz kontrolą dostępu zostaną omówione w oddzielnych rozdziałach. Mimo że bezpieczeństwo może wydawać się nudnym tematem, to jednak jest bardzo ważne, zwłaszcza w kontekście przechowywania na stronie internetowej informacji poufnych. W książce zostanie przedstawionych kilka najczęstszych pułapek związanych z kwestiami bezpieczeństwa. Nie pominiemy także języka XHTML, który stanowi kolejną generację HTML. W książce zostaną więc przedstawione tematy związane z używaniem XHTML na witrynach internetowych oraz współpracy z językiem PHP. Na końcu zostaną szczegółowo omówione przykładowe aplikacje demonstrujące współdziałanie wszystkich technologii na przykładzie tworzenia użytecznych i szybkich witryn internetowych. Przedstawione zostaną również witryny internetowe i fora, na których można znaleźć dodatkowe informacje na temat zagadnień omówionych w książce.
8
|
Wprowadzen e
Dodatkowe pozycje Po zapoznaniu się z materiałem omówionym w niniejszej książce Czytelnik może stwierdzić, że niektóre z poruszonych tematów chciałby poznać znacznie bardziej szczegółowo. Poniższa lista przedstawia książki zawierające dokładniejsze omówienie wybranych technologii: • Run Your Own Web Server Using Linux & Apache, Tony Steidler-Dennison (Wydawnictwo
SitePoint), • PHP. Almanach, wydanie pierwsze, Paul Hudson (Wydawnictwo Helion), • MySQL. Almanach, wydanie pierwsze, Russell Dyer (Wydawnictwo Helion), • CSS Cookbook, Christopher Schmitt (Wydawnictwo O’Reilly).
Ponadto istnieje kilka doskonałych źródeł internetowych podejmujących zagadnienia dotyczące programowania dynamicznych stron internetowych, na przykład witryna http://onlamp.com/ będąca częścią sieci O’Reilly Network. Termin LAMP oznacza Linux, Apache, MySQL oraz PHP. Oprogramowanie LAMP faktycznie stało się standardem obsługi dynamicznych stron internetowych.
Konwencje zastosowane w książce W książce zostały zastosowane następujące konwencje programistyczne oraz typograficzne: Czcionka pochylona Wskazuje na ścieżki dostępu, nazwy plików oraz programów, adresy internetowe, takie jak nazwy domen i adresy URL, a także nowe pojęcia. Czcionka o stałej szerokości znaków
Wskazuje na polecenia, nazwy i słowa kluczowe w programach, nazwy metod, zmiennych i klas, znaczniki kodu HTML, wartości oraz polecenia bazy danych. Pochylona czcionka o stałej szerokości znaków
Wskazuje na tekst, który powinien zostać zastąpiony wartościami podanymi przez użytkownika.
Pogrubiona czcionka o stałej szerokości znaków
Wskazuje na podkreślenia w wierszach kodu programu oraz opcje w danych wejściowych użytkownika, które powinny zostać wpisane dosłownie. Ikona oznaczająca podpowiedź, sugestię lub ogólną uwagę.
Ikona oznaczająca ostrzeżenie
Konwencje zastosowane w ks ążce
|
9
Używanie przykładowych kodów Ogólnie rzecz biorąc, możesz wykorzystać przykłady z tej książki w swoich programach i dokumentacji. Nie musisz kontaktować się z nami w celu uzyskania zezwolenia, dopóki nie powielasz znaczących ilości kodu. Na przykład pisanie programu, w którym jest wykorzystanych kilka fragmentów kodu z tej książki, nie wymaga zezwolenia. Sprzedaż lub rozpowszechnianie płyty CD-ROM zawierającej przykłady z książki Wydawnictwa Helion wymaga natomiast zezwolenia. Z kolei udzielenie odpowiedzi na pytanie przez zacytowanie tej książki i poparcie cytatu przykładem nie wymaga zezwolenia. Włączenie znaczących ilości przykładowych kodów z tej książki do dokumentacji własnego produktu wymaga zezwolenia. Jesteśmy wdzięczni za przypisy, ale nie wymagamy ich. Przypis zwykle zawiera tytuł, autora, wydawcę i ISBN. Na przykład: „PHP i MySQL. Wprowadzenie. Wydanie II”, Michele E. Davis i Jon A. Phillips, Wydawnictwo Helion, ISBN 978-83-246-1528-5.
Podziękowania Jesteśmy bardzo szczęśliwi, udostępniając Czytelnikom poprawione i rozbudowane drugie wydanie niniejszej książki. Chcemy w tym miejscu podziękować naszemu wspaniałemu agentowi Mattowi Wagnerowi z Fresh Books oraz Simonowi St. Laurent z Wydawnictwa O’Reilly za umożliwienie wydania tej edycji. Bez pracy tych osób ta książka nie trafiłaby do rąk Czytelników. Gorące podziękowania należą się również redaktorom technicznym, zwłaszcza Jereme Allen, Charlie Maguire i Peterowi MacIntyre za fantastyczną korektę tej książki. Chcemy także podziękować lokalnej społeczności PHP w Minneapolis/St. Paul (http://www.tcphp.org/), która kilka lat temu zaraziła nas PHP i MySQL. Ponadto podziękowania kierujemy do Simona, Mimi i Zacka, którzy wykazali się dużą cierpliwością, gdy ich rodzice pracowali nad drugim wydaniem bardzo ważnej książki.
10
|
Wprowadzen e
ROZDZIAŁ 1.
Treść generowana dynamicznie i Internet
Z punktu widzenia przeciętnego użytkownika strona internetowa jest po prostu stroną internetową, zostaje otworzona w przeglądarce i dostarcza informacje. Przyglądając się bliżej stronom, można stwierdzić, że niektóre pozostają niemalże niezmienione, podczas gdy inne ulegają częstym zmianom. Strony, które się nie zmieniają — statyczne — są dość łatwe do utworzenia. Programista tworzący dokument HTML ręcznie lub za pomocą odpowiednich narzędzi po prostu umieszcza go na witrynie internetowej, którą później można przeglądać w przeglądarce. Jednym z najczęściej używanych narzędzi do tworzenia dokumentów HTML jest Adobe Dreamweaver. Po wprowadzeniu zmian na stronie stary plik jest zastępowany nowym. Strony dynamiczne również są utworzone za pomocą kodu HTML, ale zamiast prostego modelu „utwórz i opublikuj” są regularnie uaktualniane, często podczas każdego żądania ich wyświetlenia. Statyczne witryny internetowe zawierają łącza oraz czasami stronę logowania, ale poza tym nie oferują zbyt wielu możliwości w zakresie interakcji z użytkownikiem. Z drugiej strony, witryna Amazon.com (http://www.amazon.com/) przedstawia możliwości drzemiące w dynamicznie generowanej witrynie internetowej: zapisywanie historii zamówień oraz propozycje produktów na podstawie zapisanej historii zakupów. Innymi słowy, termin dynamicznie oznacza, że użytkownik może współdziałać z witryną internetową w dużo większym zakresie niż tylko odczytywanie stron, a sama witryna odpowiednio reaguje na działania użytkownika. Każda strona jest spersonalizowana pod kątem odwiedzającego. Tworzenie dynamicznych stron internetowych jeszcze kilka lat temu oznaczało konieczność napisania dużej ilości kodu w językach C i Perl, a następnie wywołanie i wykonanie tych programów za pomocą procesu nazywanego Common Gateway Interface (CGI). Zarówno konieczność tworzenia plików wykonywalnych, jak i uczenia się nowych, skomplikowanych języków programowania nie była zbyt zachęcającą perspektywą. Na szczęście PHP i MySQL znacznie ułatwiają i przyśpieszają tworzenie dynamicznych witryn internetowych.
Protokół HTTP i Internet Podstawowe zrozumienie sposobu działania sieci może okazać się użyteczne, jeśli Czytelnik nie miał wcześniej styczności z programowaniem sieciowym. Protokół HyperText Transfer Protocol (HTTP) definiuje sposób przesyłania stron w Internecie. HTTP jest więc metodą przenoszenia informacji w sieci. Jego początkowym celem było dostarczenie sposobu publikowania i pobierania stron HTML.
11
Konsorcjum World Wide Web (W3C) oraz stowarzyszenie Internet Engineering Task Force koordynują prace nad protokołem HTTP, który łączy klienty i serwery za pomocą metody „żądanie i odpowiedź”. Generujący żądanie klient, którym zwykle jest przeglądarka internetowa, jest nazywany agentem użytkownika. Serwer docelowy przechowujący lub tworzący zasoby obejmujące pliki HTML i obrazy jest nazywany serwerem początkowym. Między agentem użytkownika a serwerem początkowym może znajdować się kilku pośredników, takich jak proxy. Klient HTTP inicjuje żądanie poprzez nawiązanie połączenia Transmission Control Protocol (TCP) z odpowiednim portem serwera WWW (domyślnie jest nim port 80). Serwer stale nasłuchuje na wymienionym porcie i czeka na dane pochodzące od klienta. Po otrzymaniu żądania serwer odsyła komunikat stanu, na przykład „HTTP/1.1 200 OK”, oraz przygotowaną odpowiedź na żądanie. W zależności od stanu odpowiedzią może być żądany przez klienta plik, komunikat o błędzie lub inne informacje. Protokół HTTP jest zbudowany na górze TCP, który z kolei sam jest górną warstwą protokołu IP (Internet Protocol). Te dwa wymienione protokoły są często nazywane łącznie TCP/IP. Aplikacje umieszczone na serwerach mogą używać TCP w celu tworzenia połączeń między sobą, a następnie wymieniać się strumieniami danych. Protokół gwarantuje skuteczną dostawę danych od nadawcy do odbiorcy. TCP obsługuje wiele popularnych protokołów aplikacji internetowych oraz aplikacji, między innymi strony WWW, pocztę elektroniczną i bezpieczną powłokę (SSH).
Miejsce PHP i MySQL w programowaniu sieciowym PHP jest językiem programowania zaprojektowanym w celu generowania stron internetowych interaktywnie obsługiwanych przez komputer nazywany serwerem WWW. W przeciwieństwie do HTML, w którym przeglądarka internetowa używa znaczników do wygenerowania strony, kod PHP jest uruchamiany między żądaniem wyświetlenia strony a serwerem WWW, dodając treść i zmieniając podstawowe dane wyjściowe HTML. PHP znacznie ułatwia programowanie sieciowe, ponieważ cały kod znajduje się w strukturze PHP. Oznacza to, że programista nie musi ponownie odkrywać koła podczas tworzenia programu PHP — funkcje sieciowe są dostarczane w standardzie. Mimo że język PHP jest doskonałym rozwiązaniem podczas tworzenia aplikacji sieciowych, to sam z siebie nie oferuje możliwości przechowywania danych. Z tego powodu potrzebna będzie baza danych przeznaczona do składowania informacji. Bazą danych wybraną przez programistów PHP jest MySQL, który działa na zasadzie archiwum dla przetwarzanych przez PHP danych użytkownika. MySQL automatyzuje większość najczęściej wykonywanych zadań związanych z przechowywaniem i pobieraniem informacji o poszczególnych użytkownikach na podstawie określonych kryteriów. Warto spojrzeć na witrynę Amazon.com: produkty polecane przez firmę Amazon są wybierane na podstawie rekordów bazy danych zawierających informacje o poprzednich zamówieniach danego użytkownika.
Dostęp do MySQL z poziomu PHP jest bardzo łatwy, a obie technologie doskonale ze sobą współpracują. Dodatkową ich zaletą jest to, że zarówno PHP, jak i MySQL działają na różnych platformach sprzętowych i systemach operacyjnych, obejmujących między innymi Mac OS X, komputery PC z systemem Windows oraz rodzinę systemów Linux. 12
|
Rozdz ał 1. Treść generowana dynam czn e nternet
Zalety używania PHP oraz MySQL Istnieje kilka czynników, które powodują, że używanie PHP wraz z MySQL jest naturalnym wyborem: PHP i MySQL doskonale ze sobą współpracują Technologie PHP i MySQL zostały zaprojektowane z uwzględnieniem istnienia siebie nawzajem, dlatego też doskonale ze sobą współdziałają. Interfejsy programowe obu technologii są logicznie ze sobą powiązane. Przystosowanie wymienionych narzędzi do współpracy nie nastąpiło dopiero po utworzeniu interfejsów PHP i MySQL. PHP i MySQL są wolnym oprogramowaniem Obie technologie są projektami wolnego oprogramowania, więc mogą być używane całkowicie bezpłatnie. Biblioteki klienckie MySQL nie są już dostarczane razem z pakietem PHP. Zaawansowani użytkownicy mają możliwość wprowadzania zmian w kodzie źródłowym, a przez to zmiany sposobu działania języka i programów. PHP i MySQL mają duże wsparcie ze strony społeczności Oba narzędzia są aktywnie wspierane przez społeczność internetową, w której także Czytelnik może uczestniczyć i uzyskiwać pomoc w postaci odpowiedzi na zadawane pytania. Jeśli zachodzi taka potrzeba, istnieje możliwość zakupu profesjonalnej pomocy technicznej dla MySQL. PHP i MySQL zapewniają dużą szybkość działania Proste i efektywne zaprojektowanie tych technologii procentuje ich szybkim działaniem. Dzięki PHP i MySQL programista nie musi grzęznąć w morzu niepotrzebnych szczegółów Programista nie musi znać wszystkich szczegółów niskiego poziomu dotyczących współpracy interfejsu języka PHP z bazą danych MySQL, ponieważ PHP zawiera standardowy interfejs służący do wywoływania funkcji MySQL. Dostępny na witrynie http://www.php. ´net/ opis interfejsu programowania aplikacji (API) stanowi niewyczerpane źródło informacji na ten temat.
Wartość wolnego oprogramowania Jak już wcześniej wspomniano, zarówno PHP, jak i MySQL są projektami wolnego oprogramowania. Dlatego też użytkownik nie musi martwić się o zakup licencji dla każdego komputera znajdującego się w biurze bądź domu. Podczas używania projektów i technologii wolnego oprogramowania programiści mają dostęp do kodu źródłowego. W ten sposób programiści pojedynczo lub w grupach mają możliwość analizy kodu pod kątem występowania potencjalnych błędów, jego testowania, usuwania znalezionych błędów oraz wprowadzania zmian w kodzie. Przykładowo, system Unix — prekursor w społeczności wolnego oprogramowania — był bezpłatnie rozprowadzany w ośrodkach akademickich. Linux, czyli bezpłatna alternatywa systemu Unix, jest bezpośrednim skutkiem prac podejmowanych w tych ośrodkach oraz stosowania licencji wolnego oprogramowania. Większość licencji wolnego oprogramowania zawiera zapis uprawniający do rozpowszechniania zmodyfikowanego kodu źródłowego z zachowaniem kilku ograniczeń. Przykładowo, niektóre licencje wymagają, aby kod pochodny został wydany na tej samej licencji bądź może zawierać ograniczenie wskazujące, że inni nie mogą używać tego kodu.
Wartość wolnego oprogramowan a
|
13
Tim O’Reilly określił licencje wolnego oprogramowania w następujący sposób: „Licencje wolnego oprogramowania stały się próbą zachowania kultury dzielenia się kodem źródłowym, co z kolei prowadzi do rozwoju świadomości, jaką wartość ma dzielenie się”. W chwili obecnej programiści wolnego oprogramowania dzielą się zmianami w kodzie PHP za pomocą witryny http://www.php.net/, list dyskusyjnych oraz innych witryn internetowych. Jeżeli Czytelnik napotka trudności podczas prac nad kodem i nie będzie mógł sobie z nimi poradzić, wówczas warto poszukać pomocy w wymienionych powyżej źródłach. W dalszej części książki zostaną przedstawione fora, które można samodzielnie przeglądać. Ponadto przedstawimy listy dyskusyjne oraz witryny internetowe, udostępniając Czytelnikowi w ten sposób bogate źródła informacji.
Komponenty aplikacji PHP W celu przetworzenia i zaprojektowania dynamicznych stron internetowych trzeba użyć i zrozumieć działanie kilku technologii. Istnieją trzy główne komponenty występujące w procesie tworzenia dynamicznych stron internetowych: serwer WWW, język programowania działający po stronie serwera oraz baza danych. Podczas programowania sieciowego z użyciem PHP dobrym pomysłem jest zrozumienie wymienionych podstawowych komponentów. Rozpoczniemy od przedstawienia podstawowych informacji oraz historii serwera Apache (serwer WWW), PHP (język programowania działający po stronie serwera) i MySQL (baza danych). Przedstawione omówienie pozwoli na zrozumienie miejsca wymienionych technologii w procesie programowania sieciowego. Należy pamiętać, że dynamiczne strony internetowe równocześnie pobierają informacje z kilku źródeł, obejmujących Apache, PHP, MySQL oraz kaskadowe arkusze stylów (CSS), które zostaną przedstawione w dalszej części książki.
Narodziny PHP PHP wyrósł z potrzeby opracowania języka programowania pozwalającego na tworzenie i obsługę witryn internetowych zawierających dynamiczne funkcje klient – serwer. W roku 1994 Rasmus Lerdorf utworzył na własny użytek zbiór skryptów w języku Perl dostępnych jako wolne oprogramowanie. Te skrypty zostały następnie przepisane na nowo w języku C, zmieniając się w dostępny obecnie PHP. W roku 1998 na rynku pojawiło się trzecie wydanie PHP, które stanowiło narzędzie programowania sieciowego mogące już konkurować z podobnymi technologiami, takimi jak Active Server Pages (ASP) firmy Microsoft oraz Java Server Pages (JSP). PHP jest językiem interpretowanym, a nie kompilowanym. Prawdziwe piękno języka PHP kryje się w jego prostocie połączonej z dużymi możliwościami. Języki kompilowane tworzą pliki binarne, takie jak .exe, podczas gdy języki interpretowane podczas wykonywania działają bezpośrednio na pliku kodu źródłowego, a nie samodzielnym pliku wykonywalnym.
Język PHP jest wszechobecny i zgodny z większością głównych systemów operacyjnych. Ponieważ jest bardzo łatwy, stanowi idealne narzędzie dla początkujących programistów sieciowych. Ponadto, dzięki wsparciu oferowanemu przez społeczność, zagadnienia programowania
14
|
Rozdz ał 1. Treść generowana dynam czn e nternet
sieciowego mogą stać się znacznie prostsze dla każdego. Twórcy PHP opracowali infrastrukturę pozwalającą doświadczonym programistom C na rozszerzenie możliwości PHP. W wyniku tego posunięcia w chwili obecnej PHP integruje zaawansowane technologie, takie jak XML, XSL oraz Microsoft Component Object Model (COM).
Narodziny serwera Apache Apache jest serwerem WWW, który otrzymuje od przeglądarek internetowych żądania dostępu do stron internetowych i wie, w jaki sposób należy przetworzyć kod PHP. PHP jest tylko językiem programowania, tak więc bez możliwości oferowanych przez serwer WWW, taki jak Apache, użytkownik nie mógłby uzyskać dostępu do stron zawierających kod języka PHP. Apache nie jest jedynym dostępnym serwerem WWW. Innym popularnym serwerem WWW jest Microsoft Internet Information Services (IIS) dostarczany z systemem Windows 2000 oraz nowszymi1. Zalety serwera Apache to całkowicie bezpłatny, udostępniony kod źródłowy oraz użycie nierestrykcyjnej licencji. Bieżącą i najczęściej używaną wersją Apache jest 2.0, choć nadal można spotkać w użyciu wersję 1.3. Serwer IIS jest łatwiejszy do integracji z systemem uwierzytelniania opracowanym przez Microsoft (Active Directory), ale ma on zastosowanie głównie na wewnętrznych witrynach firm. Według wyników ankiety Netcraft serwer Apache jest od kwietnia 1996 roku najpopularniejszym serwerem WWW w Internecie.
Ponieważ serwery WWW takie jak Apache i IIS zostały zaprojektowane w celu dostarczania plików HTML, muszą one wiedzieć, w jaki sposób przetwarzać kod PHP. Apache używa modułów do wczytywania rozszerzeń zwiększających możliwości serwera. Natomiast IIS używa podobnej koncepcji nazwanej Internet Server Application Program Interface (ISAPI). Obie wymienione koncepcje umożliwiają szybsze przetwarzanie kodu PHP niż w przypadku starej metody, która polegała na wywoływaniu PHP jako oddzielnego pliku wykonywalnego podczas każdego żądania wyświetlenia strony internetowej zawierającej kod PHP. Konfiguracja modułów serwera Apache zostanie przedstawiona w rozdziale 2. W chwili obecnej używane są tylko dwie główne wersje serwera Apache: 1.3 oraz 2.0. Serwer Apache w wersji 2.0 został przepisany na nowo i obsługuje wątki. Wymienione wątki pozwalają na to, aby jeden proces mógł wykonywać w danej chwili większą liczbę zadań. W ten sposób następuje zwiększenie szybkości działania przy jednoczesnym zmniejszeniu ilości wymaganych zasobów. Niestety, PHP nie jest jeszcze w pełni zdolny do wykorzystania możliwości związanych z wątkami. Serwer Apache 2 jest dostępny już na tyle długo, aby można go uznać za produkt w pełni stabilny oraz stosować w środowisku projektowym i produkcyjnym. Ponadto Apache 2 obsługuje moduły o znacznie większych możliwościach. Niektóre dodatkowe moduły są dostępne na stronie http://www.cri.ensmp.fr/~coelho/mod_macro/. Jednak współdzielone moduły DLL, które nie są dostępne w oficjalnych plikach źródłowych Apache, na przykład mod_php4, mod_ssl, mod_auth_mysql oraz mod_auth_ntsec, są dostępne w Internecie.
1
Windows XP w wersji Home oraz Windows Vista Home Basic nie zawierają serwera IIS — przyp. tłum.
Komponenty apl kacj PHP
|
15
Zaletą serwera Apache jest możliwość jego uruchomienia w wielu systemach operacyjnych innych niż Windows, co zapewnia duży poziom zgodności. Zanim jednak przejdziemy do tego tematu, musimy się nieco lepiej zapoznać z zagadnieniami związanymi z relacyjnymi bazami danych i SQL.
SQL i relacyjne bazy danych SQL (Structured Query Language) jest najpopularniejszym językiem używanym do tworzenia, pobierania, uaktualniania i usuwania danych z systemów relacyjnych baz danych. Zgodnie z nazwą relacyjna baza danych oznacza model relacyjny i odnosi się do danych oraz schematu bazy danych. Wymieniony schemat jest strukturą w bazie danych określającą sposób organizacji danych. Bardzo często jest stosowane pojęcie „system zarządzania relacyjnymi bazami danych”, które technicznie odnosi się do oprogramowania użytego do utworzenia relacyjnej bazy danych, na przykład Oracle lub Microsoft SQL Server. Relacyjna baza danych jest zbiorem tabel, ale inne elementy również bardzo często są uważane za jej część, ponieważ pomagają w organizacji i tworzeniu struktury danych, a także wymuszają, aby baza danych spełniała pewne wymagania.
Narodziny bazy danych MySQL MySQL jest bezpłatną, w pełni wyposażoną bazą danych. Jej początki sięgają roku 1990 i potrzeby opracowania oprogramowania umożliwiającego komputerom inteligentne zarządzanie informacjami. Początkowo zespół programistów tworzących MySQL próbował spełnić oczekiwania dotyczące baz danych, wykorzystując mSQL, czyli małą i prostą bazę danych. Wkrótce stało się jednak jasne, że mSQL nie jest w stanie sprostać wszystkim celom wyznaczonym przez programistów. Dlatego też utworzono znacznie solidniejszą bazę danych, która została przekształcona w MySQL. MySQL obsługuje kilka różnych silników bazy danych. Wymienione silniki baz danych określają sposób, w jaki MySQL faktycznie przechowuje i obsługuje dane. Z tego powodu każdy silnik ma własny zestaw możliwości i zalet. Wraz z upływem czasu silniki baz danych stały się coraz bardziej zaawansowane i szybsze. W tabeli 1.1 przedstawiono funkcje dodawane do bazy danych MySQL. W chwili obecnej wersja produkcyjna bazy danych MySQL to 5.0.x. Począwszy od wersji 5.0, MySQL oferuje wydajność porównywalną ze znacznie droższymi systemami baz danych, takimi jak Oracle, Informix, DB2 (IBM) i SQL Server (Microsoft). Dzięki połączeniu umiejętności oraz zaangażowaniu wielu programistów wolnego oprogramowania, a także testowaniu systemu przez społeczność użytkowników, zbudowano produkt charakteryzujący się dużym poziomem wydajności. Do ogólnych zadań realizowanych w programowaniu sieciowym domyślny silnik bazy danych (MyISAM) nadaje się doskonale. Najnowsze zaawansowane funkcje MySQL 5.1 nie są jeszcze tak stabilne jak funkcje wprowadzone we wcześniejszych wydaniach. Obecnie MySQL 5.0 jest wersją stabilną, przeznaczoną do ogólnego używania. Należy pobrać najnowszą, dostępną wersję wybranego wydania (czyli wersję z najwyższą trzecią liczbą w numerze wersji). W takiej wersji jest usunięta największa liczba odkrytych błędów.
16
|
Rozdz ał 1. Treść generowana dynam czn e nternet
Tabela 1.1. Główne wydania bazy danych MySQL Wersja
Funkcje
3 23
Dodano silnik bazy danych My SAM któ y jednocześnie stał się silnikiem domyślnym Pozwala on na efektywną obsługę og omnych ilości danych Wp owadzenie silnika bazy danych nnoDB obsługującego mechanizm t ansakcji o az klucze zewnętrzne Wymienione klucze zewnęt zne pozwalają na utwo zenie w bazie danych wy aźnych zależności między tabelami
40
Zaimplementowano obsługę unii w zapytaniach do bazy danych Wymienione unie pozwalają na połączenie wyników dwóch zapytań w jeden Ponadto zmiany konfigu acyjne mogą być p zep owadzane bez konieczności ponownego u uchamiania bazy danych
41
Do klienta bazy danych dodano polecenie help Ta we sja obsługuje także perspektywy nazywane często subzapytaniami Pe spektywa pozwala na pot aktowanie zapytania jako innej tabeli wewnąt z zapytania Wp owadzono ównież obsługę kodowania Unicode (co ułatwia używanie języków na odowych)
50
Dodanie wyzwalaczy procedur składowanych kursorów o az klauzuli CONSTRAINT Wyzwalacz pozwala na u uchomienie kodu w bazie danych podczas wywoływania zda zenia takiego jak wstawianie danych do tabeli P ocedu y składowane umożliwiają zdefiniowanie i wykonywanie p og amów wewnąt z bazy danych Klauzule CONSTRAINT są używane do definiowania eguł ok eślających wa unki dodawania lub modyfikacji eko dów w bazie danych Z kolei ku so y pozwalają na u uchomienie kodu w bazie danych dla każdego eko du dopasowanego do zapytania
51
Dodanie partycjonowania harmonogramu wtyczek API o az replikacji na bazie rekordu Pa tycjonowanie jest używane w celu podzielenia fizycznego p zechowywania og omnych tabel na podstawie zdefiniowanych eguł Taki k ok jest często stosowany w celu zwiększenia wydajności działania og omnych tabel takich jak zawie ające sta sze dane a chiwalne a monog am umożliwia bazie danych wykonywanie kodu w zdefiniowanym czasie Z kolei wtyczki AP są sposobem dodawania lub usuwania funkcji se we a MySQL bez konieczności jego ponownego u uchamiania Replikacja danych na podstawie eko du pozwala na two zenie kopii danych i p zenoszenie ich z jednego se we a do d ugiego na poziomie eko du
Nie należy zbyt przejmować się najnowszymi możliwościami bazy danych, ponieważ większość funkcji znajdujących się w obecnej wersji MySQL wystarczy Czytelnikowi na bardzo długi okres.
Zgodność Przeglądarki internetowe, takie jak Safari, Firefox, Netscape i Internet Explorer, zostały opracowane w celu przetwarzania kodu HTML, tak więc zupełnie nie ma znaczenia system operacyjny, na którym uruchomiono serwer WWW. Apache, PHP oraz MySQL obsługują wiele systemów operacyjnych, a programista nie jest ograniczony do stosowania jedynie określonego systemu operacyjnego serwera WWW lub klienta. Dlatego też nie trzeba martwić się o zgodność oprogramowania, ale duża różnorodność formatów plików oraz różnych języków wymaga nabycia pewnej wprawy i doświadczenia.
Integracja wielu źródeł informacji Na wczesnym etapie istnienia Internetu życie było całkiem proste. Dostępne były pliki zawierające kod HTML oraz binarne, na przykład obrazy. W celu umożliwienia nadania różnicowanego wyglądu stronom opracowano kilka technologii. Przykładowo, kaskadowe arkusze stylów (CSS) oddzielają warstwę prezentacji od kodu HTML, co umożliwia zdefiniowanie formatowania dokumentów tylko w jednym miejscu. Później, w celu zmiany sposobu prezentacji dokumentu, nie trzeba modyfikować kodu wszystkich znaczników HTML.
ntegracja w elu źródeł nformacj
|
17
W dokumencie HTML mogą więc znajdować się jednocześnie informacje odnoszące się do CSS, szablonów PHP oraz bazy danych MySQL. Szablony PHP ułatwiają wprowadzanie zmian na stronie HTML, jeśli zawiera ona pola wypełniane poprzez wykonanie zapytania do bazy danych. Poniżej zostanie przedstawiony krótki opis współdziałania wszystkich wymienionych źródeł informacji. Aby zaprezentować, jak może wyglądać przykładowy kod, na listingu 1.1 umieszczono kod MySQL wywoływany z poziomu PHP i powodujący umieszczenie komentarza w bazie danych MySQL. Poniższy listing zawiera kod PHP, który generuje formularz HTML z bazy danych MySQL, oraz sam kod HTML odwołujący się do arkusza stylów CSS. Listing 1.1. Funkcja PHP powodująca wstawienie komentarza do tabeli bazy danych Dodawanie komentarza
'); // Sprawdzenie, czy wykonanie polecenia INSERT zakończyło się powodzeniem. if ($success){ // Poinformowanie użytkownika, czy operacja zakończyła się powodzeniem. print("Umieszczenie komentarza $comment zakończyło się powodzeniem."); } else { // Poinformowanie użytkownika, że operacja zakończyła się niepowodzeniem. print("Umieszczenie komentarza $comment zakończyło się niepowodzeniem. Proszę ´spróbować ponownie."); } // Wyświetlenie stopki strony. print('