R-18MP.doc

(327 KB) Pobierz
Wstęp

575

19

              Skrypty CGI dla początkujących

Rozdział 18.

Skrypty CGI dla początkujących

CGI jest skrótem angielskiego określenia Common Gateway Interface, które jest interfej­sem umożliwiającym uruchamianie programów na serwerze WWW, w odpowiedzi na dane po­chodzące z przeglądarki. Skrypty CGI pozwalają odwiedzającemu na interakcję z Two­imi stronami WWW — wyszukiwanie rekordów w bazach danych, komentowanie wprowa­dzone­go tekstu, wybieranie kilku elementów na stronie w celu otrzymania szczegółowej od­powie­dzi. Niegdyś skrypty CGI były sporadycznie wykorzystywane. WWW była wtedy przeważnie używana do prezentowania statycznych informacji umieszczanych w standardowych dokumentach HTML. Aktualnie skrypty CGI bądź inne technologie tworzenia aplikacji WWW są wykorzystywane niemal we wszystkich aspektach projektowania witryny. Wiele witryn prezentuje zawartość dostosowaną do zainteresowań użytkowników, a umieszczone na nich informacje są przechowywane w bazach danych, a nie w statycznych plikach. Aplikacje WWW stały się także coraz szerzej rozpowszechnione. Za pośrednictwem WWW można czytać listy poczty elektronicznej, sprawdzać harmonogram zajęć i kalendarz, sprawdzać stan portfela akcji. Wszystkie te aplikacje zostały stworzone przy wykorzystaniu programów CGI bądź technologii stanowiących rozwinięcie CGI.


W tym rozdziale nauczysz się prawie wszystkiego na temat skryptów CGI, w tym:

n               co to jest skrypt CGI i jak działa,

n               jak wygląda rezultat działania skryptu,

n               jak pisać skrypty CGI z parametrami i bez,

n               jak pisać skrypty zwracające specjalne odpowiedzi,

n               jak pisać skrypty przetwarzające dane z formularzy,

n               o najważniejszych problemach związanych ze skryptami CGI,

n               o zmiennych CGI, których można użyć w skryptach,

n               o skryptach działających bez przetwarzania nagłówków (non-parsed headers),

n               o przeszukiwaniu z użyciem <ISINDEX>.

 

 

Rozdział ten koncentruje się głównie na serwerach WWW działających na systemach UNIX, a większość przykładów i instrukcji będzie dotyczyć jedynie tego systemu. Jeśli korzystasz z innego systemu operacyjnego, niektóre informacje, zawarte w części dotyczącej pisania skryptów CGI, mogą go nie dotyczyć. Ten rozdział pozwoli Ci przynajmniej poznać ideę działania CGI, a informacje w nim zawarte będziesz mógł wykorzystać wraz z dokumentacją CGI dla używanego serwera WWW.

 

 

Co to jest skrypt CGI?

Skrypt CGI jest to, najprościej mówiąc, program, który działa na serwerze WWW, uru­chamiany poprzez dane pochodzące z przeglądarki. Skrypt jest zazwyczaj łącznikiem pomiędzy serwerem WWW i innymi programami działającymi w systemie, na przykład, bazami danych.

Skrypty CGI właściwie nie muszą być skryptami. W zależności od możliwości naszego serwera mogą to być skompilowane programy, pliki wsadowe lub inne pliki wykonywalne. Dla uproszczenia terminologii będziemy je w tym rozdziale nazywać skryptami.

Skrypt CGI to dowolny program wykonywany na serwerze WWW. CGI to akronim słów Common Gateway Interface. Jest to standaryzowany interfejs wymiany informacji pomiędzy serwerem WWW a programami zewnętrznymi.

Skrypty CGI są zazwyczaj wywoływane na dwa sposoby: bezpośrednio (za pomocą połączenia) oraz jako atrybut ACTION formularzy. Skrypt do przetwarzania formularzy używany jest nieco inaczej niż zwykły skrypt CGI, ale oba wyglądają i działają podobnie. W pierwszej części tego rozdziału poznasz ich ogólne właściwości, a później zajmiemy się skryptami przetwarzającymi formularze.


