PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie I

Wydanie czwarte Kolejne, uaktualnione wydanie najbardziej znanego, bestsellerowego podręcznika dla webmasterów na temat tworzenia dynamicznych witryn ...

35 downloads 112 Views 177MB Size

Warto przyjrzeć się bliżej elementowi przycisku: W momencie naciśnięcia przycisku procedura obsługi zdarzenia onClick wywołuje funkcję JavaScript o nazwie dodajNowaZak1adke(). Wysyła ona żądanie do serwera, a konkretnie do skryptu PHP, który podejmuje próbę wstawienia rekordu do bazy danych. Kod funkcji dodajNowaZakladke() znajduje się na listingu 34.6. Listing 34.6. Kod funkcji JavaScript o nazwie dodajNowaZakladke() function dodajNowaZakladkeO { var adres_url = "dodaj_zak.php"; var parametry = "nowy_url=" + encodellRICdocument.getElementByldt 'nowy_url') ,value); mojeZadanie.openCPOST", adres_url, true); mojeZadanie.setRequestHeader("Content-type". "application/x-www-form-urlencoded"); mojeZadanie.setRequestHeader("Content-length". parametry.length); mojeZadanie.setRequestHeader("Connection", "close"): mojeZadanie.onreadystatechange = dodajOdpowiedzZakladki; mojeZadanie.send(parametry);

}

Funkcja dodajNowaZakladkeO przypomina funkcję odczytajCzasSerwera() zaimplementowaną wcześniej w tym rozdziale. Cały proces przebiega podobnie: najpierw tworzone są zmienne, następnie dane zostają przesłane do skryptu PHP, po czym następuje wywołanie funkcji odpowiedzialnej za przetworzenie odpowiedzi z serwera. Poniższy wiersz tworzy parę nazwa-wartość na podstawie nazwy pola formularza i wartości wpisanej w tym polu przez użytkownika: var parametry = "nowy_url=" + encodeURI(document.getElementById('nowy_url'),value); W ostatnim wierszu funkcji wartość zmiennej parametry jest wysyłana do skryptu PHP działającego na serwerze: mojeZadanie.send(parametry);

780

Część V • Tworzenie praktycznych projektów PHP i MySGJL

Zanim jednak odpowiednie wartości zostaną wysłane, najpierw przesyłane są trzy nagłówki żądania, aby na ich podstawie serwer odpowiednio przetworzył dane przesłane do niego w ramach żądania POST: mojeZadanie.setRequestHeader("Content-type". "application/x-www-form-urlencoded"): mojeZadanie.setRequestHeader("Content-1ength", parametry.1ength); mojeZadanie.setRequestHeader("Connection", "close"); Kolejny etap procesu polega na utworzeniu funkcji JayaScript, która będzie przetwarzać odpowiedź otrzymaną z serwera. Funkcja będzie nosić nazwę dodajOdpowiedzZakladki: mojeZadanie.onreadystatechange = dodajOdpowiedzZakladki; Również kod funkcji dodajOdpowiedzZakladki () przypomina kod funkcji odczytajCzasSerwera() zaimplementowaną wcześniej w tym rozdziale. Kod źródłowy funkcji dodajOdpowiedzZakladki () przedstawiono na listingu 34.7. Listing 34.7. Kod funkcji JayaScript o nazwie dodajOdpowiedzZakladki() function dodajOdpowiedzZakladki() { i f (mojeZadanie.readyState — 4) { iftmojeZadanie.status == 200) { wynik = mojeZadanie.responseText; document.getElementById('prezentacjawyni kow').i nnerHTML = wyni k: } else { alert('Wystąpił błąd wykonania żądania.1);

}

}

}

Powyższa funkcja JavaScript sprawdza najpierw stan obiektu. Jeżeli przetwarzanie żądania dobiegło końca, funkcja sprawdza następnie, czy serwer zwrócił kod odpowiedzi 200 (czyli OK). Jeśli kod odpowiedzi był inny niż 200, zwracane jest ostrzeżenie o treści „Wystąpił błąd wykonania żądania". Każda inna odpowiedź będzie efektem wykonania skryptu dodaj_zak.php i zostanie wyświetlona w elemencie div o identyfikatorze id równym prezentac jawyni kow. Na chwilę obecną identyfikator id prezentacjawyni kow jest zdefiniowany w arkuszu stylów nowyas.css w sposób następujący (jego tło jest białe): #prezentacjawynikow { background: #fff:

}

Po zamykającym znaczniku form w funkcji PHP o nazwie wyswietl_dodaj_zak_form() dodano wiersz widoczny poniżej. Jest to element di v, w którym wyświetlany ma być wynik skryptu wykonanego na serwerze, przeznaczony dla użytkownika:
W dalszej kolejności trzeba będzie zmodyfikować kod istniejącego skryptu dodaj

zak.php.

Dodatkowe modyfikacje w istniejącym kodzie Gdyby spróbować teraz dodać zakładkę bez wprowadzania zmian w skrypcie dodaj_zak.php, proces sprawdzania uprawnie użytkownika i zapisywania zakładek działałby prawidłowo. Jednak wynik czynności byłby co najmniej dziwny, co widać na rysunku 34.4, ponieważ tytuł, logo i łącza stanowiące stopkę występowałyby na stronie dwukrotnie, nie licząc innych problemów z prezentacją strony.

Rozdział 34. • Tworzenie aplikacji Web 2.0 z wykorzystaniem technologii Ajax

Rysunek 34.4. Dodanie zakładki przed wprowadzeniem zmian w skrypcie dodaj_zak.php

. Plik



EJ

i dyga

•Jjj- Ulubione



localhost Widok

781

Ulubione

Płarjędzta

Pamo£

JhJ Dodawanie zakładek

'

j - •

ZakładkaPHP Dodawanie zakładek Załogowano jako daniel

S S d k a

""P/slashdoun-3^

ZakładkaPHP Dodawanie zakładek Załogowano jako daniel Próba dodania http '/slashdot org Zakładka dodana Zakładki

Uwń?

httD -'helion Dl

O

httD fiilashdot. ora

Q

httD //www mysql com

B

>

V

http / % w > v p h p net

Home ] Dodai zakładkę I Uauń zakładki | Zmiana hasta Zafekomendm URL-e | Wylogowanie Home | Dodai zakładkę | Zarekomendui URL-e | Wylogowanie

I 2miana hasła

W wersji aplikacji ZakładkaPHP pozbawionej mechanizmów Ajax formularz znajdował się na jednej stronie, a wynik jego zatwierdzenia był wyświetlany na innej stronie, co wymagało każdorazowego załadowania wszystkich elementów strony. Jednak w środowisku, w którym wykorzystywane są rozwiązania Ajaksa, można dodawać nową zakładkę, uzyskać z serwera wynik jej dodawania i kontynuować (lub nie) dodawanie kolejnych zakładek bez konieczności ponownego ładowania któregokolwiek z elementów strony. Po zaimplementowaniu nowego mechanizmu Ajax konieczne jest wprowadzenie dodatkowych zmian w skrypcie dodaj zak.php. Oryginalny kod skryptu znajduje się na listingu 34.8. Listing 34.8. Oryginalny kod PHP z pliku dodaj_zak.php
782

Część V • Tworzenie praktycznych projektów PHP i MySGJL

throw new Exception('Formularz wypełniony niewłaściwie. Proszę spróbować ponownie.'); } // sprawdzenie formatu URL-a i f (strstr($nowy_url. 'http://') — false) { $nowy_url = 'http://',$nowy_url:

}

// sprawdzenie prawidłowości URL-a i f (!(@fopen($nowy_url. ' r ' ) ) ) { throw new Exception('URL nieprawidłowy.');

}

// próba dodania zakładki dodaj_zak($nowy_url); echo 'Zakładka dodana.': // pobranie zakładek zapisanych przez użytkownika i f ($tablica_urli = pobierz_urle_uzyt($_SESSION['prawid_uzyt'])) { wyswietl_urle_uzyt($tablicajjrl):

}

}

catch (Exception $e) { echo $e->getMessage();

}

?>

wyswi et1_menu_uzyt(); tworz_stopke_html():

W drugim wierszu skryptu dołączany jest plik funkcjezakladki.php. kolejnych plików:

Ten z kolei wywołuje serię



W wersji aplikacji wykorzystującej mechanizmy Ajax być może nie wszystkie rozwiązania znajdujące się w dołączanych plikach będą niezbędne do prawidłowego dodawania zakładek, lecz komentarz znajdujący się na początku rozwiewa wszelkie wątpliwości: W ten sposób każdy plik będzie zawierał wszystkie utworzone funkcje i wyjątki. W takiej sytuacji, gdy serię dynamicznych stron zastępujemy całościowym rozwiązaniem Ajax, lepiej jest dołączyć kilka niepotrzebnych funkcji, niż usuwać kluczowe fragmenty implementacji bez upewnienia się, że rzeczywiście nie będą one używane. Dlatego drugi wiersz skryptu dodaj zak.php należy pozostawić bez zmian. Bez zmian powinien również pozostać pierwszy wiersz skryptu, w którym rozpoczynana się lub jest kontynuowana sesja użytkownika. Nawet bowiem w wersji aplikacji korzystającej z Ajaksa trzeba zapewnić odpowiedni poziom bezpieczeństwa. Zmian nie wymaga także trzeci wiersz skryptu, w którym wartości POST przesyłanej w ramach żądania nadawana jest krótka nazwa $nowy_url: $nowy_url = $_POST['nowy_url']: Wreszcie doszliśmy do punktu, z którego można usunąć fragment skryptu. Chodzi o następujący wiersz kodu: tworz_naglowek_html('Dodawanie zakładek');

Rozdział 34. • Tworzenie aplikacji Web 2.0 z wykorzystaniem technologii Ajax

783

Ponieważ wyświetlana jest już strona dodaj_zak Jormularz.php, która zawiera nagłówek HTML, nie trzeba go powtarzać, ponieważ użytkownik nie zostanie przekierowany do innej strony. Właśnie to powtórzenie spowodowało dwukrotne wystąpienie nagłówka i tytułu na rysunku 34.4. Z analogicznych względów można usunąć dwa ostatnie wiersze skryptu dodaj_zak.php: wyswietl_menu_uzyt(); tworz_stopke_html(); Gdy wspomniane fragmenty skryptu zostaną usunięte, sam skrypt zostanie załadowany na serwer i spróbujemy dodać nową zakładkę, wyniki będą już bardziej zgodne z oczekiwaniami. Wciąż jednak to nie koniec zmian, które trzeba wprowadzić. Na rysunku 34.5 przedstawiono efekt działania aplikacji po wprowadzeniu opisanych dotąd zmian. Rysunek 34.5. Dodanie zakładki po wprowadzeniu pierwszego zestawu poprawek w skrypcie dodaj_zak.php

Q ' , pik lit

"

} »

0

£««»

UhiOKme

.... mm. : 0

loolhoit, .

" yillMM

.. N«ięaas

—..

- ®

'

i«t!;x-i

Pumo!

D

ZakładkaPHP Dodawanie zakładek Załogowano jako daniel | http://www.googie.com

Załogowano jako daniel Próba dodania http .INtmt google com Zakładka dodana

Home I Dodaj zakładkę | : . Zarekomenduj URL q | Wylosowanie

£

Lokalny intranet



\

LOOS.

