R-16-t.doc

(223 KB) Pobierz
Szablon dla tlumaczy

16. Tworzenie interfejsu WWW za pomocą PHP

Pojawienie się sieci komputerowej o ogólnoświatowym zasięgu WWW zaowocowało u swego zarania pojawieniem się kilku technologii umożliwiających wykorzystanie aplikacji WWW do zadań poważniejszych niż zwykłe pokazywanie witryn i obrazków. Nie wszystkie technologie były produktem komercyjnych firm wytwarzających oprogramowanie. Niektóre z odnoszących największe sukcesy były technologiami z otwartym dostępem do kodu źródłowego lub bezpłatnym oprogramowaniem. Jedną z takich technologii jest preprocesor hipertekstu PHP (ang. Hypertext Preprocessor PHP), który jest wytwarzającym strony dynamiczne językiem skryptowym po stronie serwera (ang. server side scripting language).

Wraz z wprowadzeniem PHP stało się możliwe wdrożenie profesjonalnych aplikacji WWW dla Linuksa, dużo mniejszym nakładem pracy niż poprzednio. PHP jako język skryptowy po stronie serwera uzupełnia solidność i otwartość Linuksa i razem tworzą poważną i profesjonalną alternatywę dla komercyjnych rozwiązań wdrożenia aplikacji WWW.

W tym rozdziale będziemy poznawać PHP, zwłaszcza w charakterze narzędzia do instalacji aplikacji WWW dla Linuksa. Używać przy tym będziemy bazy danych DVD z poprzednich rozdziałów. Ważniejsze tematy, które poruszymy w tym rozdziale to:

q       PHP jako język skryptowy serwera WWW.

q       Wprowadzenie do składni PHP.

q       Instalacja i konfiguracja PHP dla Linuksa.

q       Dalsze badanie technologii związanych z wdrożeniem naszej aplikacji.

q       W pełni dojrzały interfejs dla bazy danych Filmoteki DVD (DVD store).

PHP i skrypty po stronie serwera

Ogólnoświatowa sieć komputerowa WWW, jak wiadomo, ewoluowała z obsługi statycznych stron WWW, gdzie witryny WWW odgrywały rolę nieco ważniejszych elektronicznych tablic ogłoszeniowych, aż po pojawienie się stron programowanych poprzez wspólny interfejs bramkowy CGI (ang. Common Gateway Interface). Współczesne witryny WWW mają bardziej wyrafinowane interfejsy użytkownika, jakimi są dynamiczne strony WWW, odpowiadające na działania użytkownika. Skrypty uruchomione czy to na serwerze, czy na przeglądarce pozwalają na dostęp do aplikacji i danych w taki sposób, jaki dotąd był możliwy jedynie przez tradycyjne, tj. nie oparte na WWW, interfejsy użytkownika.

Praca przy pomocy skryptów po stronie klienta (zazwyczaj przy użyciu JavaScript, ale też, okazjonalnie, VBScript) jest ograniczona interpretacją przez przeglądarkę. Natomiast skrypty po stronie serwera, które są albo wbudowane w strony serwera albo są samodzielnymi plikami skryptowymi, są interpretowane przez serwer sieciowy. Serwer następnie wytwarza HTML, który zostaje przekazany do przeglądarki. Rzeczywista siła języków skryptowych po stronie serwera tkwi nie tyle w samej tej właściwości, ale raczej w fakcie, że kilka z tych języków (a PHP jest doskonałym tego przykładem) ma szeroki zestaw funkcji łączności i dostępności interfejsów programowych aplikacji (API), które umożliwiają skryptom oddziaływanie z różnymi bazami danych, serwerami pocztowymi i innymi modułami aplikacji. Wydaje się, że aplety (małe programy użytkowe) Java, czy rozwiązania Sun Microsystems dla osiągania zdolności programowania wewnątrz stron WWW nie sprawdziły się po stronie klienta tak, jak tego oczekiwano.

Praca przy pomocy skryptów po stronie serwera

Tworzenie dynamicznej zawartości, niezbędnej dla aplikacji z prawdziwego zdarzenia po to, by były dostępne poprzez strony WWW, zostało osiągnięte dzięki językom skryptowym po stronie serwera, takim jak PHP. Sposób działania takich języków zazwyczaj zależy od ich indywidualnych właściwości. To doprowadza nas do różnorodnych technologii po stronie serwera i porównania innych języków skryptowych z PHP

Skrypty CGI

Tradycyjnie tworzenie stron WWW odbywa się głównie poprzez CGI, czyli wspólny interfejs bramkowy. Faktyczny skrypt może być napisany w każdym języku skryptowym (a właściwie, w każdym języku programowania, o ile tylko na serwerze jest dostępny jego kompilator lub interpreter), pod warunkiem, że wytworzone dane wyjściowe będą zrozumiałe dla interfejsu CGI. Takie podejście zmniejsza jednak wydajność przedsięwzięcia, ponieważ serwer sieciowy musi tworzyć osobny proces do obsługi wykonania skryptu CGI.

Serwer stron aktywnych

ASP, czyli serwer stron aktywnych (ang. Active Server Pages) jest rozwiązaniem pracy ze skryptami po stronie serwera zaproponowanym przez Microsoft. ASP pozwala programiście łączyć HTML, JScript (propozycja Microsoftu — skrypt po stronie klienta, zbliżony do JavaScript z Netscape) i VBScript w celu wytworzenia dynamicznych stron HTML. Z interfejsem COM, czyli modelem obiektów składowych (ang. Component Object Model) jest możliwe łączenie z wieloma innymi modułami aplikacji. Istotnym ograniczeniem ASP jest to, że jest obsługiwany tylko na platformach Microsoftu.

Serwer stron Java i serwlety

JSP, czyli serwer stron Javy (ang. Java Server Pages) jest rozwiązaniem Java pełnej krwi, bardzo zbliżonym do PHP. Różnica polega tylko na tym, że skrypt JSP jest interpretowany przez  wirtualną maszynę Javy, tj. JVM (ang. Java Virtual Machine). Pojawienie się prośby o skrypt JSP powoduje utworzenie przez serwer WWW serwletu Java (ang. Java Servlet), który wykonuje się na JVM, produkując HTML. Inny aspekt JSP to znaczna liczba właściwości i związana z tym dłuższa krzywa uczenia przy zapoznawaniu się z tą technologią.

Pisanie skryptów w PHP

Obecnie PHP jest obsługiwany na wielu platformach systemowych i w powiązaniu z licznymi serwerami WWW. Na serwerze Apache PHP może być zainstalowany albo jako interpreter CGI, albo jako moduł Apache. To drugie rozwiązanie jest zalecanym sposobem instalacji PHP w sytuacji, gdy głównym kryterium jest wydajność, ponieważ nie wiąże się to z tworzeniem osobnego procesu tak, jak byłoby to konieczne przy instalacji PHP pierwszą metodą. Czytelnicy wystarczająco zachęceni do używania PHP, mogą przejść od razu do podrozdziału na temat instalacji PHP.

Z serwerem Apache, działającym na platformie Linux, PHP jest bardzo groźnym rywalem dla wszystkich wspomnianych wcześniej technologii. Oprócz Linuksa, PHP jest także obsługiwany na platformach systemowych Microsoft Windows NT i Windows 95/98. Niektóre z obsługiwanych serwerów WWW obejmują: fhttpd (o otwartym kodzie dostępu); HS3 do HS5; OmniHTTPd i inne. Na wszystkich tych serwerach WWW, z wyjątkiem Apache, PHP działa tylko jako interpreter CGI, a nie jako wbudowany moduł. I wreszcie najważniejsza cecha: PHP ma otwarty dostęp do kodu źródłowego i jest dostępny całkowicie za darmo.

Można przyjąć (w uogólnieniu), że większość języków skryptowych po stronie serwera zazwyczaj wbudowuje swoje komponenty skryptowe do dokumentu HTML. Kiedy więc serwer WWW odczytuje te komponenty z systemu plików, obsługując żądanie z przeglądarki, to interpretuje skrypt i wytwarza właściwy HTML, który zostanie zwrócony do przeglądarki. Kontrastuje to ze zwykłymi stronami WWW, gdzie serwer pobiera statyczną stronę HTML bezpośrednio z systemu plików i przekazuje ją, bez żadnej interpretacji, do przeglądarki. Przykłady poniżej ilustrują ten przypadek z drobnymi wariacjami na nieśmiertelny temat „Witaj Świecie!”. Pierwszy przykład pokazuje statyczną stronę HTML, a drugi stronę dynamiczną HTML:

 

<HTML>

<HEAD><TITLE>Witaj Statyczny Swiecie</TITLE></HEAD>

<BODY>

Witaj Swiecie

</BODY>

</HTML>

 

 

<HTML>

<HEAD><TITLE>Witaj Dynamiczny Swiecie</TITLE></HEAD>

<BODY>

<?php printf( "Witaj Swiecie\n" ); ?>

</BODY>

</HTML>

 