Jak działają skrypty?

Skrypty CGI są wywoływane przez serwer na podstawie informacji z przeglądarki. Rys. 18.1 pokazuje sposób, w jaki informacja jest przetwarzana pomiędzy przeglądarką, ser­werem i skryptem.

Rysunek 18.1

Przeglądarka, serwer, skrypt

Poniżej znajduje się skrócony opis tego, co się dzieje.

  1. URL wskazuje na skrypt CGI. Taki URL może pojawić się wszędzie tam, gdzie można użyć zwykłego URL-a, na przykład, w odnośniku lub obrazku. Zazwyczaj wykorzys­tywany jest w polu ACTION formularza. Przeglądarka kontaktuje się z serwerem za pomocą tego URL-a.
  2. Serwer odbiera zlecenie, zauważa, że URL wskazuje na skrypt (na podstawie lokalizacji pliku lub jego rozszerzenia, w zależności od serwera) i wykonuje go.
  3. Skrypt wykonuje pewne działania w oparciu o dane z przeglądarki, jeśli takowe wystą­piły. Może to być wyszukanie rekordów w bazie danych, obliczenie war­tości lub po prostu wywołanie innego programu w systemie.
  4. Skrypt generuje pewną odpowiedź, którą serwer WWW jest w stanie zrozumieć.
  5. Serwer WWW odbiera odpowiedź od skryptu i odsyła ją do przeglądarki, która forma­tuje dane i wyświetla je.

Proste? Nie? Nie martw się, cały ten proces może wydawać się nieco złożony. Czytaj da­lej. Dzięki kilku przykładom będzie go łatwiej zrozumieć.


Prosty przykład

Poniżej znajduje się prosty przykład, objaśniający krok po kroku, co się dzieje po obu stro­nach całego procesu. W przeglądarce możemy napotkać stronę, która wygląda podobnie do przedstawionej na rys. 18.2.

Rysunek 18.2

Strona z odnośnikiem do skryptu

Odnośnik Wyświetl datę jest odnośnikiem do skryptu CGI. Jest zawarty wewnątrz kodu HTML strony, tak jak dowolny inny odnośnik. Jeśli przyjrzymy się źródłu strony, możemy tam znaleźć następujący kod:

<A href="http://www.serwer.com/cgi-bin/getdate">Wyświetl datę</a>

Fakt, że cgi-bin pojawia się w ścieżce jest ważną podpowiedzią, że patrzymy na skrypt CGI. W przypadku wielu serwerów, cgi-bin jest jedynym miejscem, gdzie mogą być prze­chowy­wane skrypty CGI.

Kiedy wybierzesz odnośnik, przeglądarka odwołuje się do URL-a z serwera www.jserwer.com. Serwer odbiera zlecenie i wnioskuje na podstawie swojej konfigu­racji, że URL odnosi się do skryptu o nazwie getdate. Następnie serwer wykonuje skrypt.

Skrypt getdate w tym przypadku jest prostym skryptem powłoki UNIX-owej wyglądają­cym następująco:

#!/bin/sh

 

echo Content-type: text/plain

echo

 

/bin/date

Skrypt ten ma dwojakie działanie. Najpierw wyświetla nagłówek Content-type: text/plain, a za nim pustą linię. Następnie wywołuje standardowy program UNIX-owy date, który wyświetla datę i czas. Rezultat działania skryptu wygląda więc następująco:

Content-type: text/plain

 

Tue May 25 16:15:57 EDT 1997


Co oznacza ten zapis Content-type? Jest to specjalny kod, który serwer WWW przesyła do przeglądarki, aby powiedzieć jej, z jakiego typu dokumentem ma do czynienia. Przeglądarka następnie używa go do określenia, czy potrafi wyświetlić dokument takiego typu i czy nale­ży wykonać w tym celu dodatkowy, zewnętrzny program. W dalszej części tego rozdziału poznamy specyfikę tej linii.

Po zakończeniu wykonywania skryptu, serwer odbiera rezultat i przesyła go z powrotem do przeglądarki poprzez sieć. Przeglądarka dotychczas czekała cierpliwie na odpowiedź. Kiedy otrzymuje dane z serwera, po prostu je wyświetla, tak jak to pokazano na rys. 18.3.

