Rozdział 18.
Skrypty CGI
dla początkujących
CGI (ang. Common Gateway Interface) jest interfejsem umożliwiającym uruchamianie
programów na serwerze WWW, w odpowiedzi na dane pochodzące z przeglądarki.
Skrypty CGI pozwalają odwiedzającemu na interakcję z Twoimi stronami WWW
wyszukiwanie rekordów w bazach danych, komentowanie wprowadzonego tekstu,
wybieranie kilku elementów na stronie w celu otrzymania szczegółowej odpowiedzi.
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ądz 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ądz technologii
stanowiących rozwinięcie CGI.
W tym rozdziale nauczysz się prawie wszystkiego na temat skryptów CGI, w tym:
co to jest skrypt CGI i jak działa,
jak wygląda rezultat działania skryptu,
jak pisać skrypty CGI z parametrami i bez,
jak pisać skrypty zwracające specjalne odpowiedzi,
jak pisać skrypty przetwarzające dane z formularzy,
o najważniejszych problemach związanych ze skryptami CGI,
o zmiennych CGI, których można użyć w skryptach,
o skryptach działających bez przetwarzania nagłówków (non-parsed headers),
o przeszukiwaniu z użyciem
.
518 Część 6. Mapy odsyłaczy i formularze
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ózniej
zajmiemy się skryptami przetwarzającymi formularze.
Jak działają skrypty?
Skrypty CGI są wywoływane przez serwer na podstawie informacji z przeglądarki.
Rysunek 18.1 pokazuje sposób, w jaki informacja jest przetwarzana pomiędzy
przeglądarką, serwerem i skryptem.
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
wykorzystywany 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 wartości
lub po prostu wywołanie innego programu w systemie.
Rozdział 18. Skrypty CGI dla początkujących 519
Rysunek 18.1.
Przeglądarka, serwer,
skrypt
4. Skrypt generuje pewną odpowiedz, którą serwer WWW jest w stanie zrozumieć.
5. Serwer WWW odbiera odpowiedz od skryptu i odsyła ją do przeglądarki,
która formatuje dane i wyświetla je.
Proste? Nie? Nie martw się, cały ten proces może wydawać się nieco złożony. Czytaj
dalej. 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
stronach całego procesu. W przeglądarce możemy napotkać stronę, która wygląda po-
dobnie do przedstawionej na rysunku 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ę zródłu strony,
możemy tam znalezć następujący kod:
Wyświetl datę 520 Część 6. Mapy odsyłaczy i formularze
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ć
przechowywane skrypty CGI.
Kiedy wybierzesz odnośnik, przeglądarka odwołuje się do URL-a z serwera www.jser-
wer.com. Serwer odbiera zlecenie i wnioskuje na podstawie swojej konfiguracji, że URL
odnosi się do skryptu o nazwie getdate. Następnie serwer wykonuje skrypt.
Skrypt getdate w tym przypadku jest prostym skryptem powłoki Uniksowej 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 Unikso-
wy 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 prze-
sył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 takie-
go 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 powro-
tem do przeglądarki poprzez sieć. Przeglądarka dotychczas czekała cierpliwie na odpo-
wiedz. Kiedy otrzymuje dane z serwera, po prostu je wyświetla, tak jak to pokazano na
rysunku 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 interak-
cja pomiędzy przeglądarką, serwerem i skryptem jest główną zasadą działania CGI.
Rozdział 18. Skrypty CGI dla początkujących 521
Czy mogę używać skryptów CGI?
Nim użyjesz skryptów CGI na swojej witrynie, będziesz musiał sprawdzić, czy dyspo-
nujesz 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 wyko-
nywać 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 kom-
puterze, 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 specjalnym 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 skonfigurować 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:
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ą,
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.
522 Część 6. Mapy odsyłaczy i formularze
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 odpowied-
ni kurs. Ta książka jest zbyt krótka na to, żeby wyjaśnić zarówno podstawy programo-
wania, 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 znalezć 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 mini-
malnej znajomości zasad ich działania, niemniej jednak wykorzystanie skryptów napi-
sanych 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 dal-
szej 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
programowania: powłokę Bourne systemu Unix oraz język Perl. Powłoka Bourne jest
dostępna praktycznie na każdym systemie Uniksowym 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 Uniksowych oraz dla systemów Windows
i Macintosh. Jest bardzo elastyczny i wydajny, ale jest również bardzo trudny do opa-
nowania. Na szczęście Perl jest językiem skryptowym i wystarczy poznać jego podsta-
wy, 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
uruchomienia odpowiednio skonfigurowany. Możliwe, że będziesz musiał je trzymać
w odpowiednim katalogu lub używać specjalnego rozszerzania. Zależy to od typu ser-
wera i jego konfiguracji.
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, sprawdz w jego dokumentacji, w jaki sposób ob-
sługuje skrypty CGI.
Rozdział 18. Skrypty CGI dla początkujących 523
A jeśli nie korzystasz z systemu Unix?
Jeśli nie korzystasz z systemu Unix, mimo wszystko, czytaj dalej. Swego czasu progra-
my CGI były wykorzystywane niemal wyłącznie w systemach Unix. Teraz jednak skry-
pty CGI można także pisać i wykonywać na serwerach WWW działających w syste-
mach Windows a nawet Macintosh.
Najpopularniejszym serwerem WWW, działającym w systemie Windows NT, jest In-
ternet 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 Micro-
soft 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ęcz-
nik na temat pisania skryptów CGI w języku AppleScript, został on dołączony do doku-
mentacji 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 ja-
ki 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 znalezć 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 po-
prawnie wystarczy zażądać wyświetlenia strony o następującym adresie URL:
http://localhost/
524 Część 6. Mapy odsyłaczy i formularze
Po upewnieniu się, że serwer Apache działa poprawnie, powinieneś zdobyć kopię języ-
ka Perl. Można ją znalezć na witrynie http://www.perl.com. Po skopiowaniu wymaga-
nych plików, należy zainstalować język przy użyciu dostarczonego programu instala-
cyjnego. 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 zo-
stał zainstalowany serwer Apache. Aby skrypty te mogły działać, powinieneś poinfor-
mować 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 serwe-
rze 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 przedsta-
wię 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 wykonaniu skryptu CGI, wyniki jego wykonania zostają prze-
kazane do przeglądarki. Ogólnie rzecz biorąc, wyniki skryptu zazwyczaj będą miały po-
stać kodu HTML. Skrypty mogą jednak generować dowolne wyniki, które przeglądarki
są w stanie zinterpretować. Zanim skrypt zacznie generować faktyczne dane wyjściowe,
należy jednak przekazać serwerowi WWW informacje dotyczące typu generowanych
informacji.
Mówiąc o odpowiedzi skryptu, mam na myśli dane, które skrypt odsyła do serwera.
W przypadku Uniksa, dane są wysyłane na standardowe wyjście programu i z tego miejsca
serwer je odbiera. W przypadku innych systemów odpowiedz skryptu może się znajdować
gdzie indziej i serwer musi ją stamtąd pobrać. Może to być plik dyskowy lub dane mogą
zostać przekazane bezpośrednio do innego programu. Aby dokładniej dowiedzieć się, w jaki
sposób skrypty CGI są zaimplementowane na Twoim serwerze, powinieneś sprawdzić
dokumentację swojego serwera.
Rozdział 18. Skrypty CGI dla początkujących 525
Pierwszą rzeczą, jaką skrypt powinien zwrócić w odpowiedzi, jest specjalny nagłówek,
określający, jakiego typu informacja znajduje się w dalszej części. Nagłówek nie jest,
w zasadzie, częścią dokumentu i nie jest nigdzie wyświetlany. Należy on do informacji
przesyłanych przez serwer WWW do przeglądarki i umożliwia jej określenie rodzaju
danych, jakie zostaną przekazane. Zawsze podczas przesyłania żądań i odpowiedzi HTTP,
nagłówki wykorzystywane są do przesyłania informacji pomiędzy serwerem i przeglą-
darką. Na przykład, gdy przeglądarka zgłasza żądanie to wraz z nim zazwyczaj przesyła
informacje dotyczące typu zawartości, jakie akceptuje, adresu IP komputera zgłaszają-
cego żądanie oraz używanej przeglądarki.
Za każdym razem, gdy serwer przesyła odpowiedz do przeglądarki, umieszczane są
w niej, między innymi, nagłówki określające typ przesyłanych informacji. Gdy żądanie
dotyczy obrazu GIF lub dokumentu HTML, serwer określa typ zawartości na podstawie
rozszerzenia pliku. Jednak serwer nie ma żadnego sposobu, aby określić typ wyników,
jakie zostaną wygenerowane przez skrypt CGI, a zatem to właśnie skrypt musi wygene-
rować nagłówek Content-type i przekazać go serwerowi, który z kolei prześle go do
przeglądarki. Nagłówek ten składa się ze słów Content-type, specjalnego kodu, określa-
jącego typ przesyłanego pliku oraz znaku nowej linii:
Content-type: text/html
Każdemu typowi pliku lub zasobu odpowiada unikalny typ zawartości. To nie przypa-
dek, że typy zawartości żądań HTTP są takie same, jak typy MIME używane przy prze-
syłaniu poczty elektronicznej z załącznikami MIME. W tabeli 18.1 przedstawione zo-
stały te najczęściej używane w żądaniach HTTP.
Tabela 18.1.
Powszechnie stosowane formaty plików i odpowiednie wartości content-type
Format Wartość Content-type
text/html
HTML
text/plain
tekst
image/gif
GIF
image/jpeg
JPEG
application/postscript
Postscript
video/mpeg
MPEG
Zwróć uwagę, iż po wierszu zawierającym określenie typu zawartości musi się pojawić
pusty wiersz. Oznacza on, że nie będą już przesyłane żadne inne nagłówki, a wszystkie
dalsze informacje stanowią treść żądania.
Dane zwracane w odpowiedzi
Gdy już określisz typ zawartości przesyłanych informacji, będziesz mógł rozpocząć
przesyłanie właściwej treści odpowiedzi. Oczywiście powinna ona odpowiadać na-
główkowi content-type, który wysłaliśmy do serwera. To znaczy, że jeśli użyliśmy
nagłówka zawierającego typ text/html, reszta danych powinna zawierać kod HTML.
526 Część 6. Mapy odsyłaczy i formularze
Jeśli użyjemy typu image/gif, wtedy reszta zwracanych danych powinna zawierać bi-
narny plik GIF. Podobnie w przypadku innych typów.
Ćwiczenie 18.1: Spróbuj
To ćwiczenie jest podobne do prostego przykładu, który służył nam do wyświetlania da-
ty z wcześniejszej części tego rozdziału. Poniższy skrypt CGI sprawdza, czy Aki korzy-
sta z serwera i zwraca odpowiednią odpowiedz, która pokazana jest na rysunku 18.4.
Rysunek 18.4.
Rezultat działania
skryptu pingaki
Ten przykład jest najprostszą formą skryptu CGI, który wywoływany jest ze strony
WWW poprzez odnośnik taki, jak ten:
Czy Aki
pracuje w systemie? Kiedy wybierzemy odnośnik prowadzący do skryptu CGI, skrypt zostanie uruchomio-
ny. Skrypt nie otrzymuje żadnych parametrów, po prostu uruchamia się i zwraca odpo-
wiednie dane.
Najpierw określmy, jakiego typu dane będziemy generować. Ponieważ będzie to doku-
ment HTML, content-type będzie mieć wartość text/html. Tak więc pierwsza
część skryptu, która następuje poniżej, wyświetla po prostu linię zawierającą nagłówek
a następnie pustą linię (nie wolno zapomnieć o pustej linii!):
#!/bin/sh
echo Content-type: text/html
echo
Teraz dodajemy dalszą część skryptu, treść dokumentu HTML, którą musimy przygo-
tować samodzielnie z wnętrza skryptu. Będziemy musieli w niej wykonać następujące
czynności:
wyświetlić znaczniki, tworzące pierwszą część dokumentu HTML,
sprawdzić, czy użytkownik Aki akurat korzysta z systemu i wyświetlić wiadomość,
wyświetlić resztę znaczników HTML kończących dokument.
Zacznijmy od pierwszych linii kodu HTML. Generujemy je za pomocą następujących
poleceń, wykorzystujących powłokę systemu Unix:
echo ""
echo "
Co robi Aki?"
echo ""
Rozdział 18. Skrypty CGI dla początkujących 527
Teraz sprawdzmy, czy Aki pracuje akurat w systemie. Wykorzystamy do tego polecenie
who i zapamiętamy rezultat w zmiennej ison. Jeśli akurat korzysta z systemu, zmienna
ta będzie miała jakąś wartość. W przeciwnym razie będzie pusta.
ison=`who | grep aki`
Teraz sprawdzmy rezultat i zwróćmy odpowiednią informację jako część odpowiedzi
generowanej przez skrypt.
if [ ! -z "$ison" ]; then
echo "
Aki pracuje w systemie.
"
else
echo "
Aki chwilowo nie pracuje w systemie.
"
fi
Wreszcie zamykamy stronę HTML:
echo ""
I to wszystko. Jeśli uruchomimy ten program w celu przetestowania z linii poleceń,
otrzymamy następujący rezultat:
Content-type: text/html
Co robi Aki? Aki chwilowo nie pracuje w systemie.
Wygląda jak zwykły dokument HTML, prawda? I o to właśnie chodzi. Odpowiedz ge-
nerowana przez skrypt jest odsyłana do serwera a pózniej do przeglądarki. Tak więc
powinna mieć postać, którą serwer i przeglądarka będą w stanie zrozumieć, w tym
przypadku, plik HTML.
Teraz trzeba zainstalować skrypt w odpowiednim miejscu na serwerze. Ten krok jest
zależny od typu serwera, którego używamy. W większości przypadków, na serwerach
UNniksowych można znalezć specjalny katalog cgi-bin przeznaczony na skrypty. Nale-
ży tam skopiować skrypt i upewnić się, że ma ustawione prawa do wykonania.
Jeśli nie masz dostępu do katalogu cgi-bin, poproś swojego administratora
serwera WWW o udostępnienie go. Nie możesz po prostu założyć sobie katalogu o takiej
nazwie i skopiować tam skrypty to nie będzie działać.
Teraz, kiedy masz już gotowy do uruchomienia skrypt, możesz wywołać go z wnętrza
strony WWW poprzez użycie odnośnika, jak opisaliśmy to wcześniej. W całości skrypt
będzie wyglądał następująco:
#!/bin/sh
echo Content-type: text/html
echo
echo ""
echo "
Co robi Aki?"
echo ""
528 Część 6. Mapy odsyłaczy i formularze
ison=`who | grep aki`
if [ ! -z "$ison" ]; then
echo "
Aki pracuje w systemie.
"
else
echo "
Aki chwilowo nie pracuje w systemie.
"
fi
echo ""
Skrypty z parametrami
Skrypty CGI są najbardziej użyteczne, jeśli napiszemy je tak, żeby były możliwie
uogólnione, na przykład, jeśli chcesz sprawdzić, czy różne osoby korzystają z systemu,
za pomocą skryptu z poprzedniego przykładu mógłbyś napisać kilka różnych skryptów
(pingaki, pingkrzys, pingewa, itd.). Jednak bardziej sensownie jest napisać jeden skrypt
i przesyłać do niego identyfikator poszukiwanej osoby jako parametr.
Aby przekazać do skryptu argumenty, wyszczególniamy je w URL-u, oddzielając zna-
kiem zapytania (?) od nazwy skryptu. Do rozdzielania poszczególnych argumentów
wykorzystujemy znak plus (+). Na przykład:
Uruchom mój skrypt Kiedy serwer otrzyma zlecenie dostępu do skryptu, prześle do niego argumenty arg1,
arg2, arg3. Następnie można je wykorzystać wewnątrz skryptu.
Taka metoda przesyłania argumentów nazywana jest czasem zapytaniem, ponieważ
w taki sposób przeglądarki korzystały kiedyś z informacji przeszukiwanych za pomocą
pewnych kluczy, kiedy używano do tego celu znacznika ISINDEX. (Więcej na ten temat
napiszemy w dalszej części tego rozdziału.) Obecnie większość przeszukiwań wykonuje
się za pomocą formularzy, jednak poprzedni sposób kodowania argumentów jest wciąż
używany. Jeśli często korzystasz ze skryptów CGI, powinieneś go już znać.
Ćwiczenie 18.2: Sprawdzmy, czy wskazana osoba
korzysta akurat z systemu
Teraz, kiedy wiemy już, jak przekazywać parametry do skryptu, możemy zmodyfikować
skrypt pingaki, aby uogólnić jego działanie. Tak zmieniony skrypt nazwiemy pinggen.
Zacznijmy podobnie jak w przypadku skryptu z poprzedniego przykładu, z nieznacznie
zmienionym tytułem:
#!/bin/sh
echo Content-type: text/html
echo
echo ""
echo "
Co robisz?"
echo ""
Rozdział 18. Skrypty CGI dla początkujących 529
W poprzednim przykładzie następnym krokiem było sprawdzenie, czy Aki akurat ko-
rzysta z systemu. To jest miejsce, gdzie możemy spróbować uogólnić działanie skryptu.
Zamiast korzystać z identyfikatora wpisanego na sztywno w treści programu, użyje-
my zmiennej ${1}. ${1} oznacza pierwszy argument przekazany do skryptu, ${2}
drugi, ${3} trzeci itd.
ison=`who | grep "${1}"`
Po co stosujemy dodatkowe cudzysłowy wokół zmiennej ${1}? Dzięki nim zapobiegamy
przesyłaniu niewłaściwych argumentów do skryptu. Więcej na ten temat znajduje się
w rozdziale 30 Bezpieczeństwo serwera WWW i kontrola dostępu .
Wszystko, co zostało jeszcze do zrobienia, to modyfikacja reszty skryptu, aby używał
przesłanego argumentu, zamiast na stałe wpisanego identyfikatora:
if [ ! -z "$ison" ]; then
echo "
$1 pracuje w systemie.
"
else
echo "
$1 chwilowo nie pracuje w systemie.
"
fi
Następnie kończymy dokument, zamykając otwarty znacznik :
echo ""
Po zakończeniu pisania skryptu, możesz zmodyfikować stronę HTML, która z niego ko-
rzysta. Skrypt pingaki był wywoływany za pomocą następującego odnośnika:
Czy Aki
pracuje w systemie? W wersji uogólnionej wywołanie jest bardzo podobne, ale zawiera dodatkowy argument
dołączony na końcu URL-a. (W tym przypadku sprawdzamy, czy z serwera korzysta
użytkownik o identyfikatorze Jan.)
Czy Jan
pracuje w systemie? Wypróbuj ten skrypt na własnym serwerze WWW, z własnym identyfikatorem i URLem
do skryptu, i sprawdz rezultat .
Przesyłanie innych informacji do skryptu
Oprócz przesyłania argumentów w sposób opisany powyżej, można również skorzystać
z innej metody (to jeszcze nie są formularze). Drugi sposób, nazywany przesyłaniem in-
formacji o ścieżce, jest używany do przekazywania informacji, które nie zmieniają się
pomiędzy kolejnymi wywołaniami skryptu, jak, na przykład, nazwa pliku tymczasowe-
go lub nazwa pliku, który odwołał się do skryptu. Jak przekonasz się w dalszej części
poświęconej formularzom, parametry po znaku zapytania mogą się zmieniać w zależno-
ści od danych wprowadzonych przez użytkownika. Informacja o ścieżce służy do prze-
syłania innych parametrów (i w gruncie rzeczy mogą to być dowolne informacje).
530 Część 6. Mapy odsyłaczy i formularze
Informacja o ścieżce pozwala na przesyłanie dodatkowych informacji do skryptu CGI, które
nie zmieniają się tak często, jak zwykłe parametry. Informacja o ścieżce często odnosi się do
plików umieszczonych w obszarze serwera WWW, takich jak pliki konfiguracyjne, pliki
tymczasowe lub pliki, z których nastąpiło odwołanie do skryptu.
Aby wykorzystać informację o ścieżce, należy ją dołączyć na końcu URL-a po nazwie
skryptu, ale przed znakiem zapytania i resztą argumentów. Na przykład:
http://myhost/cgi-bin/myscript/remaining_path_info?arg1+arg2
Kiedy skrypt jest uruchomiony, informacja w ścieżce jest umieszczona w zmiennej śro-
dowiskowej PATH_INFO. Można jej pózniej użyć w dowolny sposób wewnątrz skryptu.
Załóżmy, że na wielu stronach znajduje się mnóstwo odnośników do tego samego
skryptu. Możesz wykorzystać dodatkowy parametr w ścieżce do przesłania nazwy pliku
HTML, z którego nastąpiło odwołanie. Następnie po wykonaniu skryptu, kiedy w odpo-
wiedzi zwracany jest dokument HTML, możesz dołączyć odnośnik z powrotem do stro-
ny, z której nastąpiło odwołanie.
Generowanie specjalnych odpowiedzi
W kilku przykładach wymienionych dotychczas w tym rozdziale, napisałeś skrypty,
które generowały w odpowiedzi dane, zazwyczaj dane HTML. Były one następnie od-
syłane do przeglądarki w celu interpretacji i wyświetlenia. Ale co się stanie, jeśli nie
chcesz wysyłać strumienia danych jako rezultatu działania skryptu? Co będzie, jeśli
zamiast tego zechcesz załadować inną istniejącą stronę? Co, jeśli chcesz, żeby skrypt
wykonał jakąś czynność bez zwracania odpowiedzi do przeglądarki?
Nie martw się, wszystkie te czynności są możliwe w skryptach CGI. Kolejna sekcja wy-
jaśnia, jak się to robi.
Odpowiedz polegająca na odesłaniu innego dokumentu
Odpowiedz CGI nie musi mieć postaci strumienia danych. Czasem łatwiej jest powie-
dzieć przeglądarce, żeby pobrała inną stronę z Twojego serwera (lub nawet z dowolne-
go serwera, jeśli ma to jakieś znaczenie). Aby ją o tym powiadomić, wysyłamy w od-
powiedzi następujący nagłówek:
Location: ../docs/final.html
Linia Location jest użyta w miejsce normalnej odpowiedzi. To znaczy, że używając
nagłówka Location, nie musimy już stosować Content-type lub dołączać do odpo-
wiedzi jakichkolwiek innych danych (i faktycznie, nawet nie bardzo można to zrobić).
Podobnie jednak, jak w przypadku Content-type, trzeba dodać na końcu pustą linię.
Ścieżka do pliku może być zarówno pełnym URL-em, jak i ścieżką względną. Wszyst-
kie ścieżki względne są tworzone względem lokalizacji samego skryptu. Poniższy szuka
dokumentu final.html w katalogu docs znajdującym się powyżej bieżącego:
Rozdział 18. Skrypty CGI dla początkujących 531
echo Location: ../docs/final.html
echo
Nie można mieszać nagłówków Content-type i Location. Na przykład, jeśli chcemy
wygenerować standardową stronę, a pózniej dodać na dole jakiś dodatkowy napis, musimy
użyć nagłówka Content-type i wygenerować stronę w całości samemu. Zauważmy, że
można stosować polecenia skryptowe do otwarcia pliku lokalnego i wyświetlenia go.
Polecenie cat nazwa_pliku wysyła zwartość pliku wskazanej nazwie na standardowe
wyjście.
Brak odpowiedzi
Czasem może być przydatne, aby skrypt CGI w ogóle nie generował żadnych danych.
Czasem chcemy jedynie pobrać informację od użytkownika. Możemy nie chcieć wysy-
łać nowego dokumentu ani poprzez generowanie go, ani poprzez wysyłanie gotowego
pliku. Dokument, który poprzednio znajdował się w przeglądarce, powinien pozostać na
swoim miejscu.
Na szczęście, jest na to dość łatwy sposób. Zamiast wysyłać nagłówek Content-type
lub Location, wykorzystujemy następującą linię (również z pustą linią bezpośrednio po
niej).
Status: 204 No Response
Nagłówek Status pozwala na wysłanie do serwera kodu statusu odpowiedzi (i również
do przeglądarki). W szczególności, do przeglądarki przesyłany jest wtedy kod 204 i ta,
jeśli go rozumie, nie powinna wyświetlić nowej strony.
W takim przypadku nie ma potrzeby wysyłania jakichkolwiek innych danych, ponieważ
nie chcemy, żeby przeglądarka cokolwiek z nimi robiła, po prostu poprzestajemy na po-
jedynczej linii Status. Oczywiście, sam skrypt powinien wykonywać jakieś zadania.
Inaczej po co byłby potrzebny?
Mimo, że No Response jest częścią oficjalnej specyfikacji HTTP, może się zdarzyć, że nie
będzie poprawnie zaimplementowany we wszystkich przeglądarkach lub może powodować
dziwne skutki. Zanim użyjemy go w swoich programach, dobrze jest przeprowadzić kilka
prób na różnych przeglądarkach, aby przekonać się samemu, jakie będą rezultaty. Ogólnie
rzecz biorąc, lepiej przesłać do przeglądarki odpowiedz informującą, że coś poszło nie tak,
żeby użytkownicy wiedzieli co się dzieje.
Skrypty przetwarzające formularze
W większości przypadków, skrypty CGI są wykorzystywane do przetwarzania danych
z formularzy. Wywołanie skryptu bezpośrednio poprzez odnośnik nie pozwala użyt-
kownikowi na przekazanie do niego argumentów. Formularze pozwalają na wprowa-
dzanie dowolnej ilości informacji, przesyłanie ich do serwera i przetwarzanie przez
skrypt CGI. Są to takie same skrypty i zachowują się podobnie. Również w ich przy-
padku można stosować nagłówki Content-type i Location w odpowiedzi wysyłanej
532 Część 6. Mapy odsyłaczy i formularze
do przeglądarki. Są jednak pewne różnice w sposobie wywołania skryptu oraz przesyła-
nia do niego danych.
Formularze i skrypty je przetwarzające
Jak już nauczyłeś się wcześniej, każdy formularz, który można znalezć w Internecie ma
dwie części: kod HTML formularza, który wyświetlany jest w oknie przeglądarki oraz
skrypt przetwarzający zawartość formularza. Są one ze sobą połączone poprzez kod HTML.
Atrybut ACTION znacznika
Jeśli używasz programu uncgi do dekodowania danych wejściowych, tak jak ja w tych
przykładach, wygląda to nieco inaczej. Aby zmusić uncgi do prawidłowego działania,
wywołujemy go najpierw w URL-u, a pózniej podajemy właściwą nazwę skryptu do wy-
konania, tak jakby uncgi było katalogiem. Oto przykład:
Poza tymi modyfikacjami, w formularzu nie potrzeba wprowadzać żadnych poważniej-
szych zmian. Teraz musimy zająć się skryptem przetwarzającym formularz.
536 Część 6. Mapy odsyłaczy i formularze
Skrypt
Skrypt przetwarzający dane formularza jest skryptem CGI, tak jak ten, który napisali-
śmy w poprzedniej części rozdziału. Te same reguły, odnośnie nagłówka Content-
type i przesyłania danych do przeglądarki, dotyczą również tego skryptu
Pierwszym krokiem w skrypcie przetwarzającym formularz jest zazwyczaj zdekodowa-
nie informacji przesłanej do niego metodą POST. W tym przykładzie, dzięki użyciu un-
cgi nie ma takiej potrzeby, ponieważ dane zostały już zdekodowane. Pamiętasz, jak
wstawiliśmy odwołanie do uncgi w URL-u do skryptu? Kiedy formularz zostaje wysła-
ny, serwer przekazuje go do skryptu uncgi, który dekoduje dane z formularza, a następ-
nie wywołuje właściwy skrypt. W tym skrypcie wszystkie pary nazwa wartość są ła-
two dostępne i gotowe do użycia.
W dalszym ciągu wyświetlamy standardowe nagłówki CGI i kod HTML rozpoczynają-
cy stronę:
echo Contenttype: text/html
echo
echo ""
echo "
Witaj"
echo ""
echo "
"
Teraz przechodzimy do właściwej części skryptu. Musimy zrealizować dwa zadania: po
pierwsze, sprawdzić, czy użytkownik wprowadził swoje imię, po drugie, wyświetlić po-
witanie.
Wartość elementu Imie, zgodnie z nazwą, zawarta jest w zmiennej środowiskowej
WWW_Imie. Wykorzystując prosty test zmiennej ( z), dostępny z poziomu powłoki,
możemy sprawdzić, czy zmienna jest pusta i wygenerować odpowiednią odpowiedz:
if [ ! -z "$WWW_Imie" ]; then
echo "Witaj, "
echo $WWW_Imie
else
echo "Nie masz imienia?"
fi
Wreszcie, dodajemy końcówkę kodu odpowiedzialną za wyświetlanie odnośnika, co
prowadzi do poprzedniej strony (mającej tutaj nazwę imie1.html), w katalogu znajdują-
cym się o jeden poziom wyżej w stosunku do cgi-bin:
echo "Poprzednia strona"
echo ""
I to wszystko, co musimy zrobić. Nauka tworzenia skryptów CGI jest dość trudna, ich
łączenie z formularzami, względnie łatwe. Nawet, jeśli coś pozostaje jeszcze niejasne,
nie martw się. Gdy zdobędziesz nieco więcej praktyki, wszystko stanie się jasne.
Rozdział 18. Skrypty CGI dla początkujących 537
Najczęstsze problemy
Poniżej znajduje się lista najczęściej spotykanych problemów związanych z zastosowa-
niem skryptów CGI wraz z rozwiązaniami.
Zawartość skryptu jest wyświetlana, a nie wykonywana.
Czy skonfigurowałeś swój serwer, tak aby akceptował skrypty CGI? Czy skrypty są
umieszczone w odpowiednim katalogu (zazwyczaj cgi-bin)? Czy serwer pozwala na
stosowanie skryptów z rozszerzeniem .cgi?
Błąd 500: serwer nie umożliwia stosowania metody POST.
Ten błąd można napotkać wtedy, gdy użyliśmy metody POST. Zazwyczaj błąd ten
oznacza, że serwer nie jest skonfigurowany do pracy ze skryptami CGI lub nastąpiła
próba dostępu do skryptu, który nie znajduje się w katalogu CGI (zobacz wyżej).
Czasem ten błąd może znaczyć, że pomyliłeś ścieżkę do skryptu. Sprawdz ścieżkę
w formularzu i, jeśli jest poprawna, upewnij się, że skrypt znajduje się
w odpowiednim katalogu CGI (zazwyczaj cgi-bin) lub ma odpowiednie
rozszerzenie (.cgi).
Dokument nie zawiera danych.
Sprawdz, czy między nagłówkami a treścią dokumentu znajduje się pusta linia.
Błąd 500: nieprawidłowy dostęp do skryptu
Sprawdz, czy skrypt jest wykonywalny. (W przypadku systemów Unix, upewnij się,
że skrypt ma prawa do wykonania i ewentualnie je ustaw poleceniem chmod +x).
Powinieneś mieć możliwość uruchomienia skryptu z linii poleceń, zanim wywołasz
go poprzez przeglądarkę.
Zmienne CGI
Zmienne CGI są specjalnymi zmiennymi środowiskowymi ustawianymi przy wywoła-
niu skryptu CGI. Do wszystkich tych zmiennych można odwoływać się w skrypcie. Ta-
bela 18.2 zawiera ich zestawienie.
Programy dekodujące dane z formularzy
Jedną z podstawowych różnic pomiędzy zwykłymi skryptami CGI, a skryptami prze-
twarzającymi formularze jest to, że umożliwiając wysyłanie danych w formacie URL,
muszą zawierać metody pozwalające na ich dekodowanie. Na szczęście, ponieważ wiele
osób pisze skrypty współpracujące z formularzami, jest dostępnych wiele gotowych
programów, które mogą wykonać za nas tę pracę. Osobiście lubię szczególnie dwa pro-
gramy: uncgi do użytku ogólnego oraz cgi-lib.pl, bibliotekę do Perla, pozwalającą na
pisanie skryptów w tym języku. Oczywiście, jeśli komuś nie wystarczają powyższe
rozwiązania, może napisać własne.
538 Część 6. Mapy odsyłaczy i formularze
Można również znalezć dobre programy realizujące transfer plików poprzez formularze,
mimo że jest ich trochę mniej. Na zakończenie tej sekcji wymienię kilka, które udało mi
się znalezć.
uncgi
Program uncgi Stevena Grimma jest napisany w C i dekoduje dane z formularzy. Wię-
cej informacji oraz zródło programu można znalezć pod adresem http://www.hyperion.
com~koreth/uncgi.html.
Uncgi należy zainstalować w katalogu cgi-bin. Należy się również upewnić, że zanim
skompilujemy skrypt, wprowadzone zostaną niezbędne poprawki do pliku Makefile,
w celu określenia lokalizacji tego katalogu w systemie. Dzięki temu program będzie
w stanie odnalezć skrypty CGI.
Dla wykorzystania uncgi w formularzach, należy zmodyfikować odpowiednio atrybut
ACTION znacznika FORM. Zamiast wywoływać skrypt bezpośrednio, należy dodać do nie-
go
Tabela 18.2.
Zmienne środowiskowe CGI
Zmienna Co oznacza
SERVER_NAME
Nazwa lub adres IP komputera, z którego nastąpiło odwołanie do skryptu CGI.
SERVER_SOFTWAR
Rodzaj serwera, z którego korzystamy, na przykład, CERN/3.0 lub NCSA/1.3.
E
GATEWAY_INTERF
Wersja CGI działającego na serwerze. W przypadku serwerów Uniksowych powinno
ACE
to być CGI/1.1.
SERVER_PROTOCO
Protokół HTTP, z którego korzysta serwer. Powinien być to HTTP/1.0 lub HTTP/1.1.
L
SERVER_PORT
Port TCP, z którego korzysta serwer. Dla serwerów WWW jest to zazwyczaj port 80.
REQUEST_METHOD
Zawiera metodę HTTP użytą w zleceniu (GET, POST, HEAD).
HTTP_ACCEPT
Zmienna ta zawiera listę typów danych, które przeglądarka akceptuje.
HTTP_USER_AGEN
Określa typ przeglądarki używanej przez odwiedzającego. Zazwyczaj składa się
T
z nazwy przeglądarki oraz platformy systemowej.
HTTP_REFERER
URL dokumentu, z którego nastąpiło odwołanie do skryptu (np. dokument
zawierający formularz).
PATH_INFO
Zawiera dodatkową informację o ścieżce.
PATH_TRANSLATE
Dodatkowa informacja o ścieżce, przekształcona do postaci pełnej ścieżki opisującej
D
plik serwera. Składa się ze ścieżki do głównego katalogu oraz dołączonej informacji
z PATH_INFO.
SCRIPT_NAME
Ścieżka dostępu do aktualnie wykonywanego skryptu CGI, w postaci, w jakiej została
podana w adresie URL, na przykład: /cgi-bin/skryptcgi.
QUERY_STRING
Zawiera argumenty przekazane do skryptu z formularza (jeśli są one przesyłane
Rozdział 18. Skrypty CGI dla początkujących 539
metodą GET). Zmienna zawiera wszystko, co w URL-u pojawiło się po znaku
zapytania.
REMOTE_HOST
Zawiera nazwę domenową komputera osoby korzystającej z naszego serwera.
REMOTE_ADDR
Zawiera adres IP komputera osoby korzystającej z naszego serwera.
REMOTE_USER
Zawiera identyfikator osoby korzystającej ze skryptu. Wartość ta jest ustawiana
przy włączonej autoryzacji.
REMOTE_IDENT
Identyfikator osoby na zdalnym systemie, uzyskany poprzez wykorzystanie protokołu
ident. Działa pod warunkiem, że oba systemy skonfigurowane są tak, żeby korzystać
z tego protokołu.
CONTENT_TYPE
Zawiera typ danych dołączonych do zlecenia wysłanego poprzez formularz. Odpowiada
atrybutowi ENCTYPE formularza. Może to być application/x-www-form-
urlencoded lub, jeśli formularz wykorzystuje możliwość kopiowania plików,
multipart/form-data.
CONTENT_LENGTH
Zawiera ilość bajtów danych dołączonych do zlecenia POST, dostępnych
na standardowym wejściu programu.
wywołanie skryptu uncgi. Na przykład, jeśli wywołujemy skrypt CGI o nazwie sleep2.cgi
wedle wzorca: