52, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta


Rozdział 52.
Skrypty CGI


Tim Parker

W tym rozdziale:

Przy omawianiu zagadnień związanych ze stronami WWW często używa się terminu GCI (ang. Common Gateway Interface, wspólny interfejs bramkowy). Na pewno nie uda się nam w tym rozdziale wyjaśnić wszystkich zagadnień związanych z tym interfejsem, postaramy się jednak przedstawić jego zastosowania i przybliżyć sposoby użycia.

Jeśli zaangażujesz się w tworzenie bardziej złożonych stron WWW (językom HTML i Java przyjrzymy się w jednym z następnych rozdziałów), w końcu na pewno zechcesz skorzystać z możliwości oferowanych przez mechanizmy CGI - pozwalają one w znacznym stopniu rozszerzyć funkcjonalność stron WWW. Dlatego przyjrzymy się temu interfejsowi nieco bardziej szczegółowo.

Co to jest CGI?

Rozwinięcie skrótu CGI - Common Gate Interface, wspólny interfejs bramkowy - nie ułatwia zrozumienia, do czego w rzeczywistości służy ten interfejs. Jego nazwa może być nieco myląca. Zasadniczo CGI pozwala na uruchamianie aplikacji za pośrednictwem stron WWW. Można na przykład na stronie WWW umieścić przycisk uruchamiający program, którego zadaniem jest wyświetlanie danych statystycznych o częstości odwiedzania Twojego węzła WWW. Po kliknięciu na tym przycisku zostanie uruchomiony program wykonujący odpowiednie obliczenia. CGI jest interfejsem pomiędzy takim programem a kodem w języku HTML; pozwala on na przesyłanie danych w obie strony pomiędzy kodem HTML i aplikacjami, nie muszącymi wcale stanowić części strony WWW.

CGI wykonuje jeszcze inne operacje, ale są one zwykle ukryte przed użytkownikiem. Programy CGI nie muszą w zasadzie być uruchamiane za pośrednictwem stron WWW, choć rzadko uruchamia się je w inny sposób, głównie ze względu na fakt, że do prawidłowego działania wymagają one dość specyficznego i dość trudnego do emulacji środowiska.

Co to oznacza w praktyce? Kiedy uruchamiasz stronę WWW napisaną w języku HTML, serwer ustawia wartości wielu zmiennych środowiskowych. Są one używane do kontrolowania programów i komunikowania się z nimi, jak również do wielu innych celów. Kiedy użytkownik klika na przycisku uruchamiającym program zewnętrzny, wartości tych zmiennych środowiskowych są wykorzystywane do przesyłania odpowiednich danych (takich jak na przykład identyfikator użytkownika, który uruchomił program, czas systemowy itp.). Uruchamiany program odsyła przetworzone informacje z powrotem do serwera WWW również za pośrednictwem odpowiednich zmiennych środowiskowych.

Mówiąc o programowaniu skryptów CGI mamy na myśli pisanie programów wykorzystujących interfejs pomiędzy stronami w języku HTML i innymi aplikacjami. CGI jest właśnie tym interfejsem.

Można by zapytać: no i co z tego? Możliwości oferowane przez język HTML są dość ograniczone. CGI pozwala obejść te ograniczenia i umieszczać na stronach WWW obiekty zachowujące się w zasadzie w dowolny sposób. Jeśli na przykład chcesz na stronie WWW umożliwić obliczenie parametrów statystycznych danych dostarczanych przez użytkownika, bardzo wygodnie będzie zrobić to za pomocą interfejsu CGI, przekazując wprowadzone dane jako wartość odpowiednich zmiennych środowiskowych i zwracając gotowe wyniki do serwera WWW. Nawet na najprostszej stronie WWW można zamieścić mnóstwo elementów, które mogłyby zostać wykonane za pomocą interfejsu CGI - właśnie dlatego jest on tak popularny.

Mechanizmy obsługi CGI są zwykle wbudowane w serwery WWW, choć nie muszą one istnieć we wszystkich programach tego typu. Prawie wszystkie dostępne obecnie serwery WWW (za wyjątkiem bardzo wczesnych wersji i kilku wersji okrojonych), na przykład oferowane przez NCSA, Netscape czy CERN, obsługują interfejs CGI.

CGI i HTML

Aby uruchomić aplikację CGI ze strony WWW, musisz wysłać odpowiednie żądanie do serwera WWW. Żądanie to realizowane jest za pośrednictwem odpowiedniej metody, odpowiadającej za wywoływanie programów CGI (przez metodę rozumie się odpowiednią procedurę lub funkcję). Protokół HTTP (HyperText Markup Language) zawiera wiele metod, a to, którą z nich należy wywołać do uruchomienia programu CGI zależy od typu danych, jakie mają zostać przekazane do tegoż programu. Do tego zagadnienia wrócimy za chwilę, najpierw pokażemy, w jaki sposób można osadzić kod CGI w dokumentach HTML.

Język HTML generalnie opiera się na zastosowaniu znaczników (ang. tags) - dokładniej problem ten omówimy w następnym rozdziale. Do uruchomienia programu CGI również używa się jednego ze znaczników, podając nazwę programu, który ma zostać wykonany, i tekst, który zostanie wyświetlony na stronie WWW po przetworzeniu kodu w języku HTML. Przykładowo, poniższy znacznik spowoduje wyświetlenie na stronie WWW tekstu Kliknij tu, aby wyświetlić informacje statystyczne:

<a href="licz_stat"> Kliknij tu, aby wyświetlić informacje statystyczne </a>

Kiedy użytkownik kliknie na wyświetlanym tekście, uruchomiony zostanie program o nazwie licz_stat (znaczniki <a> i </a> definiują zakotwiczenie - ang. anchor - tekst zawarty pomiędzy nimi jest traktowany jako odnośnik do jakiegoś innego obiektu; rozmieszczenie tego typu znaczników decyduje o ostatecznej formie strony WWW).

Jak przekonasz się czytając następny rozdział, poświęcony językowi HTML, można w ten sposób uruchomić również program dostępny w innym systemie, podając jego nazwę domenową. Przykładowo, poniższy fragment kodu w języku HTML definiuje odnośnik, po kliknięciu którego uruchamiany jest skrypt zapisany w systemie www.tpci.com bez względu na to, w jakim systemie zapisana jest sama strona WWW:

<a href="www.tpci.com/stats.cgi"> Wyświetl informacje statystyczne </a>

Jeśli użytkownik wybierze tekst Wyświetl informacje statystyczne, zostanie nawiązane połączenie z serwerem www.tpci.com i uruchomiony zostanie odpowiedni program, nawet jeśli serwer ten znajduje się w innym kraju (pod warunkiem, że da się nawiązać połączenie).

Do uruchamiania programów CGI zwykle wykorzystuje się trzy metody: GET, HEAD i POST (wszystkie one są elementami języka HTTP). Każdej z tych metod używa się w nieco inny sposób, więc przyjrzymy się im z osobna.

Metoda GET używana jest wówczas, gdy aplikacja CGI spodziewa się przesłania danych poprzez zmienną środowiskową QUERY_STRING. Aplikacja odczytuje i dekoduje wartość tej zmiennej, interpretując ją odpowiednio według potrzeb. Metoda GET jest używana zwykle wtedy, gdy aplikacja powinna otrzymać jakieś dane, ale nie musi zwracać żadnych wyników.

Metoda HEAD jest bardzo podobna do metody GET, z tym że serwer transmituje do klienta tylko nagłówki HTTP. Informacje wchodzące w skład głównej części wiadomości są ignorowane. Taka metoda może przydać się na przykład do przesyłania identyfikatora użytkownika.

Metoda POST jest o wiele bardziej elastyczna i pozwala użyć standardowego urządzenia wejściowego (stdin) do odbierania danych. Wartość zmiennej środowiskowej o nazwie CONTENT_LENGTH pozwala aplikacji zorientować się, jakiej liczby danych ma się spodziewać. Metoda POST została opracowana po to, by umożliwić zmianę zachowania się serwera, ale wielu programistów używa jej do wszelkich zadań, ponieważ pozwala ona uniknąć obcinania adresów URL, co może zdarzyć się podczas wykorzystywania metody GET.

Interfejs CGI korzysta z wielu zmiennych środowiskowych, są one omówione ze szczegółami w każdej książce poświęconej programowaniu z wykorzystaniem tego interfejsu. Opisywanie tych zmiennych w naszej książce bez podania przykładów ich zastosowania byłoby stratą czasu.

CGI i Perl

Jeśli zainteresuje Cię programowanie z wykorzystaniem CGI, szybko zorientujesz się, że większość tego typu aplikacji tworzona jest za pomocą języka Perl (który został omówiony w rozdziale 28 „Perl”). Takie programy mogą być pisane w dowolnym języku (wielu projektantów stron WWW tworzy programy CGI w takich językach, jak np. C, C++ czy Visual Basic, ponieważ języki te są im lepiej znane), ale Perl zdaje się być ulubionym językiem twórców stron WWW pracujących w systemach UNIX-owych.

Przyczyna takiej popularności języka Perl staje się oczywista w momencie, gdy nauczysz się nim posługiwać. Jest on językiem bardzo prostym, a jednocześnie potężnym i wydajnym. Jest również przenośny, dzięki czemu programy używające interfejsu CGI mogą praktycznie bez przeróbek działać w różnych systemach operacyjnych.