Rysunek 18.3

Rezultat działania skryptu wyświetlającego datę

Tak wygląda cała idea. Mimo że proces może być dużo bardziej złożony, taka interakcja pomiędzy przeglądarką, serwerem i skryptem jest główną zasadą działania CGI.

Czy mogę używać skryptów CGI?

Nim użyjesz skryptów CGI na swojej witrynie, będziesz musiał sprawdzić, czy dysponujesz uprawnieniami pozwalającymi instalować skrypty na serwerze WWW. Jeśli prowadzisz własny serwer, to zazwyczaj nie będzie to stanowiło żadnego problemu. W takim przypadku możesz robić dosłownie wszystko, czyli także instalować i wykonywać skrypty CGI. Jeśli jednak Twoja witryna znajduje się na serwerze prowadzonym przez dostawcę usług internetowych, to będziesz musiał sprawdzić, czy dysponujesz prawami do instalowania skryptów.

Przed przystąpieniem do lektury dalszej części rozdziału upewnij się, że jesteś w stanie odpowiedzieć na poniższe pytania.

Czy Twój serwer jest skonfigurowany w sposób pozwalający na wykonanie skryptów CGI?

Aby pisać i uruchamiać skrypty CGI, potrzebny jest serwer WWW. W odróżnieniu od zwykłych plików HTML, skryptów CGI nie można pisać i testować na własnym kompute­rze, potrzebny jest do tego serwer WWW. Na szczęście serwery WWW są dostępne niemal dla wszystkich istniejących platform komputerowych, a zatem zazwyczaj będziesz w stanie skonfigurować swój system w taki sposób, iż będziesz w stanie testować skrypty CGI bez konieczności umieszczania ich na produkcyjnym serwerze WWW.

Jednak, jeśli nawet masz serwer WWW, musi on być specjalnie skonfigurowany, aby pozwalał na wykonanie skryptów CGI. Oznacza to zazwyczaj, że wszystkie skrypty są przechowywane w spec­jalnym katalogu o nazwie cgi-bin. To zwyczajny katalog, który zgodnie z informacjami konfiguracyjnymi serwera służy do przechowywania skryptów CGI. Jeśli tylko dysponujesz dostępem do pliku konfiguracyjnego serwera WWW, to możesz sam wybrać katalog, który będzie pełnił funkcję katalogu CGI.

Zanim zaczniesz wypróbowywać jakiekolwiek skrypty, zapytaj swojego administratora, czy możesz je instalować i uruchamiać, a jeśli tak, to gdzie należy je umieszczać.

Jeśli korzystasz z własnego serwera, musisz utworzyć odpowiedni katalog cgi-bin i skonfi­gu­rować serwer, tak aby rozpoznawał go jako katalog ze skryptami (należący do konfiguracji serwera, która oczywiście zależna jest od typu serwera). Musisz również pamiętać o nastę­pujących zagadnieniach, które wiążą się z zastosowaniem skryptów CGI.

n               Każdy skrypt CGI jest programem i zostaje uruchomiony, kiedy przeglądarka tego zażąda, zużywając podczas wykonania czas procesora i pamięć. Co się stanie z systemem, jeśli dziesiątki lub setki takich skryptów zostaną jednocześnie uruchomione? System może nie wytrzymać takiego obciążenia i zawiesić się lub uczynić dalszą pracę niemożliwą.

n               Jeśli nie będziesz wystarczająco ostrożny przy pisaniu własnych skryptów, możesz przypadkowo otworzyć dostęp do systemu poprzez wykorzystanie parametrów, których skrypt nie oczekiwał; ktoś się do niego włamie lub go uszkodzi.

Czy umiesz programować?

Uwaga początkujący! Do pisania skryptów CGI będzie wam potrzebna umiejętność programowania. Jeśli nie macie takich podstaw, doradzam zwrócenie się o pomoc do kogoś, kto je ma, przeczytanie książki na temat podstaw programowania lub odpowiedni kurs. Ta książka jest zbyt krótka na to, żeby wyjaśnić zarówno podstawy programowania, jak i programowanie CGI jednocześnie. Szczególnie w tym rozdziale zakładam, że czytelnik umie odczytać i zrozumieć przykładowe fragmenty kodu.