Nadał na stronie dwukrotnie wyświetlana jest informacja o tym, jaki użytkownik jest aktualnie zalogowany; generalnie jednak problemy nie s ą j u ż tak widoczne, jak wcześniej. W kolejnym kroku trzeba usunąć podwójne wyświetlanie komunikatów, a także zmienić pewne zmiany w mechanizmach obsługi wyjątków, aby dostosować j e do specyfiki rozwiązań Ajax. Aby usunąć przyczynę dwukrotnego wyświetlania komunikatu wskazującego nazwę zalogowanego użytkownika, z pliku dodajjzak.php należy usunąć następujący wiersz: sprawdz_prawid_uzyt(): Użytkownik został już zweryfikowany w momencie ładowania strony dodaj_zak Jormularz.php, a przecież użytkownik nie może skorzystać ze strony z zaimplementowanymi rozwiązaniami Ajaksa, jeżeli wcześniej się nie zaloguje. W dalszej kolejności należy usunąć zewnętrzny blok try i obsługę wyjątków. Oczekujemy bowiem, że wykonanie skrypt dotrze do końcowej fazy, w której użytkownikowi wyświetlana jest lista adresów

784

Część V • Tworzenie praktycznych projektów PHP i MySGJL

URL już wcześniej przez niego zapisanych. W tym celu konieczne jest wprowadzenie pewnych modyfikacji, dzięki którym strona będzie wyświetlać komunikat o błędzie w postaci tekstowej. Zmodyfikowana wersja skryptu dodaj zak.php znajduje się na listingu 34.9. Listing 34.9. Zmodyfikowana wersja skryptu dodaj_zak.php Formularz nie został prawidłowo wypełniony.

"; } else { // formularz wypełniony; sprawdzenie i ewentualnie naprawienie adresu URL i f (strstr($nowy_url, 'http://') === false) { $nowy_url = 'http://',$nowy_url:

}

// sprawdzenie prawidłowości URL-a i f (!(@fopen($nowy_url. ' r ' ) ) ) { echo "

Adres URL nieprawidłowy.

"; } else { // adres URL prawidłowy; dodanie zakładki dodaj_zak($nowy_url);

}

}

// bez względu na to. czy zakładkę dodano, czy nie. // następuje pobranie zakładek zapisanych przez użytkownika i f ($tablica_urli = pobierz_urle_uzyt($_SESSION['prawid_uzyt'])) { wyswietl_urle_uzyt(Stablica_urli): ?>

}

Po wprowadzeniu zmian skrypt nadal realizuje logiczną sekwencję obsługi możliwych zdarzeń, lecz odpowiedni komunikat o błędzie jest już wyświetlany bez powtarzania innych elementów strony. Najpierw skrypt sprawdza, czy formularz został wypełniony. Jeżeli nie, pomiędzy formularzem dodawania nowej zakładki a listą aktualnie zapisanych w systemie zakładek użytkownika wyświetlany jest odpowiedni komunikat o błędzie. Jest on widoczny na rysunku 34.6. Dalej skrypt sprawdza, czy adres URL ma prawidłowy format. Jeżeli format podanego adresu jest nieprawidłowy, ciąg znaków zostaje przekształcony w URL w prawidłowej, a skrypt przechodzi do następnej czynności. W jej trakcie następuje otwarcie gniazdka i sprawdzenie, czy adres URL rzeczywiście istnieje. Jeżeli okaże się, że podany adres URL nie istnieje, między formularzem dodawania nowej zakładki a listą aktualnie zapisanych w systemie zakładek użytkownika wyświetlany jest odpowiedni komunikat o błędzie. Jeśli natomiast adres URL rzeczywiście istnieje, zostanie on dodany do listy zakładek danego użytkownika. Na rysunku 34.7 przedstawiono działanie aplikacji w sytuacji, gdy użytkownik próbował zapisać nieistniejący adres URL.

Rozdział 34. • Tworzenie aplikacji Web 2.0 z wykorzystaniem technologii Ajax

Rysunek 34.6. Próba dodania pustego adresu URL

u-. < .? » Plik ^

El

gdyga

Ulubione

localhost

Widok

ytuoione

-

i.phjj Mar^ctoa

l

i

785

•» : x

Pomoj

Dodawanie zakładek

* f

!

y P ZakładkaPHP Dodawanie zakładek Załogowano jako daniel Nowa

Doda, zakładką f o r m u l a r z nie został prawidłowo wypełniony

Zakładka

Usuń?

http "www mysgl com hUR / f a f i W php n t f

'

http ..hęlion pl 1 http •/slashdol ofg

httD //www google com

Home 1 Dodai zakładkę | Zarekomenduj URL-e 1 Wylogowanie

'

3

H

| Zmiana hasła

Lokalny intranet

t' A -

^łCO^

*

Na końcu skryptu, bez względu na to, czy w trakcie dodawania nowej zakładki wystąpiły jakieś błędy, wyświetlone zostają wszystkie zakładki użytkownika aktualnie przechowywane w systemie. Wynik działania skryptu przedstawiono na rysunku 34.8. Podstawowy mechanizm dodawania zakładek został już rozszerzony o rozwiązania Ajax, jednak nadal kilka elementów wymaga zmiany. Na przykład w funkcji dodaj_zak() z pliku funkcje url.php obsługiwanych jest kilka wyjątków, które można by obsłużyć w nieco inny sposób — tak aby w nowej wersji systemu zwracać odpowiedni komunikat o błędzie. Na listingu 34.10 znajduje się kod oryginalnej funkcji dodaj_zak(). Listing 34.10. Kod istniejącej funkcji dodaj_zak() z pliku funkcje_url.php function dodaj_zak($nowy_url) { // dodawanie nowych zakładek do bazy danych echo "Próba dodania ",htmlspecialchars(Snowy_url)."
"; $prawid_uzyt - $_SESSION['prawid_uzyt']: $lacz = lacz_bd(): // sprawdzenie, czy zakładka już istnieje Swyni k = Slacz->query("select * from zakładka where nazwa_uz='Sprawid_uz' and URL_zak='".Snowyjjrl ); i f (Swynik && (Swynik->num_rows>0)) { throw new Exception('Zakładka już istnieje.'):

}

// umieszczenie nowej zakładki

786

Część V • Tworzenie praktycznych projektów PHP i MySGJL

Rysunek 34.7. Próba dodania nieistniejącego adresu URL

0 0 *

ej localhost

s Plik

£dyya

•j^ Ulubione

Widok

yiuDione

• Na»xed2)a

^

X

Pomoj

Dodawanie rakładek

;

ZakładkaPHP

|



Dodawanie zakładek Załogowano jako daniel

fe^Podai

zakładką

|

Adres URL nieprawidłowy Zakładka htto I h m * m v s o l c o m

Usuń?

i SU

0

1

htto //helion pl

9

http //siaahdot otą

,C

http y.www ęoople c o m

Home i Dodai zakładkę | Zarekomenduj URL-e | Wyłooowanie

[ Zmiana hasła

$

Lokalny Intranet

fg



i f (!$lacz->query("insert into zakładka values ("'.Sprawid_uzyt."'. "\$nowy_url."')")) { throw new Exception('Wstawienie nowej zakładki nie powiodło się'):

}

}

return true:

W tym przypadku trzeba jedynie zmienić sposób obsługi wyjątków, tak aby generowane były komunikaty o błędach, a przetwarzanie (wyświetlanie) było kontynuowane. W tym celu wystarczy zmienić dwa bloki i f do następującej postaci: i f (Swynik && ($wynik->num_rows>0)) { echo "

Zakladka juz istnieje.

": } else { I I umieszczenie nowej zakładki i f (!$lacz->query("insert into zakładka values ( "' .Sprawidjjzyt."'. "'.$nowy_url."')")) { echo "

Wstawienie nowej zakładki nie powiodło sie

": } else { echo "

Zakladka została dodana.

":

}

}

Po wprowadzeniu zmian w skrypcie nadal realizuje on logiczny ciąg czynności związanych z obsługą błędów, a także wyświetla odpowiednie komunikaty o błędach. Po sprawdzeniu, czy dana zakładka została już wcześniej zapisana przez użytkownika, skrypt wyświetla treść komunikatu o błędzie pomiędzy formularzem dodawania nowej zakładki a listą aktualnych zakładek użytkownika, bądź też skrypt podejmuje próbę zapisania zakładki w bazie danych.

Rozdział 34. • Tworzenie aplikacji Web 2.0 z wykorzystaniem technologii Ajax

Rysunek 34.8. Adres URL istnieje i został zapisany bez błędu

787

0 Oo&m»me z. w

pik U

0

Edycja

Ulubione

localhost &'idok

-

jJHibione

Nargędzia

a * **

x

Pornos

jjjSJ Dodawani? raktadek

ZakładkaPHP Dodawanie zakładek Załogowano jako daniel

•feOodai i

Próba dodania onepress pl Zakładka dodana Zakładka

Usuń?

http //www myscl com MUfc/Anw ptm w ł http.//helion, pl

'

http .'/slasMotorci

PS

http //www gopgle com htto //onepress. pl

%

O

* *

H

iK

i

8if'

n i B H f l S

Home | Dodai zakładkę | Usun zakładki | Zmiana hasła Zarekomenduj URL-e | Wylogowanie

lokalny intranet

Jeżeli zakładki nie można dodać, ponownie między formularzem dodawania nowej zakładki a listą aktualnych zakładek użytkownika wyświetlany jest komunikat o błędzie. Jeżeli natomiast zakładka zostanie bez błędu zapisana w bazie systemu, wyświetlony zostanie komunikat o treści „Zakładka została dodana". Odpowiednia instrukcja echo została usunięta ze skryptu dodaj zak.php i umieszczona w odpowiednim miejscu funkcji dodaj_zak(), ponieważ w przeciwnym razie użytkownik mógłby ujrzeć komunikat błędu „Wstawienie nowej zakładki nie powiodło się", a zaraz po niej informację „Zakładka została dodana", mimo że ostatecznie zakładka nie zostałaby zapisana. Na rysunku 34.9 przedstawiono działanie aplikacji po wprowadzeniu opisanych zmian.

Dodatkowe zmiany w aplikacji ZakładkaPHP Zmiana funkcji dodawania zakładek na rozwiązanie z interfejsem użytkownika bazującym na technologii Ajax to tylko jedna z wielu zmian, jakich można by dokonać w aplikacji. Logicznie rzecz biorąc kolejną funkcją, którą można by zmodyfikować, jest mechanizm usuwania zakładek. Sekwencja wprowadzania zmian mogłaby przebiegać następująco: • Usunięcie łącza Usuń zakładki ze stopki strony. • Wywołanie nowej funkcji JavaScript, gdy użytkownik zaznaczy pole wyboru Usuń? obok wybranej zakładki. • Zmodyfikowanie skryptu usun_zak.php w taki sposób, by był on wywoływany przez nową funkcję JavaScript, wykonywał samą czynność usuwania i zwracał komunikat przeznaczony dla użytkownika. • Wprowadzenie dodatkowych zmian w aplikacji, aby zapewnić, że w nowym interfejsie użytkownika czynności są wykonywane prawidłowo i komunikaty są prezentowane w odpowiednich miejscach.

788

Część V • Tworzenie praktycznych projektów PHP i MySGJL

Rysunek 34.9. Próba dodania zakładki, która już istnieje

C Oodawaiwe zakładek - Windows Interne t Ecpłora * 1 |

Plik

.

E J http//localhost

Edycja

Ulubione


Ulubione

Narzędzia

a

V:x;

Pomoc

; g j j Dodawanie zakładek