Obydwa przykłady wygenerują, w przybliżeniu, te same dane wyjściowe, ale w drugim przykładzie wynik jest interpretacją skryptu PHP przez serwer WWW. Uściślając, to niekoniecznie serwer WWW interpretował skrypt — równie dobrze, interpreter PHP (występujący albo jako moduł serwera WWW, albo jako interpreter CGI) mógł dokonać faktycznej interpretacji.

Możliwości PHP

Rzeczywista siła PHP wyrasta z faktu, że z PHP możliwy jest bezproblemowy dostęp do kilku innych modułów, dzięki dostarczanej przez PHP obsłudze interfejsu programowego aplikacji API. W tym momencie nie od rzeczy jest przyjrzenie się różnorakim modułom, które PHP obsługuje:

q       W ogromnej liczbie baz danych łączność jest obsługiwana przez PHP. I tak, PHP 4 obejmuje obsługą: Adabas, dBase, Empress, FilePro, Informix, InterBase, mSQL, MySQL, Oracle, PostgreSQL, Solid, Sysbase, Velocis i dbm. PHP obsługuje również ODBC — otwartą łączność między bazami danych (ang. Open Database Connectivity). Przyjrzymy się dokładniej interfejsom API dla bazy danych, gdy wykorzystywać je będziemy do programowania aplikacji Filmoteki DVD (ang. DVD store) w dalszej części tego rozdziału.

q       LDAP, czyli protokół łatwego dostępu do katalogów (ang. Light-weight Directory Access Protocol) jest kolejnym protokołem obsługiwanym przez PHP. PHP dostarcza interfejsów API do pisania klienckich programów LDAP. LDAP jest protokołem wykorzystywanym do przechowywania informacji związanych z katalogiem, takich jak książki adresowe, aktualności do zamieszczenia w WWW (ang. white pages) i tym podobne. Rozdział poświęcony LDAP zawiera dalsze szczegóły na temat tej technologii dostępu do katalogów.

q       XML, czyli rozszerzony język znaczników (ang. eXtended Markup Language), reklamowany jako język przyszłości WWW, jest też obsługiwany przez PHP. Zadaniem docelowym (między innymi) XLM jest oddzielenie zawartości lub informacji zamieszczonej na stronie WWW od prezentacji tej strony. W rozdziale dotyczącym XML znajduje się więcej szczegółów na ten temat. PHP obsługuje również wymianę danych rozproszonych w WWW tj. WDDX (ang. Web Distributed Data eXchange), która jest technologią wywodzącą się z XML.

q       Protokoły pocztowe takie jak IMAP, czyli interakcyjny protokół odbioru poczty (ang. Interactive Mail Access Protocol

Można spotkać się też z innym rozwinięciem skrótu: protokół dostępu do wiadomości internetowych (IMAP, Internet Message Access Protocol). Patrz, Tim Parker i Mark Sportack „TCP/IP. Księga eksperta” (Helion, Gliwice 2000), strona 354.

q       ) i SMTP, czyli prosty protokół przesyłania poczty (ang. Simple Mail Transport Protocol) są obsługiwane przez PHP. IMAP jest protokołem służącym do odbioru poczty, a SMTP protokołem do określania marszruty poczty w Internecie.

q       Wytwarzanie obrazków i funkcje sprawnej ich obsługi są wspierane przez PHP i dzięki PHP możliwe jest dynamiczne tworzenie obrazków. PHP obsługuje też PDF, czyli przenośny format dokumentów (ang. Portable Document Format) do rozpowszechniania dokumentów w WWW. Skrypty PHP mogą wytwarzać dokumenty PDF na bieżąco wykorzystując ten interfejs.

q       SNMP, czyli prosty protokół zarządzania siecią (ang. Simple Network Management Protocol) jest obsługiwany przez PHP i dlatego możliwe jest uzyskanie zdalnego zarządzania siecią.

Powyższa lista nie wyczerpuje wszystkich możliwości PHP. Wciąż też, wraz z pojawianiem się nowych technologii, zakres obsługi PHP zwiększa się i ewoluuje. W czasie pisania tej książki, ukazała się wersja 4.0, wydana wraz z Zend, który jest dużo szybszym i skrupulatniejszym mechanizmem interpretacyjnym.

Instalacja i konfiguracja PHP

Nadeszła wiekopomna chwila, abyśmy podjęli próbę ujarzmienia PHP na naszych Linuksowych „pudłach”, by od tej pory móc poznawać tajemnice PHP we własnym zakresie.