Nawet jeśli nie potrafisz programować, to nie jest to powód do rozpaczy. Dostępnych jest wiele witryn WWW, na których można znaleźć skrypty napisane przez inne osoby. Skrypty te można skopiować i zaadoptować do wykorzystania na własnej witrynie. Do uruchomienia skryptów CGI na serwerze WWW będziesz potrzebował choćby minimalnej znajomości zasad ich działania, niemniej jednak wykorzystanie skryptów napisanych przez inne osoby jest nieporównanie prostsze do tworzenia ich samemu.

Jakich języków programowania należy używać?

Do pisania programów CGI możesz użyć dowolnego języka programowania, który znasz, pod warunkiem, że skrypty będą pisane zgodnie z regułami objaśnionymi w dalszej części i programy w tym języku dają się uruchamiać na tym samym komputerze, na którym działa serwer WWW.

W tym rozdziale oraz w dalszej części tej książki, będę wykorzystywała dwa języki progra­mowania: powłokę Bourne systemu UNIX oraz język Perl. Powłoka Bourne jest dostępna praktycznie na każdym systemie UNIX-owym i łatwo ją opanować, ale trudniej  zastosować do bardziej złożonych zadań. Perl natomiast jest dostępny za darmo. Język ten jest osiągalny w wersjach dla maszyn UNIX-owych oraz dla systemów Windows i Macintosh. Jest bardzo elastyczny i wydajny, ale jest również bardzo trudny do opano­wania. Na szczęście Perl jest językiem skryptowym i wystarczy poznać jego podstawy, aby rozpocząć tworzenie własnych skryptów CGI. Naucz się tylko tego, co jest Ci niezbędnie konieczne do osiągnięcia zamierzonych celów, a całą resztę pomiń.


Czy Twój serwer jest skonfigurowany prawidłowo?

W celu umożliwienia wykonywania skryptów CGI, bez względu na to czy są to proste, czy też bardziej złożone skrypty do przetwarzania formularzy, serwer musi być do ich urucho­mienia odpowiednio skonfigurowany. Możliwe, że będziesz musiał je trzymać w odpowied­nim katalogu lub używać specjalnego rozszerzania. Zależy to od typu serwera i jego konfi­guracji.

Jeśli dzierżawisz miejsce na cudzym serwerze WWW lub administruje nim ktoś inny, musisz uzgodnić, czy skrypty CGI można tam wykorzystywać, a jeśli tak, gdzie nale­ży je umieszczać.

Jeśli korzystasz z własnego serwera, sprawdź w jego dokumentacji, w jaki sposób obsługuje skrypty CGI.

A jeśli nie korzystasz z systemu UNIX?

Jeśli nie korzystasz z systemu Unix, mimo wszystko, czytaj dalej. Swego czasu programy CGI były wykorzystywane niemal wyłącznie w systemach UNIX. Teraz jednak skrypty CGI można także pisać i wykonywać na serwerach WWW działających w systemach Windows a nawet Macintosh.

Najpopularniejszym serwerem WWW, działającym w systemie Windows NT, jest Internet Information Server. Jest on dostarczany wraz z systemem Windows NT Server i dostępny bezpłatnie. Na szczęście produkt ten obsługuje interfejs CGI. Także Microsoft Personal Web Serwer, produkt używany zazwyczaj do lokalnego testowania witryn, umożliwia obsługę skryptów CGI. Także serwer WWW firmy Netscape, działający w systemie Windows NT, został wyposażony w pełną obsługę interfejsu CGI.

Server MacHTTP dysponuje możliwościami obsługi skryptów CGI pisanych w języku AppleScript. (MacHTTP to oryginalna, shareware-owa wersja komercyjnego serwera WWW firmy StarNine o nazwie WebStar.) Jon Wiederspan napisał doskonały podręcznik na temat pisania skryptów CGI w języku AppleScript, został on dołączony do dokumentacji serwera MacHTTP.