ZakładkaPHP D o d a w a n i e zakładek Załogowano jako daniel

5S*. [

Dodaj zakładkę

j

Próba dodania http //helion pi Zakładka już istnieje

http . ' / m m mysai com h t t p . ^ p / w w p h u net

http "helion pl

http "wwyt gppgle com I W O T W I T O Pl

Home | Dodai zakładkę | Zarekomenduj URL-e i Wytonowanie

1 Zmiana hasła

Lokalny intranet

-

tjlOOn

Ponieważ struktura aplikacji jest już gotowa na dokonanie zmian, do ich wprowadzenia powinny wystarczyć informacje zawarte w tym rozdziale. W dalszych punktach natomiast wskazane zostaną łącza do zasobów ze znacznie bardziej szczegółowymi informacjami na temat tworzenie witryn internetowych z wykorzystaniem funkcji Ajaksa. Należy pamiętać, że Ajax to w rzeczywistości zbiór technologii, które działając łącznie zapewniają znacznie bardziej płynne funkcjonowanie interfejsu użytkownika. Jednak w celu skorzystania z dobrodziejstw Ajaksa, gdy zna się już wszystkie elementy układanki i ich miejsce, trzeba na nowo przemyśleć strukturę aplikacji.

Źródła dodatkowych informacji Informacje zaprezentowane w tym rozdziale opisują zaledwie podstawy tworzenia aplikacji z wykorzystaniem Ajaksa. W nowej książce Ąjax, JayaScript i PHP. Intensywny trening wszystkie informacje zawarte w tym rozdziale (a potem również informacje dodatkowe) prezentowane są w sposób znacznie bardziej szczegółowy, dlatego książkę można traktować jako kolejną pozycję do przeczytania po przyswojeniu sobie informacji zaprezentowanych w tym rozdziale. Istnieje ponadto wiele witryn internetowych poświęconych w całości lub w części technologiom wykorzystywanym do tworzenia technologii Ajax, a także dostępne są biblioteki kodu, dzięki którym można tworzyć własne rozwiązania bez konieczności implementowania mechanizmów, które zaimplementował już ktoś inny.

Rozdział 34. • Tworzenie aplikacji Web 2.0 z wykorzystaniem technologii Ajax

789

Dodatkowe informacje na temat Document Object Model (DOM) Niniejsza książka skupia się na programowaniu działających po stronie serwera skryptów PHP oraz wykorzystaniu MySQL w roli serwera baz danych, natomiast praktycznie nie są w niej poruszane zagadnienia dotyczące technologii działających na kliencie, takich jak XHTML, CSS, JavaScript i Document Object Model (DOM). Dla osób, które nie znają modelu DOM, zagadnienie to powinno być pierwszym tematem do przyswojenia, aby myśleć o poszerzeniu wiedzy i w dalszej perspektywie również tworzeniu pełnowymiarowych aplikacji Ajax. W wielu, jeśli nie we wszystkich, tworzonych aplikacjach Ajax model dokumentów DOM będzie przetwarzany przy użyciu kodu JayaScript. Bez względu na to, czy operacje będą wykonywane na wyświetlanych elementach, historii przeglądarki, czy lokalizacji okien, zawsze kluczowym elementem będzie prawidłowe rozumienie sposobu działania obiektów i właściwości udostępnianych w modelu DOM. Bez szczegółowej znajomości modelu praktycznie niemożliwe będzie zaimplementowanie płynnie działającego interfejsu użytkownika, co jest przecież podstawowym celem aplikacji Ajax. Poniżej znajduje się lista kilku witryn internetowych z mnóstwem informacji pomocnych w poznaniu modelu DOM: • Techniczne raporty organizacji W3C na temat modelu Document Object Model, dostępne pod adresem http://www.w3.org/DOM/DOMTR. • Witryna internetowa grupy DOM Scrpiting Task Force pod adresem webstandards. org/.

http://domscripting.

• Dokumentacja DOM w ramach Projektu Mozilla, dostępna pod adresem http://developer. mozilla.org/en/docs/DOM(na tej samej witrynie pod adresem http://developer.mozilla.org/ en/docs/JavaScript, dostępne są również przydatne informacje na temat języka JayaScript).

Biblioteki JavaScript dla aplikacji Ajax Aplikacje oparte na technologii Ajax powstają mniej więcej od roku 2005, w którym Jesse James Garrett ukuł termin Ajax, ponieważ poszukiwał krótszego określenia na stosowane łącznie technologie „Asynchroniczny JayaScript + CSS + DOM + XMLHttpRequest", o których opowiadał klientom w trakcie prezentowania podejścia do tworzenia aplikacji. Od tego czasu minęło już wystarczająco dużo czasu, by powstało wiele bibliotek funkcji JavaScript ułatwiających programistom tworzenie aplikacji Ajax. O i Ł *

Esej Garretta nosi tytuł „Ajax: A New Approach to Web Applications"; można go przeczytać na stronie pod adresem http://www.adaptivepath.com/ideas/essays/archives/ 000385.php.

Poniżej znajduje się lista najpopularniejszych bibliotek, choć przejrzenie dowolnych witryn poświęconych technologii Ajax powinno doprowadzić do wielu innych bibliotek JayaScript. Wybór jednej (lub więcej) z nich skróci czas tworzenia aplikacji Ajax, ponieważ — j a k już przed chwilą wspomniano — nie trzeba będzie samodzielnie implementować funkcji, które zostały już napisane przez kogoś innego. • Prototype JavaScript Framework ułatwia operowanie na modelu DOM oraz korzystanie z obiektu XMLHTTPRequest, a przez to pomaga w tworzeniu aplikacji Ajax. Więcej informacji można znaleźć na stronie pod adresem http://www.prototypejs.org/.

790

Część V • Tworzenie praktycznych projektów PHP i MySGJL

• Dojo to zestaw narzędzi o otwartym dostępie do kodu źródłowego. W skład zestawu wchodzą podstawowe funkcje JavaScript oraz platforma do tworzenia widżetów, a także mechanizm służący do efektywnego tworzenia i dostarczania pakietów kodu innym użytkownikom. Więcej informacji można znaleźć na stronie pod adresem http://dojotoolkit.org/. • MochiKit to niewielka biblioteka, która zawiera funkcje przeznaczone do pracy z modelem DOM oraz formatowania danych wynikowych przeznaczonych dla użytkownika. Motto przyświecające twórcom MochiKit jest trochę obcesowe, ale bardzo szczere; głosi, że „Dzięki MochiKit JavaScript jest trochę mniej do kitu". Warto zainteresować się biblioteką ze względu na zawarte w niej funkcje i rozwiązania, dokumentację dostępną dla programistów oraz przykładowe projekty, które zaimplementowano z jej użyciem. Więcej informacji można znaleźć na stronie pod adresem http://mochikit.com/.

Witryny internetowe przeznaczone dla programistów Ajax Najlepszym sposobem nauczenia się programowania w technologii Ajax jest samodzielne programowanie. Warto zebrać kilka przykładowych fragmentów kodów, zobaczyć, jak poszczególne komponenty można zintegrować z napisanymi wcześniej własnymi aplikacjami i brać przykład z tych, którzy już od jakiegoś czasu programują z użyciem Ajaksa. Poniżej przedstawiono kilka zasobów, dzięki którym łatwiej będzie rozpocząć przygodę z Ajaksem: • Ajaxian to portal przeznaczony dla programistów, na którym publikowane są wiadomości, artykuły, samouczki i przykładowe fragmenty kodu źródłowego przeznaczone zarówno dla początkujących, jak i już doświadczonych programistów. Więcej informacji można znaleźć pod adresem http://ajcaian.com/. • Ajax Matters zawiera obszerne artykuły na temat programowania w Ajaksie. Więcej informacji można znaleźć na stronie pod adresem http://www.ajaxmatters.com/. • Ajax Lines to kolejny portal przeznaczony dla programistów, w którym znajdują się łącza do wiadomości i artykułów na temat nieomal wszystkich zagadnień dotyczących Ajaksa. Wiecej informacji można znaleźć na stronie pod adresem http://www.ajaxlines.com/.

Dodatki

Dodatek A

Instalacja PHP i MySQL Apache, PHP i MySQL dostępne są w wersjach przeznaczonych na różne platformy systemowe i dla różnych serwerów WWW. W tym dodatku wyjaśnimy, w jaki sposób należy instalować Apache, PHP i MySQL na różnych serwerach. Uwzględnimy ich najpopularniejsze wersje przeznaczone dla systemów UNIX i Windows XP. W tym dodatku zostaną poruszone następujące zagadnienia: •

uruchamianie PHP jako CGI lub moduł serwera,



instalacja Apache, SSL, PHP i MySQL w systemie UNIX,



instalacja Apache, PHP i MySQL w systemie Windows,



testowanie poprawności działania: funkcja phpi nfo(),



instalowanie PEAR,

• uwagi na temat innych konfiguracji. W niniejszym dodatku nie zostały przedstawione informacje na temat sposobu dodawania języka PHP do serwera Microsoft Internet Information Services oraz innych serwerów WWW. Gdy jest to możliwe, najlepiej jest korzystać z serwera Apache. Informacje na temat instalowania PHP na serwerach Microsoft IIS albo Personal Web Server (PWS) można znaleźć w odpowiedniej sekcji Podręcznika PHP, pod adresem http://www.php.net/manual/en/install.windows.iis.php. Celem tego dodatku jest zaprezentowanie pełnego procesu instalacji serwera W W W , umożliwiającego udostępnianie wielu witryn internetowych. Niektóre z nich, jak pokazano na wcześniejszych przykładach, będą wymagać protokołu SSL do prowadzenia za ich pośrednictwem działalności komercyjnej. Niemal wszystkie natomiast będą zawierały skrypty realizujące połączenie z serwerem baz danych oraz wyszukujące i przetwarzające dane. Wielu użytkowników PHP nigdy nie staje przed koniecznością instalowania PHP na komputerze, dlatego też zagadnienia te umieszczone zostały w dodatku, a nie w rozdziale 1. Najłatwiejszym sposobem uzyskania dostępu do dobrego serwera posiadającego szybkie połączenie z internetem i mającego zainstalowane PHP jest założenie konta na jednym z tysięcy serwisów oferujących usługi hostingowe lub u sprzedawców tego typu usług działających na całym świecie. Zależnie od powodów, dla których PHP ma zostać zainstalowane na komputerze, różne będą też podejmowane decyzje. Jeżeli komputer przez cały czas utrzymuje połączenie z siecią i będzie miał pełnić rolę serwera z prawdziwego zdarzenia, należy zastanowić się nad kwestią jego wydajności. Jeśli tworzony jest serwer dla celów programistycznych, na którym będą się odbywać testy kodu,

794

Dodatki

najważniejszą kwestią będzie zapewnienie zgodności jego konfiguracji z konfiguracją prawdziwego serwera. Jeszcze nieco inne wymogi trzeba będzie wziąć pod uwagę, jeśli na tym samym komputerze będą miały działać i ASP, i PHP. Interpreter PHP może być uruchomiony jako moduł serwera lub jako CGI. Zazwyczaj używa się go jako modułu ze względu na większą wydajność. Z drugiej strony wersja CGI jest czasami stosowana na serwerach, na których wersja w postaci modułu jest niedostępna, lub dlatego, że pozwala ona użytkownikom serwera Apache na uruchamianie różnych stron PHP jako użytkownikom o różnych identyfikatorach. W tym dodatku zostanie przedstawiona metoda instalacji PHP jako modułu.

Instalacja Apache, PHP i MySQL w systemie UNIX Zależnie od potrzeb i stopnia doświadczenia z systemami Unix można zdecydować się na instalację przy użyciu binariów lub przeprowadzenie bezpośredniej kompilacji kodów źródłowych. Oba rozwiązania mają swoje zalety. Instalacja na podstawie binariów zajmie doświadczonym użytkownikom kilka minut, a początkujący spędzą tylko trochę więcej czasu. Efektem jednak będzie prawdopodobnie system o wersji o jeden lub dwie niższej od wersji najnowszej, którego ustawienia konfiguracyjne zostały określone przez kogoś innego. Instalacja przy użyciu kodów źródłowych wymaga spędzenia kilku godzin niezbędnych na pobranie źródeł, zainstalowanie i skonfigurowanie, co na początku może odstraszyć wiele osób. Taki sposób daje jednak pełną kontrolę. Decyzję o tym, co zainstalować, jaką wersję zastosować i jakie ustawić dyrektywy konfiguracyjne, podejmuje użytkownik.

Instalacja przy użyciu binariów Większość dystrybucji Linuksa zawiera prekonfigurowany serwer Apache z wbudowanym PHP. Szczegóły będą zależeć od wybranej dystrybucji oraz jej wersji. Jedną z wad instalacji przy użyciu binariów jest to, że rzadko zawierają one najnowsze wersje programu. Zależnie od tego, jak ważne były ostatnio opublikowane poprawki, nie musi to stanowić aż tak dużego problemu. Najważniejszą kwestią jest to, że użytkownik nie ma wyboru, co ma zostać skompilowane wraz z programem. Metodą najbardziej elastyczną i niezawodną jest dokonanie kompilacji kodów źródłowych wszystkich wymaganych programów. Będzie to wymagać nieco więcej czasu niż w przypadku instalowania pakietów RPM, dlatego można zdecydować się na zastosowanie RPM lub innych dostępnych pakietów binariów. Nawet jeśli pliki binarne z pożądaną konfiguracją nie są dostępne z oficjalnych źródeł, można próbować je odnaleźć na serwisach nieoficjalnych, korzystając z wyszukiwarki internetowej.

Instalacja przy użyciu kodów źródtowych Zaczniemy od instalacji serwera Apache oraz PHP i MySQL w środowisku UNIX. Wcześniej jednak należy zdecydować, jakie dodatkowe moduły zostaną wraz z nimi zainstalowane. Część przykładów z tej książki służyła do przeprowadzania bezpiecznych transakcji w internecie, konieczne więc będzie zainstalowanie serwera wykorzystującego protokół SSL.

Dodatek A • Instalacja PHP i MySGJL

795

Dla celów tej książki zainstalujemy standardową wersję PHP, oprócz tego jednak zostanie pokazane, w jaki sposób można udostępniać dodatkową bibliotekę PHP o nazwie gd2. Biblioteka gd2 to tylko jedna z wielu bibliotek przeznaczonych dla PHP. Zostanie one dołączona w celu pokazania ogólnej zasady udostępniania dodatkowych bibliotek PHP. Proces kompilacji większości programów przeznaczonych dla systemów Unix przebiega w podobny sposób Po zainstalowaniu nowej biblioteki konieczne jest zazwyczaj dokonanie ponownej kompilacji PHP, dlatego jeśli od razu wiadomo, jakie składniki trzeba będzie zainstalować, najlepiej jest najpierw zainstalować na komputerze wymagane biblioteki, a dopiero potem przystąpić do kompilacji modułu PHP. Zaprezentowany proces instalacji odnosi się do serwera SuSe Linux Server, jednak wykonywane czynności będą przebiegać podobnie na innych serwerach UNIX. Przedstawmy najpierw listę programów, które zostaną zainstalowane: • Apache (http://www.apache.org/) — serwer WWW, • OpenSSL (http://www.openssl.org/) — zestaw narzędzi mających charakter Open Source, implementujących Secure Sockets Layer, • MySQL (http://www.mysql.com/) — relacyjna baza danych, • PHP (http://www.php.net/) — j ę z y k skryptów działających po stronie serwera, • ftp://ftp.uu.net/graphics/jpeg/—

biblioteka JPEG niezbędna dla PDFLib i gd,

• http://www.libpng.org/pub/png/libpng.html

— biblioteka PNG niezbędna dla gd,

• http://www.zlib.net/— biblioteka zlib, niezbędna dla wspomnianej wcześniej biblioteki PNG, • http://www.libtiff.org/—

biblioteka TIFF niezbędna dla PDFLib,

• ftp://ftp.cac.washington.edu/imap/—

klient IMAP c, niezbędny dla IMAP.

Jeśli konieczne będzie używanie funkcji mai 1 (), trzeba będzie zainstalować agenta transferu poczty elektronicznej (mail transfer agent — MTA), lecz tego zagadnienia nie będziemy poruszać. Zakładamy, że Czytelnik ma dostęp do serwera jako użytkownik root oraz zainstalował wcześniej następujące narzędzia: • gzip lub gunzip, • gcc oraz make GNU. Pierwszym etapem instalacji będzie pobranie wszystkich plików .tar z kodami źródłowymi do katalogu tymczasowego. Należy się upewnić, że znajduje się w nim wystarczająco dużo miejsca. Wybraliśmy katalog /usr/src na katalog tymczasowy. Wszystkie pliki najlepiej pobrać jako root, by uniknąć ewentualnych problemów z dostępem do nich w przyszłości. Instalowanie M y S Q L W tym punkcie pokażemy, jak należy przeprowadzić binarną instalację MySQL. Dzięki temu pliki zostaną automatycznie umieszczone w różnych lokalizacjach. W naszym przypadku określiliśmy następujące katalogi, w których zostanie zainstalowane odpowiednie oprogramowanie: •

/usr/local/apache2



/usr/local/ssl

796

Dodatki

Można oczywiście zainstalować j e w innych katalogach. Wówczas konieczne będzie dokonanie odpowiednich zmian w opcji prefix przed rozpoczęciem instalacji. A więc do dzieła! Najpierw należy przejść do użytkownika root, wykorzystując do tego su $ su root a następnie wpisać właściwe dla niego hasło dostępu. Potem przechodzimy do katalogu, w którym zostały zapisane pliki źródłowe: # cd /usr/src Obecnie twórcy MySQL zalecają pobieranie binariów, a nie kompilowanie serwera od podstaw. To, którąjego wersję trzeba zainstalować, zależy od funkcji, jakie będzie miał spełniać. Choć wstępne wersje MySQL są zwykle bardzo stabilne, można zrezygnować z ich używania na serwerach produkcyjnych. Jeśli głównym celem jest nabycie doświadczenia i poeksperymentowanie na własnym komputerze, można użyć którejś z dwóch najnowszych wersji. Pobraliśmy następujące pakiety RPM z

mysql.com:

MySQL-server-MERSuM.i 386.rpm MySQL-Max-WERSJA.i 386.rpm MySQL-c1i ent-WERSJA.i 386.rpm (Słowo WERSJA jest symbolem zastępczym dla numeru wersji. Bez względu na wybraną wersję należy zadbać o to, by cały zbiór dotyczył tej samej wersji.) Jeżeli serwer oraz klient MySQL będą miały pracować na tym samym komputerze, a obsługa MySQL będzie miała zostać wkompilowana w inne programy, takie jak PHP, wówczas potrzebne będą wszystkie wymienione pliki. Poniższa instrukcja spowoduje zainstalowanie wszystkich elementów: rpm - i MySQL-server-(v£7?5J/ł.i386.rpm rpm - i MySQL-Max-WE/?SJ/4. i386. rpm rpm - i MySQL-cl i ent-WERSJA.i 386.rpm Teraz serwer MySQL powinien już być zainstalowany i działać. Teraz należy nadać hasło użytkownikowi root. Ciąg nowe-haslo należy zastąpić wybranym przez siebie hasłem, w przeciwnym wypadku bowiem nowe-haslo stanie się hasłem dostępu dla użytkownika root. mysqladmin -u root password 'nowe-haslo' W trakcie instalacji MySQL automatycznie tworzone są dwie bazy danych. Jedna to mysqł, w której zapisane są dane na temat użytkowników, komputerów i przywilejów na serwerze. Drugą jest baza test. Można to sprawdzić, wykonując następujące polecenie w wierszu poleceń: # mysql -u root -p Enter password: mysql> show+databases; + +| Database+| 1 mysql +| test

| +j

2 rows in set (0.05 sec) Aby wyjść z klienta MySQL, należy wpisać quit lub \q.

Dodatek A • Instalacja PHP i MySGJL

797

Domyślna konfiguracja MySQL pozwala dowolnemu użytkownikowi na uzyskanie dostępu do systemu bez podawania nazwy użytkownika i hasła. Oczywiście jest to wysoce niepożądane. Ostatnią obowiązkową czynnością w procesie instalowania MySQL jest usunięcie anonimowego użytkownika. W tym celu należy otworzyć wiersz poleceń i wpisać poniższe instrukcje. # mysql -u root -p mysql> use mysql mysql> delete from user where User=": mysql> quit Następnie, aby zmiany te zostały uwzględnione, trzeba wpisać mysqladmin -u root -p reload Ponadto, jeśli planowane jest wykonywanie replikacji, trzeba uruchomić niezbędne do tego logowanie binarne na serwerze MySQL. W tym celu najpierw należy zatrzymać serwer: mysqladmin -u root -p shutdown Następnie trzeba utworzyć plik o nazwie /etc/my.cnf, który będzie plikiem opcji serwera MySQL. Na razie potrzebna jest tylko jedna opcja, lecz można ich wpisać więcej. Pełna lista dostępnych opcji znajduje się w podręczniku MySQL. Plik ten należy otworzyć i wpisać w nim [mysqld] log-bin Plik należy zapisać i zamknąć, po czym ponownie uruchomić serwer, wpisując mysqld_safe. Instalowanie PHP Czytelnik w dalszym ciągu powinien być zalogowany jako root. Jeśli tak nie jest, należy zmienić użytkownika, wykorzystując su. PHP wymaga, by najpierw wstępnie skonfigurować serwer Apache w celu sprawdzenia, gdzie będzie on zainstalowany. Kolejna część instalacji zostanie pokazana w dalszej części tego podrozdziału. Należy więc wrócić do katalogu, w którym przechowywane są pliki źródłowe. # cd /usr/src # gunzip -c apache_2.2.9.tar.gz | tar xvf # cd apache_2.2.9 # ,/configure --prefix=/usr/local/apache2 Po wykonaniu tych poleceń można przystąpić do instalacji PHP. Najpierw trzeba rozpakować pliki źródłowe i przejść do nowego katalogu: # cd /usr/src # gunzip -c php-5.2.6.tar.gz | tar xvf # cd php-5.2.6 Również w przypadku PHP polecenie configure zawiera wiele opcji. Wpisanie configure -help=short pomoże w podjęciu decyzji, z jakimi opcjami PHP ma zostać zainstalowane. W omawianym przypadku dodamy obsługę MySQL, Apache, PDFLib i cURL. Należy zwrócić uwagę, że niżej pokazano jedno całe polecenie. Można je zapisać w jednym wierszu lub, jak w tym przypadku, użyć odwróconego ukośnika (\) jako znaku kontynuacji, dzięki któremu możliwe będzie rozbicie tekstu polecenia na więcej wierszy w celu zwiększenia jego czytelności.

798

Dodatki

# ./configure -prefix=/ścieżka/do/php --with-mysqli=ścieżka/do/mysql_config \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-jpeg-dir=/scieżka/do/jpeglib \ --with-tiff-di r=/ścieżka/do/ti ffdi r \ --with-zlib-dir=/ścieżka/do/zlib \ --with-imap=/ścieżka/do/imapcclient \ --with-gd Następnie należy utworzyć i zainstalować binaria: # make # make install Plik . ini trzeba przenieść do katalogu lib: # cp php.ini-dist /usr/local/lib/php.ini lub # cp php.ini-recommended /usr/local/lib/php.ini Dwie wersje pliku php.ini sugerowane w powyższych poleceniach posiadają różne zestawy opcji. Pierwszy z nich, php.ini-dist, jest przeznaczony dla maszyn pełniących funkcje środowisk programistycznych. Na przykład display errors jest w nim ustawione na on. Ułatwi to tworzenie oprogramowania, ale nie jest zbyt przydatne na komputerach stanowiących środowisko produkcyjne. Odnosząc się w tej książce do domyślnych ustawień php.ini, mamy zawsze na myśli ustawienia z tej właśnie wersji pliku. Druga wersja, php.ini-recommended, przeznaczona jest dla maszyn produkcyjnych. Plik można edytować w celu dokonania zmian opcji PHP. Wybór opcji, które można ustawiać, jest bardzo szeroki, jednak kilka z nich wymaga specjalnej uwagi. Jeśli skrypty mają wysyłać wiadomości poczty elektronicznej, można ustawić odpowiednią wartość sendmai l_path. Teraz trzeba zainstalować OpenSSL. Zostanie on użyty do utworzenia tymczasowych certyfikatów i plików CSR. Opcja --prefix będzie wskazywać główny katalog instalacyjny. # gunzip -c openssl-0.9.8h.tar.gz | tar xvf # cd openssl-0.9.8h # ./config --prefix=/usr/local/ssl Następnie trzeba go utworzyć, przetestować i zainstalować: # make # make test # make install W kolejnym kroku trzeba skonfigurować serwer Apache dla celów kompilacji. Opcja - -enabl e-so umożliwia skorzystanie z dynamicznych obiektów współużytkowanych (ang. dynamie shared objects — DSO), zaś opcja --enable-ssl pozwala wykorzystać moduł mod ssl. Szczególnie dostawcy usług internetowych i twórcy pakietów powinni używać DSO dla zapewnienia maksymalnej elastyczności oprogramowania serwerowego. Należy jednak zaznaczyć, że Apache obsługuje DSO tylko na niektórych platformach. # cd ,./httpd_2.2.9 # SSL_BASE=../openssl-0.9.8h \ ./configure \ --prefix=/usr/local/apache2 \ --enable-so \ --enable-ssl

Dodatek A • Instalacja PHP i MySGJL

799

Można w końcu utworzyć Apache i odpowiednie certyfikaty, a następnie j e zainstalować. # make Jeśli wszystko zostało wykonane prawidłowo, powinien ukazać się komunikat podobny do poniższego: Before you install the package you row should prepare the SSL certificate system by running the 'make certificate' command. For different situations the following variants are provided: X make certificate TYPE=dummy (dummy self-signed Snake Oil cert) % make certificate TYPE=test (test cert signed by Snake Oil CA) X make certificate TYPE=custom (custom cert signed by own CA) X make certificate TYPE=existing (existing cert) CRT=/path/to/your.crt [KEY=/path/to/your.key] Use TYPE=dummy when you're the TYPE=test when you're the TYPE=custom when you're the TYPE=exiSting when you're (The default i s TYPE=test)

a vendor package maintainer, admin but want to do tests only, an admin willing to run a real server an admin who upgrades a server.

Additionally add ALG0=RSA (default) or ALG0=DSA to select the signature algorithm used for the generated certificate. Use 'make certificate VIEW=1' to display the generated data. Thanks for using Apache & mod_ssl.

Ralf S. Engelschall [email protected] www.engelschall.com

Teraz można utworzyć właściwy certyfikat. W tym celu należy odpowiedzieć na pytania dotyczące lokalizacji firmy, samej firmy i jeszcze kilku innych kwestii. W przypadku informacji kontaktowych trzeba podać rzeczywiste dane. Na pozostałe pytania wystarczy udzielenie odpowiedzi domyślnych. # make certificate TYPE=custom Możemy następnie zainstalować serwer Apache: # make install Jeśli wszystko przebiegło zgodnie z planem, powinna ukazać się wiadomość podobna do poniższej: You now have successfully built and installed the Apache 2.2 HTTP server. To verify that Apache actually works correctly you now should f i r s t check the (initially created or preserved) configuration files /usr/local/apache2/conf/httpd.conf and then you should be able to immediately fire up Apache the f i r s t time by running: /usr/local/apache2/bin/apachectl start Thanks for using Apache.

The Apache Group http://www.apache.org/

800

Dodatki

Pora sprawdzić, czy Apache i PHP działają poprawnie. Przedtem jednak należy zmienić pliki httpd.conf lub srm.conf w celu dodania typu PHP do konfiguracji serwera.

Plik httpd.conf — informacje końcowe Należy otworzyć plik httpd.conf. Jeśli wszystkie instrukcje zostały wykonane w takiej postaci, w jakiej je podano, httpd.conf powinien znajdować się w katalogu /usr/local/apache2/conf. Plik ten będzie zawierał znak komentarza na początku wiersza zawierającego dyrektywę addtype dla PHP. Powinien on zostać usunięty, by dyrektywa wyglądała następująco: AddType appłicat1on/x-httpd-php .php AddType application/x-httpd-php-source .phps Teraz można uruchomić Apache i sprawdzić, czy działa poprawnie. Najpierw włączymy serwer bez obsługi SSL, by ustalić, czy w ogóle się uruchomi. Skontrolujemy obsługę PHP, po czym zatrzymamy serwer i ponownie go uruchomimy, tym razem z włączoną obsługą SSL. W ten sposób sprawdzimy, czy wszystko działa poprawnie. Za pomocą polecenia configtest można sprawdzić, czy konfiguracja serwera jest poprawna: # cd /usr/local/apache2/bin # ,/apachectl configtest Syntax OK # ,/apachectl start ./apachectl start: httpd started Jeśli serwer działa prawidłowo, przeglądarka powinna po połączeniu się z nim wyświetlić stronę podobną do tej przedstawionej na rysunku A. 1. Rysunek A.l. Domyślna strona testowa wyświetlana przez serwer Apache

©' Pttfc

O Edycja

9 t Wubiont

'-'•••{

localhost > •

"

Widok

Ulubione

Narzędzia

Pomoc

(SJ http://loc3!f>ost/mde*.frtmt

It works!

lokalny intranet

(ą •

00*1 '

Można nawiązać połączenie z serwerem, podając nazwę domeny lub adres IP komputera. Należy sprawdzić oba przypadki, aby upewnić się, że wszystko działa poprawnie.

Czy obsługa PHP działa poprawnie? Należy również sprawdzić, czy PHP jest prawidłowo obsługiwane przez serwer. W tym celu można utworzyć plik o nazwie test.php i wpisać do niego kod przedstawiony poniżej. Plik ten powinien zostać umieszczony w katalogu dokumentów, którym standardowo jest /usr/local/apache2/htdocs. A zatem ścieżka dostępu do niego zależy od wartość opcji prefi x podanej przy instalacji serwera, można jednak j ą zmienić, wprowadzając odpowiednie modyfikacje w pliku httpd.conf.

Dodatek A • Instalacja PHP i MySGJL

801

W efekcie wywołania pliku test.php przeglądarka powinna wyświetlić stronę podobną do przedstawionej na rysunku A.2. Rysunek A.2. Funkcja phpinfof) powoduje wyświetlenie informacji dotyczących konfiguracji

b PNk

Edycja

isg Ulubione

0

localhost

Wtdok

Ulubion*

^ u'f

r

N»r2fdna

|

*t

*

Pomoc

—1—— —

igjphpmfó»0

PHP Versioir 5.2.8

P ®

System

Windows NT VM D ANI E L 5.1 build 2800

But Id Date

Dec 8 2008 19:30 48

Configure Cornmand

cscftpttooiogo configure. js -erłable-soapahot-bulld* '-enable-debug-pack -/vith3napshct-templ3te=d^hp-sdk ! ,sfi3p_5_25vc6Vre6;ternplaie -vVitti-php-bulld=d',php5dksnap_5_2wc5 , ^6 , php_build-wim-pdo-ocl=D:\php-sd^or3cleynstantclientlO iSdKsbared -Alth-oci8=D:php-sd^oraae'jnstan{client10'>sdk.sh3red

Server A P ł

apache 2.0 Handler

Virtual Directory Support

enabled

Configuratlon FUe (php.ini) Path

C.iWtNDOWS

Loaded Configuratlon File

C«ampp\apach*bimpnp m

Scan this dtr for (nonę) additional .ini files adttitional .ini files (nooe) parseti P H P AP1

20041225

P H P Exten6lon

20060613

Z e n d Extension

220063519

Debug Build T h r e a d Safety

efta&led

Zend M e m o r y

enabled

lPv6 Support

enabled

Registered P H P Streams

php. file. data. http. ftp. compresszlib a p

Registered Stream SocKet Transports

tcp. udp

Registered Stream Fllters

conyeiticon..'. stringrotlS. stfing.toupper, strlng.toiower s t ń r i g s t r i p j a g s . cohvert.\ consumed, zltb*

This program makes use of the Zend Scnptlng Language Engine Zend Engine »2.2.0. Copyright (O 1998-2008 Zend Technologies with Zend Ertensłon Manager vi.2.0, Copyright cci 2003-2007, by Zend Technologies wtth Zend OptJmiier v3.3.3. Copyright (c) 1998-2007. by Zend Technologies •ijtf Lokalny intranet

vA

• % IQQ%

Czy SSL działa poprawnie? Aby uruchomić SSL na serwerze Apache 2.2, wystarczy w pliku httpd.conf odkomentować regułę dotyczącą pliku httpd-ssl.conf. Zatem następujący wpis znajdujący się w pliku

httpd.conf:

# Include conf/extra/httpd-ssl.conf należy zamienić na wpis o następującej treści: Include conf/extra/httpd-ssl .conf W samym pliku httpd-ssl.conf również można wykonać szereg zmian konfiguracyjnych. Więcej informacji na ten temat znajduje się w dokumentacji serwera Apache pod adresem http://httpd. apache. org/docs/2.2/mod/mod_ssl. html.

802

Dodatki

Po wprowadzeniu zmian w konfiguracji należy zatrzymać i ponownie uruchomić serwer: # /usr/local/apache2/bin/apachectl stop # /usr/local/apache2/bin/apachectl startssl Aby sprawdzić poprawność działania SSL, należy połączyć się z serwerem za pomocą przeglądarki przy wykorzystaniu protokołu HTTPS: https://serwer.domena.com Należy do tego celu użyć również adresu IP w następujący sposób: https://xxx.xxx.xxx.xxx lub http://xxx.xxx.xxx.xxx:443 Jeśli wszystko zadziałało poprawnie, serwer wyśle do przeglądarki certyfikat w celu nawiązania bezpiecznego połączenia. Spowoduje to wyświetlenie przez przeglądarkę prośby o akceptację certyfikatu. Gdyby pochodził on z instytucji certyfikującej znanej już przeglądarce, prośba taka nie pojawiłaby się. W tym przypadku utworzony i podpisany został nasz własny certyfikat, nie chcieliśmy bowiem od razu go kupować. Najpierw zamierzaliśmy się upewnić, że wszystko zadziała prawidłowo. W przeglądarkach Internet Explorer i Firefox w pasku stanu pojawi się symbol kłódki. Wskazuje on, że nawiązane zostało bezpieczne połączenie. Na rysunku A.3 pokazano symbol wyświetlany przez Firefox (ikona jest zazwyczaj widoczna w dolnym prawym lub lewym rogu przeglądarki).

B secure.helion.pl

|

Rysunek A.3. Przeglądarki internetowe wyświetlają ikonę kłódki, informując, że dana strona została przesłana przy użyciu protokołu SSL Aby móc korzystać z modułów języka PHP jak z obiektów współdzielonych, konieczne będzie wykonanie jeszcze dodatkowych czynności. Najpierw należy skopiować skompilowany moduł do katalogu rozszerzeń extensions PHP. Będzie to najprawdopodobniej /usr/local/lib/php/extensions Następnie w pliku php.ini należy dodać następujący wiersz: extension = nazwa_rozszerzenia.so Po wprowadzeniu zmian w pliku php.ini konieczne będzie zrestartowanie serwera.

Instalacja Apache, PHP i MySQL w systemie Windows W systemie Windows instalacja PHP przebiega nieco inaczej, gdyż może on zostać zainstalowany jako CGI (plik php.exe) lub moduł ISAPI (plik php5apache2_2.dll). Natomiast Apache i MySQL są instalowane w sposób podobny jak w systemach UNIX. Przed przystąpieniem do dzieła należy wpierw zainstalować najnowsze wersje oprogramowania korygującego pracę systemu Windows.

Dodatek A • Instalacja PHP i MySGJL

803

PHP5.3 nie obsługuje już żadnej wersji systemu Windows wcześniejszej niż Windows 2000. 'jjĘ|K ' PHP5.3 obsługuje wyłącznie Windows 2000, Windows Server 2003, Windows Server 2008 jgWBćffiB oraz Windows Vista (a także wszystkie wersje późniejsze). W przypadku dysponowania wolnym połączeniem z internetem można zainstalować oprogramowanie znajdujące się na płycie CD, jednak będzie ono zapewne o jedną lub więcej wersji zdezaktualizowane.

Instalacja MySQL w systemie Windows Poniższe instrukcje dotyczą systemu Windows Vista. Zaczniemy od zainstalowania MySQL. Odpowiedni plik Windows Essentials *.msi można pobrać z witryny http://www.mysql.com. Plik należy dwukrotnie kliknąć myszą, aby rozpocząć instalację. Na pierwszych kilku ekranach kreatora instalacji należy podać ogólne informacje oraz zaakceptować licencję MySQL. Informacje zawarte na ekranach trzeba przeanalizować, a następnie za każdym razem kliknąć przycisk Dalej, aby przejść do kolejnego ekranu. Pierwszą ważną decyzją będzie wybór typu instalacji. Dostępne są instalacje typowa (Typical), podstawowa (Compact) oraz użytkownika (Custom). Dla naszych celów wystarczy instalacja typowa, dlatego najlepiej jest zostawić domyślnie zaznaczone pole wyboru i nacisnąć przycisk Dalej, aby kontynuować proces instalacji. Po zakończeniu procesu instalacji należy przejść do kreatora konfiguracji MySQL Configuration Wizard, aby utworzyć w nim odpowiedni plik my.ini skrojony na własne potrzeby. W celu przejścia do kreatora konfiguracji należy zaznaczyć pole wyboru Configure MySQL Sewer Now i kliknąć przycisk Zakończ. Na kilku kolejnych ekranach kreatora konfiguracji trzeba wskazać odpowiednie ustawienia konfiguracyjne. Szczegółowe informacje na temat działania każdej z dostępnych opcji można znaleźć w podręczniku MySQL na stronie pod adresem http://dev.mysql.eom/doc/refman/5.0/en/index.html. Po zakończeniu procesu konfiguracji, w którym definiuje się między innymi hasło dla użytkownika root, kreator uruchomi usługę MySQL. Po zainstalowaniu serwera można go zatrzymywać, uruchamiać lub nakazać jego automatyczne uruchamianie za pomocą narzędzia Usługi, znajdującego się w Panelu sterowania. Aby go otworzyć, trzeba kliknąć Start i kliknąć Panel sterowania. Następnie należy dwukrotnie kliknąć Narzędzia Administracyjne, po czym dwukrotnie kliknąć Usługi. Narzędzie Usługi zostało pokazane na rysunku A.4. Jeśli konieczne jest podanie parametrów uruchomienia serwera MySQL, należy najpierw zatrzymać usługę, po czym przed jej ponownym uruchomieniem wpisać je w polu Parametry początkowe w narzędziu Usługi. Usługę M y S Q L można zatrzymać za p o m o c ą narzędzia Usługi lub wpisując polecenia NET STOP MySQL albo mysqladmin shutdown. MySQL posiada szereg dodatkowych narzędzi wiersza poleceń. Trudno do nich dotrzeć, jeśli katalog bin MySQL nie znajduje się w dyrektywie PATH systemu. Zmienna ta wskazuje systemowi lokalizacje, w których należy szukać programów wykonywalnych. Wiele spośród powszechnie stosowanych w Windows poleceń, j a k di r czy cd, ma charakter wewnętrzny i jest wbudowanych w cmd.exe. Inne, jak na przykład format czy ipconfig, m a j ą swoje własne programy wykonywalne. Wpisywanie C:\WINNT\system32\format nie byłoby zbyt wygodne, jeśli należałoby sformatować dysk. Równie niewygodne byłoby wpisywanie C: \mysql \bi n w celu uruchamiania monitora MySQL.

804

Dodatki

B*.

Akcja m

%

:

if

Usługi fiskalne)

E

•••

f*ę»s«K ©

lip

if

m

tMogl



n

tt&kzimt

mysq\ Zatrzyma! usługę Wstrzymał usługę

Narwa ^ L o g o w a n i e do sieci ^ ^ L o g o w a n i e pomocnicze

Cpis

Umożliwia uruchamia... ^ Lokalizator usługi zdalnego w.. Zarządza bazą danych ... Magazyn chroniony Zapewnia chroniony... Magazyn wymienny % Menedżer autopołączenia do.., Tworzy połączenie do „. Menedżer dysków logicznych • ^ M e n e d ż e r kont zabezpieczeń Menedżer połączeń usługi Do.. ^ M e n e d ż e r sesji pomocy pulpit.. % Microsoft Office Diagnostics ... % M S Software Shadow Copy Pr.. %;mysql % NetMeeting Rernote Desktop .. Office Source Engine % P l u g andPlay

Stan

Obsługuje uwlerzyteln...

Uruchomiono

Wykrywa i monitoruje...

Uruchomiono

Przechowuje informacj... Tworzy połączenie siec...

Uruchomiono Uruchomiono

Zarządza i steruje usłu... Uruchom części Diagn... Zarządza kopiami woł„. Umożliwia autoryzowa... Zapisuje pliki instatacy... Umożliwia komputero,,.

% Połącze nia sieciowe ^ Pomoc i obsługa techniczna % Pomoc TCP1P NetBIOS

Zarządza obiektami w... Umożliwia działanie C,., Włącza obsługę syste... Przesyła wiadomości u... Posłaniec % Program uruchamiający proce.,. Zapewnia f u n k i e uru... Utrzymuje aktualną lis.,. ^ P r z e g l ą d a r k a komputera

Typ uruchomienia Ręczny

Uruchomiono

Automatyczny Ręczny Automatyczny Ręczny Ręczny Automatyczny Automatyczny Ręczny Ręczny Ręczny Ręczny

Uruchomiono

Automatyczny Ręczny Ręczny

Uruchomiono Uruchomiono Uruchomiono Uruchomiono

Automatyczny Ręczny Automatyczny Automatyczny

Uruchomiono

Automatyczny Automatyczny

Wyłączony Uruchomiono

%QoSRSVP ^ R e j e s t r zdalny

Zapewnia możliwość u...

Umożliwia użytkownik... Routing i dostęp zdalnyOferuje usługi routing,.. mi} Rozpoznawanie lokalizacji w ... Zbiera i magazynuje In... Ofa Rozszerzenia sterownika Instr,. Dostarcza sterowniko,,.

Uruchomiono

% Serwer % Stacja robocza

Oferuje udostępniani... Tworzy i zachowuje po...

Uruchomiono

Ręczny Ręczny Automatyczny

Uruchomiono

Automatyczny

Uruchomiono

Ręczny Automatyczny Wyłączony

»

\ Rozszerzony/ S t a n d a r d o w y /

1

1

Rysunek A.4. Narzędzie Usługi umożliwia skonfigurowanie usług dostępnych w komputerze Katalog, w którym znajdują się pliki wykonywalne podstawowych poleceń Windows, jak format.exe, są zapisane w zmiennej środowiskowej PATH, dzięki czemu można po prostu wpisywać format. Aby zapewnić sobie taką samą wygodę korzystania z polecenia mysql wywoływanego z wiersza poleceń, musimy j e dodać. Należy kliknąć Start, wybrać Panel sterowania, dwukrotnie kliknąć System i przejść do zakładki Zaawansowane. Po kliknięciu przycisku Zmienne środowiskowe ukaże się okno dialogowe pozwalające na przeglądanie zmiennych środowiskowych systemu. Po dwukrotnym kliknięciu PATH będzie możliwa jej edycja. N a końcu bieżącej ścieżki należy dodać znak średnika, aby oddzielić dotychczasowe pozycje od nowo wpisywanej, po czym wpisać c: \mysql \bi n. Po kliknięciu OK nowa pozycja zostanie dopisana w rejestrze komputera. Po ponownym uruchomieniu komputera będzie już można wpisywać tylko mysql zamiast C: \mysql \bi n\mysql.

Instalacja serwera Apache w systemie Windows Apache w wersji 2.2 może być instalowany na komputerach z systemem Windows w większości wersji. Serwer oferuje zwiększoną wydajność działania i stabilność w porównaniu z wersjami Apache 2.0 i 1.3 przeznaczonymi dla systemów Windows. Serwer Apache można zainstalować na podstawie kodów źródłowych, jednak ze względu na to, że większość użytkowników systemów Windows nie posiada kompilatorów, w tym punkcie opisana zostanie procedura instalacji przy użyciu instalatora MSI. Należy wejść na witrynę http://httpd.apache.org i pobrać przeznaczone dla systemu Windows binaria aktualnej wersji Apache 2.2. Dla celów poniższego przykładu pobrano plik o nazwie apache_ 2.2.1 l-win32-x86-openssl-0.9.8i.msi. Zawiera on bieżącą wersję (w hierarchii 2.2) serwera dla

Dodatek A • Instalacja PHP i MySGJL

805

Windows wraz z OpenSSL w wersji 0.9.8h, bez kodów źródłowych, spakowaną do postaci pliku MSI. Pliki MSI mają format pakietów używanych przez instalator Windows. Jeśli nie natknęliście się na jakiś szczególnie uciążliwy błąd ani nie chcecie przyłączyć się do projektu mającego na celu rozwijanie oprogramowania, mało prawdopodobne jest, że będziecie dążyć do samodzielnego kompilowania kodów źródłowych. Ten pojedynczy plik zawiera serwer Apache już gotowy do instalacji. Dwukrotne kliknięcie pliku rozpocznie proces instalacji. Proces instalacji będzie zapewne wyglądał znajomo. Jak pokazano na rysunku A.5, przebiega on podobnie jak w przypadku wielu innych programów przeznaczonych dla Windows. Rysunek A.5. Instalator serwera Apache jest łatwy w obsłudze

W trakcie instalacji należy podać następujące informacje: • Nazwę sieci, nazwę serwera oraz adres pocztowy administratora. Jeżeli serwer będzie wykorzystywany w rzeczywistym środowisku sieciowym, odpowiedzi na te pytania powinny być znane. Jeżeli natomiast jest on instalowany do użytku własnego, udzielane odpowiedzi nie będą miały dużego znaczenia. •

Czy Apache będzie miał pracować j a k o usługa. Podobnie jak w przypadku M y S Q L , konfigurowanie go w ten sposób jest zazwyczaj łatwiejsze.



Rodzaj instalacji. Ze swej strony zalecamy wskazanie opcji Complete, jednak można też wybrać opcję Custom, jeśli któreś z komponentów, na przykład dokumentacja, mają zostać pominięte.



Katalog, w którym Apache ma zostać zainstalowany (katalogiem domyślnym jest C:\Program Files\Apache Software Foundation\Apache2.2).

Po określeniu tych wszystkich opcji serwer Apache zostanie zainstalowany i uruchomiony. Po uruchomieniu Apache będzie nasłuchiwał na porcie 80 (chyba że zmienione zostaną dyrektywy Port, Li sten lub BindAddress w plikach konfiguracyjnych). W celu połączenia się z serwerem i uzyskania dostępu do strony domyślnej należy uruchomić przeglądarkę i wpisać następujący URL: http

-.//localhost/

Powinno to spowodować wyświetlenie strony powitalnej podobnej do tej, którą przedstawiono na rysunku A. 1. Jeśli to nie nastąpi lub zasygnalizowany zostanie błąd, należy zajrzeć do pliku error.log w pliku log. Jeśli komputer nie jest podłączony do internetu, można użyć poniższy URL: http://l

27.0.0.1

806

Dodatki

Jest adres IP równoważny

localhost.

Jeżeli zmieniony został numer portu mający dotychczas wartość 80, konieczne będzie dopisanie na końcu URL-a fragmentu : numer_portu. Należy pamiętać, że Apache nie może współużytkować tego samego portu z inną aplikacją TCP/IP. Usługę Apache można uruchomić i zatrzymać z menu Start Apache dodaje odpowiednią pozycję o nazwie Programy->Apache HTTP Server. Pod nagłówkiem Control Apache Server można zauważyć, że możliwe jest uruchomienie serwera (Start), zatrzymanie (Stop) oraz uruchomienie na nowo (Restart). Po zainstalowaniu serwera Apache można dokonać zmian w pliku konfiguracyjnym znajdującym się w katalogu conf. Do edytowania pliku konfiguracyjnego httpd.conf wrócimy po zainstalowaniu PHP.

Instalacja PHP w systemie Windows Aby zainstalować PHP dla Windows należy najpierw pobrać odpowiednie pliki z witryny http:// www.php.net. W ramach instalacji dla Windows należy pobrać dwa pliki. Jednym z nich jest plik ZIP zawierający PHP (zwykle noszący nazwę podobną do php-5.2.6-Win32.zip), drugi natomiast jest zbiorem bibliotek (pecl-5.2.6-Win32.zip lub podobny). Najpierw należy rozpakować plik Zip do wybranego przez siebie katalogu. Standardową lokalizacją jest c:\php i taką też będziemy wykorzystywać w toku dalszych objaśnień. Biblioteki PECL można zainstalować, rozpakowując plik PECL do katalogu z rozszerzeniami. Jeśli podstawowym katalogiem PHP jest c:\php, to katalogiem rozszerzeń będzie c:\php\ext\. Należy wykonać następujące czynności: 1. W głównym katalogu znajdzie się plik o nazwiephp.exe oraz plik o nazwiephp5ts.dll. Pliki te są niezbędne do uruchamiania PHP jako CGI. Jeśli PHP ma pracować jako moduł SAPI, można użyć pliku DLL odpowiedniego dla używanego serwera W W W . Na przykład w przypadku serwera Apache będzie to plik php5apache2_2.dll. Moduły SAPI są szybsze i łatwiejsze do zabezpieczenia. Wersja CGI natomiast umożliwia uruchamianie PHP z wiersza poleceń. Wybór należy oczywiście do użytkownika. 2. Kolejną czynnością jest ustawienie pliku konfiguracyjnego php.ini. PHP jest rozpowszechniany z dwoma już gotowymi plikami: php.ini-dist oraz php.ini-recommended. Dla celów nauki PHP oraz na serwerach testowych zalecamy wykorzystanie pliku php.ini-dist, natomiast na serwerach produkcyjnych najlepiej wykorzystać php.ini-recommended. Należy utworzyć kopię odpowiedniego pliku i zmienić jej nazwę na php.ini. 3. Teraz należy rozpocząć edycję pliku php.ini. Znajduje się w nim wiele ustawień, z których większość na tym etapie może zostać zignorowana. W tym momencie konieczne jest dokonanie zmiany w następujących ustawieniach: •

Dyrektywę extension_di r należy zmienić w taki sposób, by wskazywała katalog, w którym z n a j d u j ą się pliki DLL rozszerzeń. W standardowej instalacji będzie to C:\PHP\ext. W pliku php.ini powinien się więc znaleźć wiersz extension_dir = c:/php/ext

Dodatek A • Instalacja PHP i MySGJL



807

Dyrektywę doc_root należy zmienić tak, by wskazywała macierzysty katalog, z którego serwer W W W udostępnia dokumenty. Zazwyczaj będzie to doc_root = "c:/Program Files/Apache Foundation Software/Apache2.2/htdocs" jeśli wykorzystywany jest Apache.



Można również wybrać rozszerzenia, które będą uruchamiane. Na tym etapie zalecamy, by najpierw dążyć do uruchomienia samego PHP, a rozszerzenia dodawać, gdy zajdzie taka potrzeba. W celu dodania rozszerzenia należy przejść do listy pod tytułem „Windows Extensions". Znajduje się tam szereg wierszy typu :extensi on=php_pdf.dli W celu włączenia tego rozszerzenia wystarczy po prostu usunąć znak średnika znajdujący się na początku wiersza (lub go wpisać w celu wyłączenia rozszerzenia). Należy pamiętać, że w celu dodania większej liczby rozszerzeń w późniejszym czasie konieczne będzie ponowne uruchomienie serwera W W W po dokonaniu zmian w pliku php.ini — tylko wtedy zmiany te przyniosą efekt. W tej książce używane są rozszerzenia php_pdflib.dll, php_gd2.dll, php_imap.dll i php_mysqli.dll. Należy odkomentować odpowiadające im wiersze w pliku INI. Być może w pliku nie będzie wpisu dotyczącego php_mysqli.dll— w takim przypadku należy go wpisać: extension=php_mysqli.dli Teraz można zapisać i zamknąć plik php.ini.

4. Jeśli wykorzystywany jest system plików NTFS, należy się upewnić, że serwer W W W jest uruchomiony i że ma on uprawnienia do odczytu pliku php.ini. Dodawanie PHP do konfiguracji serwera A p a c h e Konieczne może być dokonanie edycji jednego z plików konfiguracyjnych Apache'a. Należy otworzyć plik httpd.conf w wybranym edytorze tekstów. Plik ten zazwyczaj znajduje się w katalogu c:\Program Files\Apache Software Foundation\Apache2.2\conf. Należy odszukać następujące wiersze: LoadModule php5_module c:/php/php5apache2_2.dll PHPIniDir "c:/php/" AddType application/x-httpd-php .php Jeżeli nie ma tych wierszy, należy dopisać je na końcu pliku, zapisać go i ponownie uruchomić serwer Apache. Testowanie wprowadzonych zmian W celu sprawdzenia poprawności wprowadzonych zmian należy uruchomić serwer W W W , utworzyć plik test.php i wpisać w nim następującą instrukcję: Plik ten powinien zostać zapisany w katalogu macierzystym dokumentów udostępnianych przez serwer (zwykle c:\Program Files\Apache Software Foundation\Apache2.2\htdocs). Należy wywołać go w przeglądarce, wpisując: http://I ocalhost/test.php

808

Dodatki

lub http://numer_IP/test.php Jeśli w przeglądarce zostanie wyświetlona strona podobna do przedstawionej na rysunku A.2, będzie to oznaczało, że serwer prawidłowo obsługuje PHP.

Instalowanie PEAR PHP5 jest dystrybuowane z instalatorem pakietu PEAR. Jeśli używany jest system Windows, w wierszu poleceń należy wpisać c:\php\go-pear Skrypt go-pear zada kilka prostych pytań na temat tego, gdzie ma zostać zainstalowany instalator pakietu oraz standardowe klasy PEAR, a następnie sam j e pobierze i zainstaluje. (Pierwszy krok nie jest wymagany w systemie Linux, natomiast pozostałe etapy instalacji przebiegają identycznie). W tym momencie powinien już być zainstalowany instalator pakietu PEAR oraz podstawowe biblioteki PEAR. Można teraz przystąpić do instalacji poszczególnych pakietów, wpisując pear install p a k i e t gdzie pakiet powinien być zastąpiony przez nazwę pakietu, który ma zostać zainstalowany. Listę dostępnych pakietów otrzymamy, wpisując pear l i s t - a l l Aby sprawdzić, które pakiety zostały już zainstalowane, należy wpisać pear l i s t Aby zainstalować pakiet MIME mail wykorzystany w rozdziale 30., wpisujemy: pear install Mail_Mime Pakiet DB wspomniany w rozdziale 11. musi zostać zainstalowany w analogiczny sposób: pear install MDB2 Aby sprawdzić, czy dostępna jest nowsza wersja któregoś z zainstalowanych pakietów, należy wpisać pear upgrade nazwa_pakietu Jeżeli przedstawiona procedura z jakiegoś powodu nie zadziała, proponujemy pobrać pakiety PEAR bezpośrednio z witryny http://pear.php.net/packages.php. M o ż n a tam przeglądać różne dostępne pakiety. W tej książce wykorzystujemy na przykład MailMime. Należy przejść do strony tego pakietu i kliknąć Download Latest, aby pobrać jego kopię. Konieczne będzie rozpakowanie pobranego pliku Zip i wstawienie go do lokalizacji wskazywanej przez incłude_path. Dobrze jest utworzyć katalog c:\php\pear lub podobny. Jeśli pakiety pobierane są ręcznie, zalecamy umieszczanie ich w drzewie katalogu pear. PEAR ma standardową strukturę, dlatego proponujemy umieszczanie pakietów w standardowej lokalizacji — tam właśnie umieściłby je instalator. Na przykład pakiet Mail Mime należy do sekcji Mail, a więc umieścilibyśmy go w katalogu c: \php \pear\Mail.

Dodatek A • Instalacja PHP i MySGJL

809

Inne konfiguracje Obsługę PHP i MySQL można dodać również do innych serwerów WWW, takich jak Omni, HTTPD czy Netscape Enterprise Server. Nie będziemy się tym zajmować w tym dodatku, natomiast informacje dotyczące tych zagadnień można znaleźć na witrynach internetowych MySQL i PHP, odpowiednio: http://www.mysql.com i http://www.php.net.

810

Dodatki

Dodatek B

Zasoby internetowe W tym dodatku przedstawiamy część ze znajdującego się w internecie bogatego zbioru zasobów zawierających samouczki, artykuły, wiadomości i przykłady skryptów PHP. Oczywiście jest ich znacznie więcej, niż można wymienić w jednym dodatku. Z każdym dniem pojawiają się nowe, co spowodowane jest coraz bardziej powszechną i zaawansowaną znajomością PHP i MySQL w środowisku twórców stron internetowych. Niektóre z tych witryn zawierają treści w językach obcych, jak choćby niemieckim czy francuskim, oraz w językach innych niż ten, którym posługuje się Czytelnik. W takim wypadku należy skorzystać z elektronicznego tłumacza, takiego jak http://www.systransoft.com, dzięki któremu zasoby znajdujące się w internecie można przeglądać w języku ojczystym.

Zasoby poświęcone PHP PHP.Net — http://www.php.net — witryna macierzysta PHP. Można stąd pobrać wszystkie pliki binarne i źródłowe PHP oraz podręcznik, przeglądać archiwa list dyskusyjnych i na bieżąco śledzić informacje dotyczące PHP. ZEND.Com — http://www.zend.com — witryna macierzysta ZEND engine, trzonu PHP4. Zawiera forum dyskusyjne, artykuły, samouczki i bazę danych z przykładami klas i kodu PHP, które można wykorzystać. PEAR — http://pear.php.net— Repozytorium Rozszerzeń i Aplikacji PHP (ang. PHP Extension and Application Repository). Jest to oficjalna witryna rozszerzeń dla PHP. PECL — http://pecl.php.net — siostrzana witryna PEAR. Na witrynie PEAR znajdują się klasy napisane w PHP, natomiast w PECL (wymawianym jako „piekle") znajdują się rozszerzenia napisane w C. Instalacja klas PECL zwykle jest bardziej skomplikowana, lecz udostępniają zwykle bardziej rozbudowane funkcje i niemal zawsze są bardziej rozwinięte niż ich odpowiedniki napisane w PHP. PHPCommunity — http://www.phpcommunity.org/

— nowa witryna społeczności PHP.

php|architect — http://www.phparch.com — magazyn PHP. Witryna ta udostępnia darmowe artykuły, można też się zapisać, aby otrzymywać magazyn w formie dokumentu PDF lub w postaci drukowanej. PHP Magazine — http://www.phpmag.net/— elektronicznej i drukowanej.

kolejny magazyn PHP, również dostępny w wersji

812

Dodatki

PHPWizard.net — http://www.phpwizard.net aplikacji PHP, jak choćby phpChat

— witryna zawierająca źródła wielu popularnych czy phpIRC.

PHPMyAdmin.Net — http://www.phpmyadmin.net/— domowa witryna popularnego interfejsu dla serwera MySQL mającego postać witryny internetowej. PHPBuilder.com — http://www.phpbuilder.com — portal samouczków PHP. Witryna zawiera wszelkiego rodzaju samouczki. Posiada również forum oraz udostępnia możliwość wysyłania pytań na tematy związane z PHP. DevShed.com — http://www.devshed.com — oferuje doskonałe samouczki dotyczące PHP, MySQL, Perl i innych języków programowania. PX-PHP Code Exchange — http://px.sklar.com — doskonała witryna dla początkujących. Można w niej znaleźć wiele przykładowych skryptów i użytecznych funkcji. The P H P Resource — http://www.php-resource.de — witryna w języku niemieckim, która zawiera samouczki, artykuły i skrypty. Proponujemy wykorzystać elektronicznego tłumacza do jej przeglądania — dzięki niemu sami mogliśmy j ą przejrzeć. Nie przeszkadza to jednak w czytaniu przykładowych kodów. WeberDev.com — http://www. WeberDev.com — wcześniej znana jako Berber 's PHP sample page, witryna ta stała się poważnym serwisem zawierającym samouczki i przykładowe kody. Jest ona przeznaczona dla użytkowników PHP i MySQL; porusza tematy związane z bezpieczeństwem i ogólnie z bazami danych. HotScripts.com — http://www.hotscripts.com — ogromny zbiór skryptów podzielonych na odrębne kategorie. Zawarte w niej skrypty napisane są w wielu różnych językach, jak PHP, ASP.NET czy Perl. Doskonała kolekcja skryptów PHP. Bardzo często uaktualniana. Konieczne trzeba j ą odwiedzić, szukając przykładowych skryptów. P H P Base Library — http://phplib.netuse.de — strona często odwiedzana przez osoby uczestniczące w realizacji dużych projektów PHP. Udostępnia bibliotekę zawierającą wiele narzędzi zarządzania sesjami, które w PHP4 są już wbudowane, jak również szablony i abstrakcyjne klasy baz danych. PHP Center — http://www.php-center.de — kolejny niemiecki portal zawierający samouczki skrypty, porady, sztuczki i wiele innych. PHP Homepage — http://www.php-homepage.de — kolejna niemiecka witryna o PHP zawierająca skrypty, artykuły, wiadomości i wiele innych. Posiada dział skróconych instrukcji. PHPIndex.com — http://www.phpindex.com — francuski portal dotyczący PHP z ogromnym zbiorem materiałów na jego temat. Zawiera wiadomości, najczęściej zadawane pytania, artykuły, dział poświęcony pracy itd. WebMonkey.com — http://www.webmomkey.com — portal zawierający wiele materiałów poświęconych tworzeniu stron W W W , samouczki, przykładowe skrypty itp. Porusza również tematy związane z programowaniem, multimediami itp. The P H P Club — http://www.phpclub.net — klub PHP oferujący wiele materiałów dla początkujących programistów PHP. Zawiera wiadomości, omówienia książek, przykładowe skrypty, fora dyskusyjne, najczęściej zadawane pytania i liczne samouczki dla początkujących. The P H P Classes Repository — http://phpclasses.org — witryna udostępniająca bogaty zbiór darmowych klas PHP. Obowiązkowa dla programistów i twórców projektów wykorzystujących klasy. Łatwa obsługa wyszukiwania, dzięki czemu przebiega ono bardzo sprawnie.

Dodatek A • Zasoby internetowe

813

The PHP Resource Index — http://php.resourceindex.com — portal udostępniający skrypty, klasy i dokumentację. Jego mocną stroną jest przede wszystkim podział na kategorie, dzięki którym poszukiwania nie zajmują zbyt wiele czasu. PHP Developer — http://www.phpdeveloper.org PHP, artykułami i samouczkami. Evil Walrus — http://www.evilwalrus.com

— kolejny portal z wiadomościami na temat

— efektowny wizualnie portal skryptów PHP.

Source Forge — http://sourceforge.net — bogaty zbiór zasobów z otwartym dostępem do kodu źródłowego. Witryna nie tylko pomaga w znalezieniu użytecznego kodu, ale oferuje też dostęp do CVS, list dystrybucyjnych i komputerów przeznaczonych dla programistów Open Source. Codewalkers — http://codewalkers.com/— zawiera artykuły, recenzje książek, samouczki i niezwykły konkurs PHP Contest, na którym dzięki posiadanym umiejętnościom można wygrać różnego rodzaju nagrody. Konkursy programistyczne odbywają się co dwa tygodnie. PHP Developer's Network Unified Forums — http://forums.devnetwork.net/index.php dyskusyjne na wszelkie tematy związane z PHP. PHP Kitchen — http://www.phpkitchen.com/— Postnuke — http://www.postnuke.com/— zarządzania zawartością.

— fora

artykuły, wiadomości i zalecenia dotyczące PHP.

powszechnie używany, stworzony w PHP system

PHP Application Tools — http://www.php-tools.de/

— zestaw użytecznych klas PHP.

Codango — http://www.codango.com/php/— ciekawy zbiór aplikacji WWW napisanych w PHP, bibliotek, skryptów, samouczków i innych zasobów.

Zasoby poświęcone MySQL i SQL Witryna MySQL — http://www.mysql.com — oficjalna witryna MySQL, oferująca bogatą dokumentację, wsparcie techniczne i informacje. Witryna obowiązkowa dla wszystkich użytkowników MySQL, zwłaszcza ze względu na część poświęconą programistom oraz archiwa list dyskusyjnych. The SQL Course — http://sqlcourse.com — zawiera samouczek SQL dla początkujących z wyczerpującym objaśnieniem poszczególnych instrukcji. Umożliwia sprawdzenie nabytej wiedzy dzięki interpreterowi online. Wersja dla zaawansowanych jest dostępna pod adresem http://www.sqlcourse2.com. SearchDatabase.com — http://searchdatabase.techtarget.com — przyjazny portal zawierający wiele użytecznych informacji na temat baz danych. Dostarcza doskonałe samouczki, porady, dokumenty techniczne, często zadawane pytania, recenzje i tak dalej. Koniecznie trzeba zobaczyć!

Zasoby poświęcone serwerowi Apache Oprogramowanie Apache — http://www.apache.org — witryna; można pobrać kody źródłowe i binaria serwera Apache. Dostarcza również dokumentacji online.

814

Dodatki

Apache Week — http://www.apacheweek.com — cotygodniowy magazyn online dostarczający informacji dla użytkowników serwera Apache i jego usług. Apache Today — http://www.apachetoday.com — codziennie uaktualniane źródło wiadomości i informacji na temat Apache. Należy się zapisać w celu zadawania pytań.

Zasoby poświęcone tworzeniu stron WWW Philip and Alex's Guide to Web Publishing — http://www.arsdigita.com/books/panda — dowcipnie napisany przewodnik poświęcony tworzeniu oprogramowania przeznaczonego dla witryn internetowych. Jedna z kilku książek poświęconych temu zagadnieniu, której współautorem jest Samoyed. Kurs tworzenia stron WWW — http://webmaster.helion.pl— zawierający również informacje na temat JavaScriptu, poparte wieloma przykładami przydatnych skryptów, którymi można urozmaicić swoją stronę. Można tu również znaleźć słowniczek pojęć związanych z internetem.

Skorowidz -, 55 57 ', 359, 493 !, 60 !=, 59, 62, 103 ! = , 59, 62, 103 ", 493 #, 45 S, 47 $ COOKIE, 54, 480 $ ENV, 54 $ FILES, 54,414 $ GET, 48, 54 $ POST, 47, 48, 54, 263 S REQUEST, 48, 54, 467, 609 $ SERVER, 54, 183,407 $ SESSION, 54, 479, 482, 483 SDOCUMENT ROOT, 80 SGLOBALS, 54 SHTTP POST VARS, 47, 489 SHTTP SESSION_VARS, 485 Sthis, 170 %, 55 %=, 57 &, 58, 60 &&, 60 ", 355 *, 55 *=, 57 „60 ., 46,49 .=, 57 /, 55 /* */, 45 //, 45 /=, 57 ::, 176, 186 ?:, 60 @, 61,203,264 •.61 \, 125 A , 60

autoloadO, 189 call(), 188, 189 clone(), 188 construct(), 168, 171 destruct(), 169, 171 get(), 170, 180 set(), 170, 180 toStringO, 191, 192 ',359 61, 426 {},68 |, 60 ||, 60 60 +, 55, 62, 103 ++, 57 +=, 57 <, 59 <% %>, 44 , 43, 499 « , 60 < « , 50 <=, 59 <>, 59, 62, 103
, 91, 122
, 40, 413 action, 41 method, 41 , 48 , 464