Dla naszej przykładowej aplikacji niezbędne jest zainstalowanie na komputerze oprogramowania Apache, PHP i PostgreSQL. Kilka wersji dystrybucyjnych Linuksa, w tym RedHat 6.1, zawiera standardowo moduły Apache i PHP (zwykle umieszczone w /usr/lib/apache/), z tym, że plik konfiguracyjny Apache httpd.conf wydaje się mieć wyłączone potrzebne ustawienia. Można te ustawienia uaktywnić przez pozbawienie znaków komentarza następujących wierszy w tym pliku:

q       W „Extra modules” pozbaw znaków komentarza lub zmodyfikuj następujące wiersze:

 

AddModule mod_php

LoadModule php_module modules/libphp.so

 

q       W konfiguracji globalnej dodaj, co następuje (gdzieś na początku pliku):

 

AddType application/x-httpd-php .php

 

Po wprowadzeniu tych zmian, należy ponownie uruchomić Apache, by spowodować uwzględnienie poprawek w działaniu. Można to zrobić tak:

 

# apachectl stop

# apachectl start

 

Jest to w gruncie rzeczy najszybsza metoda rozpoczęcia pracy z PHP, przy założeniu, że używana dystrybucja Linuksa ma zainstalowane wstępnie moduły Apache i PHP.

Jeśli Apache lub PHP nie zostały zainstalowane wstępnie w wersji dystrybucyjnej, będzie trzeba zainstalować je albo przez zbudowanie ich z kodu źródłowego, albo z pakietów takich jak RedHat RPM, czy Debian .debs. W tym rozdziale będziemy próbować zainstalować i skonfigurować PHP w sposób najbardziej odpowiedni dla tworzonej tutaj aplikacji. Wyczerpującą dyskusję na temat instalacji i konfiguracji zawiera pozycja wydana przez Wrox Press „Professional PHP Programming”, rozdział 2. Dystrybucję PHP można uzyskać w postaci wykonywalnej wersji binarnej, jako RPM, lub jako dystrybucję źródłową. My podążymy drogą Linuksa i zainstalujemy PHP z kodu źródłowego. Na oficjalnej witrynie WWW dla PHP: http://www.php.net udostępniona jest wersja źródłowa PHP.

Budowa i instalacja PHP jako interpretera CGI

Zakładamy, że Apache i PostgreSQL są już zainstalowane, zgodnie z opisem, zamieszczonym w rozdziale o PostgreSQL. Powinniśmy wiedzieć w jakim katalogu Apache i PostgreSQL zostały zainstalowane. Potrzebujemy dystrybucji źródłowej PHP.

q       Zaczynamy od upewnienia się, że mamy Apache, który jest serwerem WWW, wybranym dla PHP. W szczególności odszukujemy plik wykonywalny apache, którego lokalizacja zależy od wersji dystrybucyjnej Linuksa.

q       Najpierw rozpakowujemy dystrybucję i wydobywamy pliki.

 

$ tar xvfz php-4.x.y.tar.gz

 

q       Zamieniamy katalog bieżący na katalog dystrybucji źródłowej i uruchamiamy skrypt configure, który wytworzy niezbędne pliki Makefile. Do skryptu configure możemy przekazać opcje określającą zestaw modułów, jakie chcemy zainstalować, a także niektóre parametry konfiguracji. Wkrótce przyjrzymy się bliżej każdej z tych opcji.

 

$ ./configure –-with-pgsql=DIR

 

To poinformuje skrypt konfiguracyjny o zamiarze zbudowania PHP z obsługą PostgreSQL. Będziemy później potrzebować PostgreSQL dla naszej aplikacji DVD. Argument DIR opcji –-with-pgsql wskazuje katalog dystrybucji PostgreSQL. Jeśli DIR nie jest określony, domyślną lokalizacją jest /usr/local/pgsql.

q       Jeśli wcześniejszy skrypt configure wykonał się z powodzeniem oznacza to, że pliki konieczne do kompilacji już zostały wytworzone. Na tym etapie powinniśmy skompilować dystrybucję:

 

$ make

 

Niewielkie prawdopodobieństwo wystąpienia niepowodzenia w trakcie konsolidacji, wiąże się zwykle z brakiem dostępu do bibliotek, wymaganych dla określonych modułów, albo z zainstalowaniem tych bibliotek w nietypowych miejscach. Jeśli biblioteka ma niestandardową lokalizację, należy sprawdzić zmienną środowiskową LD_LIBRARY_PATH. W przypadku jej braku, należy dodać ścieżkę tej biblioteki do zmiennej. Można użyć polecenia ldd aby sprawdzić, czy plik wykonywalny wie, gdzie szukać współużytkowanych bibliotek. Dla przykładu: jeżeli biblioteka libxyz.so ma niestandardową lokalizację: /var/mojalibdir, powinniśmy przed ponownym uruchomieniem make, wykonać w powłoce Bash coś takiego:

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/var/mojalibdir