Lokalne testowanie skryptów CGI

Jednym z problemów, który wielu programistów CGI napotyka podczas nauki pisania skryptów, jest brak możliwości testowania skryptów poza produkcyjnym serwerem WWW. Zdarza się również, iż osoby pragnące nauczyć się programowania CGI nie dysponują sposobami tworzenia skryptów. W tej części rozdziału opiszę pokrótce, w jaki sposób użytkownicy systemu Windows, pragnący pisać skrypty CGI w języku Perl, mogą szybko stworzyć wymagane środowisko programistyczne na swoich lokalnych komputerach.

Aby pisać skrypty CGI w języku Perl, konieczne są dwa elementy: serwer WWW oraz interpreter języka Perl. Polecam wykorzystanie serwera WWW Apache for Windows oraz wersji języka Perl przeznaczonej dla systemu Windows, Perl for Windows. Serwer Apache można znaleźć na WWW pod adresem http://www.apache.org/. Odszukanie połączeń umożliwiających skopiowanie najnowszej wersji serwera Apache for Windows nie powinno stanowić żadnego problemu. Instalacja programu jest bardzo prosta; warto jednak zapamiętać jedno ostrzeżenie, iż nie należy instalować serwera w folderze, którego nazwa zawiera odstęp. Innymi słowy, zamiast instalowania serwera w folderze C:\Program Files\Apache, lepiej zainstalować go w folderze C:\Apache, w przyszłości może Ci to znacznie ułatwić życie.

Po zainstalowaniu serwera można go uruchomić, dwukrotnie klikając jego ikonę umieszczoną na pulpicie lub wykonując program apache.exe w oknie trybut MS-DOS. Można także zainstalować serwer w formie serwisu, dzięki czemu będzie mógł on działać nieprzerwanie. Po uruchomieniu, można bardzo prosto sprawdzić czy działa poprawnie — wystarczy zażądać wyświetlenia strony o następującym adresie URL:

http://localhost/

Po upewnieniu się, że serwer Apache działa poprawnie, powinieneś zdobyć kopię języka Perl. Można ją znaleźć na witrynie http://www.perl.com. Po skopiowaniu wymaganych plików, należy zainstalować język przy użyciu dostarczonego programu instalacyjnego. Także tym razem radziłabym instalowanie Perl-a w folderze, którego nazwa nie zawiera odstępów. Gdy proces instalacji dobiegnie końca, będziesz mógł rozpocząć pisanie skryptów CGI.

Skrypty CGI należy umieszczać w folderze cgi-bin, wewnątrz katalogu, w którym został zainstalowany serwer Apache. Aby skrypty te mogły działać, powinieneś poinformować serwer, gdzie się znajduje interpreter języka Perl. W tym celu, w pierwszej linii skryptu, należy podać położenie programu będącego interpreterem Perl-a. Zakładając, że pełna ścieżka dostępu do interpretera języka Perl to C:\perl\bin\perl.exe, w pierwszej linii skryptu powinieneś umieścić poniższy kod:

 

#!C:\perl\bin\perl.exe

 

Od tej chwili jesteś już gotów do tworzenia i testowania skryptów CGI w systemie Windows.

Anatomia skryptu CGI

Gdy już upewnisz się, że będziesz w stanie pisać skrypty CGI i umieszczać je na serwerze WWW, możesz zacząć dokładniej poznawać zasady ich tworzenia. Wszystkie skrypty CGI są wywoływane w taki sam sposób i muszą zwracać wyniki w ściśle określonej postaci, dlatego też mają pewne wspólne cechy. W tej części rozdziału przedstawię wspólny szkielet wykorzystywany we wszystkich skryptach CGI.


Nagłówki odpowiedzi

Sposób działania skryptów CGI wyjaśnię w odwrotnej kolejności. Pierwszą rzeczą, jaką omówię będą nagłówki odpowiedzi, czyli ostatnia rzecz, o jaką powinieneś zadbać, tworząc skrypty CGI. Po w...

Zgłoś jeśli naruszono regulamin