Na stronach WWW można znaleźć mnóstwo skryptów w języku Perl. Wpisanie odpowiedniego zapytania w którejś z wyszukiwarek, na przykład Altavista, powoduje znalezienie setek dokumentów zawierających przykładowe skrypty, czekające tylko na to, abyś je załadował i przestudiował. Jednym z najczęściej używanych skryptów Perl jest skrypt obsługujący książkę gości (ang. GuestBook). Pozwala on użytkownikowi na wpisanie się do książki gości i pozostawienie komentarza dotyczącego odwiedzanej strony WWW. Zwykle skrypt taki rejestruje dane o imieniu i nazwisku użytkownika, jego adres e-mail, pochodzenie (zwykle tylko miasto czy nawet kraj) i komentarze. Jest to dobry sposób na zorientowanie się, co też użytkownicy sądzą o udostępnianych przez Ciebie stronach WWW.

Kiedy program obsługujący książkę gości zostanie uruchomiony, wyświetla na ekranie formularz, który należy wypełnić, a następnie uaktualnia bazę danych serwera w oparciu o wprowadzone dane. W Sieci dostępnych jest bardzo wiele wersji tego programu, na rysunku 52.1 przedstawiamy wyniki działania jednej z nich.

Każdy ze skryptów obsługi książki gości nieco inaczej prezentuje się w oknie przeglądarki, ale zazwyczaj ma on postać zbliżoną do tego przedstawionego na rysunku 52.1. Informacje wprowadzone przez użytkownika są zapisywane w bazie danych po stronie serwera, dzięki czemu administrator systemu ma do nich dostęp.

Rysunek 52.2 przedstawia inną stronę WWW, zawierającą menu pozwalające na uruchomienie kilku przykładowych skryptów CGI. Uruchomienie skryptu dostarczającego informacji o domenie (domain name lookup) powoduje przesłanie serii standardowych żądań HTTP pomiędzy serwerem i klientem i ostatecznie wyświetlenie danych przedstawionych na rysunku 52.3. Jak widać, dane te przedstawione są za pomocą czcionki o standardowych parametrach, ponieważ skrypt nie stara się sformatować ich w żaden określony sposób. Takie rozwiązanie jest wystarczające w przypadku prostych aplikacji CGI.

Rysunek 52.1.

Przykładowy program obsługi książki gości pobiera dane od użytkownika i zapisuje je w bazie danych

0x01 graphic

Rysunek 52.2.

Strona WWW zawierająca odwołania do kilku przykładowych aplikacji CGI w języku Perl i C

0x01 graphic

Tworzenie skryptów CGI w języku Perl nie jest skomplikowane. Przykładowy skrypt (wywoływany po wybraniu tekstu Who Are You?) zamieszczony na stronie przedstawionej na rysunku 52.2 przesyła informację za pośrednictwem zgłoszenia HTTP. Kod tego skryptu w języku Perl wyświetlony za pomocą przeglądarki Netscape przedstawiony jest na rysunku 52.4. Jak widać, składa się on zaledwie z kilku wierszy. Każdy, kto potrafi programować w języku Perl, jest w stanie szybko stworzyć tego typu aplikację CGI.

Rysunek 52.3.

Rezultat wykonania skryptu CGI napisanego
w języku Perl, dostarczającego informacje o domenie

0x01 graphic

Rysunek 52.4.

Kod źródłowy aplikacji wywoływanej po uruchomieniu programu
Who Are You?
(w języku Perl)

0x01 graphic

Podsumowanie

Używanie interfejsu CGI jest bardzo proste, szczególnie w programach w języku Perl, i może dać Twoim aplikacjom zupełnie nowe możliwości. Kiedy będziesz już potrafił tworzyć własne strony w języku HTML (tego zagadnienia nie omawiamy w tej książce ze względu na ograniczoną ilość miejsca), możesz spróbować stworzyć kilka aplikacji wykorzystujących interfejs CGI, które ożywią strony WWW. Kilka języków programowania omówiliśmy we wcześniejszych rozdziałach, które być może pominąłeś.

Programowanie w języku Perl, idealnie nadającym się do tworzenia skryptów CGI, omówione zostało w rozdziale 28. „Perl”.

Jeśli chcesz do tworzenia aplikacji wykorzystujących interfejs CGI używać języka C, przeczytaj rozdział 26. „Programowanie w języku C”.

Z rozdziału 45. „Kopie zapasowe” dowiesz się, w jaki sposób należy wykonywać kopie zapasowe systemu plików tak, aby stworzone przez Ciebie skrypty CGI były bezpieczne.

778 Część VII Konfiguracja węzła internetowego

778 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\52.DOC

E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\52.DOC 779

Rozdział 52. Skrypty CGI 779



Wyszukiwarka