q       Z chwilą, gdy pliki źródłowe skompilowały się pomyślnie i zostały skonsolidowane można zainstalować dystrybucję. Możliwe, że trzeba przyjąć przywileje użytkownika root, jeśli instalację przeprowadzamy w standardowej lokalizacji.

 

# make install

 

Mamy teraz plik binarny PHP, który może być wykorzystany jako interpreter CGI. Jeśli wszystko przebiegło pomyślnie, mamy teraz interpreter, który możemy użyć do interpretacji skryptów PHP. Na koniec przypominamy o zajrzeniu do podrozdziału „Konfiguracja PHP” poniżej, by dowiedzieć się o możliwości skonfigurowania PHP w minimalnym zakresie, potrzebnym do jego uruchomienia.

Jak wcześniej wspomnieliśmy, możliwa jest również instalacja PHP jako modułu Apache. Jeśli Czytelnika interesuje taki wariant, zapraszamy do kolejnego podrozdziału.

Budowa i instalacja PHP z Apache, jako moduł Apache

Do zbudowania PHP jako modułu Apache również potrzebna jest dystrybucja źródłowa z serwera http://www.apache.org.

q       Najpierw należy rozpakować i odarchiwizować dystrybucje PHP i Apache:

 

$ tar xvfz apache_1.3.x.tar.gz

$ tar xvfz php-4.x.y.tar.gz

 

q       Następnie przechodzimy do katalogu dystrybucji Apache i uruchamiamy skrypt configure

 

$ cd apache_1.3.x

$ ./configure -–opcje-konfiguracji-dla-apache

 

Skrypty configure mogą przyjmować opcje budowania Apache. Opcja –prefix=/www spowoduje skierowanie dystrybucji do katalogu /www , a nie do domyślnego katalogu, jakim zwykle jest /usr/local/apache.

q       Zmieniamy znów katalog na świeżo rozpakowaną dystrybucję PHP i uruchamiamy tam skrypt konfiguracyjny

 

$ cd ../php-4.x.y

$ ./configure –-with-apache=../apache_1.3.x –-with-pgsql

 

Opcja –-with-apache=../apache_1.3.x wskazuje na budowę do postaci modułu Apache i określa katalog, w którym znajdują się pliki z kodem źródłowym Apache.

q       Jeśli wcześniejszy skrypt configure wykonał się pomyślnie, oznacza to, że pliki niezbędne do kompilacji musiały już zostać wytworzone. Na tym etapie powinniśmy skompilować dystrybucję:

 

$ make

 

q       Z chwilą, gdy pliki źródłowe skompilowały się pomyślnie i zostały skonsolidowane można zainstalować dystrybucję PHP. Możliwe, że trzeba przyjąć przywileje użytkownika root, jeśli instalację przeprowadzamy w standardowej lokalizacji.

 

# make install

 

q       Teraz czas zatroszczyć się o dystrybucję Apache. Zmieniamy katalog z powrotem na katalog dystrybucyjny Apache i uruchamiamy skrypt configure:

 

$ cd ../apache_1.3.x

$ ./configure –-activate-module=src/modules/php4/libphp4.a –inne-opcje-apache

 

Należy zwrócić uwagę, że biblioteka src/modules/php4/libphp4.a została wcześniej utworzona i skopiowana do katalogu dystrybucyjnego Apache podczas procesu budowania PHP. Dla PHP3.x tą biblioteka będzie src/modules/php3/libphp3.a.

q       Jeśli wcześniejszy skrypt configure wykonał się pomyślnie, oznacza to, że pliki niezbędne do kompilacji musiały już zostać wytworzone. Na tym etapie powinniśmy skompilować dystrybucję:

 

# make

 

q       Z chwilą, gdy pliki źródłowe skompilowały się pomyślnie i zostały skonsolidowane można zainstalować dystrybucję. Możliwe, że trzeba przyjąć przywileje użytkownika root, zanim to zrobimy. Jeśli Apache już był uruchomiony, musimy go zatrzymać i zainstalować nowy serwer Apache z modułem PHP:

 

# /usr/local/apache/bin/apachectl stop

 

Powinniśmy to zrobić wyłącznie wtedy, gdy mamy już zainstalowany i uruchomiony serwer Apache. Jeśli dana dystrybucja Linuksa nie zawiera polecenia apachectl, można zakończyć pracę uruchomionej kopii Apache, używając 'killall –9 apache'.

 

# ...

Zgłoś jeśli naruszono regulamin