Rozdział 29.
Porady i wskazówki
na temat serwera WWW
Serwer WWW jest mózgiem każdej witryny, można porównać go do centrum
sterowania lotem kosmicznym. Bez niego to, co stworzyłeś, będzie tylko zbiorem
nieistotnych i nikomu niepotrzebnych stron WWW, przechowywanych na czyimś
twardym dysku.
Z drugiej strony jest to w końcu tylko program komputerowy, który instaluje się i
ustawia, tak jak inne programy. Oprócz tego, że jest odpowiedzialny za publikację
Twoich stron w sieci, pozwala także na wykorzystywanie skryptów CGI, map
odnośników i zabezpiecza pliki przed nieupoważnionym dostępem (o czym powiem w
rozdziale 30. Bezpieczeństwo serwera WWW i kontrola dostępu ).
W tym rozdziale opiszę kilka sztuczek, które ułatwią Ci zarządzanie witryną po stronie
serwera i sprawią, że będzie ona bardziej przejrzysta dla czytelników. Będą to
następujące zagadnienia:
mechanizm SSI serwerów NSCA oraz jego wykorzystanie do umieszczania na
stronach informacji na bieżąco aktualizowanych,
automatyczne przekierowanie przez serwer połączeń do przeniesionych stron,
log jego struktura, wykorzystanie i programy do generowania statystyk,
tworzenie własnych dokumentów informujących o błędach.
Tak jak w poprzednich rozdziałach, moje uwagi dotyczą przede wszystkim serwerów HTTPD
działających w systemie Unix. Jednakże większość podawanych informacji dotyczy
serwerów w ogóle, dlatego też treść tego rozdziału może okazać się przydatna nawet wtedy,
gdy używasz innego serwera na innej platformie programowej.
Mechanizm NCSA SSI
Mechanizm SSI (ang. Server Side Include) jest udostępniany przez wiele serwerów WWW,
umożliwia tworzenie stron WWW przetwarzanych przez serwer i umieszczanie w nich
specjalnych poleceń. W momencie zgłoszenia żądania odczytu pliku HTML, serwer
804 Część 10. Konfiguracja i administracja serwera WWW
przetwarza umieszczone w nim polecenia, a ich wyniki umieszcza w kodzie pliku. Me-
chanizm SSI pozwala na wykonywanie następujących operacji:
umieszczanie plików wewnątrz innych (z reguły są to pliki z podpisami lub notki
o prawach autorskich),
umieszczanie na stronie HTML bieżącej daty i czasu,
umieszczanie na stronie informacji o pliku, na przykład, jego wielkości lub daty
ostatniej modyfikacji,
umieszczanie na stronie wyniku działania skryptu CGI przykładem może być
licznik odwiedzin danej strony.
SSI wprowadza sporą elastyczność dotyczącą typu informacji, które można dołączyć do
strony WWW. Wadą tego rozwiązania jest to, że każdy plik zawierający specjalne kody
musi być dodatkowo przetworzony przez serwer, co powoduje jego większe obciążenie
i wolniejsze ładowanie strony. Oprócz tego wywoływanie skryptów CGI osłabia bezpie-
czeństwo serwera.
W tej części rozdziału przedstawię pokrótce każde z wyrażeń, które może zostać
umieszczone w kodzie strony. Opiszę również, jak skonfigurować serwer i pliki, aby
mechanizm SSI mógł zadziałać.
Zarówno teraz, jak i w dalszej części rozdziału przyjmuję założenie, że masz do dyspozycji
własny serwer WWW, który możesz konfigurować w dowolny sposób. Jeżeli korzystasz z
usług serwera, będącego pod opieką kogoś innego, może okazać się, że nie posiada on
opisywanych tu możliwości. Porozmawiaj z jego administratorem i dowiedz się, jakie cechy
potrafi on obsłużyć.
Konfiguracja serwera
Pierwszym warunkiem korzystania z mechanizmu SSI jest jego obsługa przez serwer.
Jeżeli jest on spełniony, należy jeszcze skonfigurować oprogramowanie tak, aby go
uruchomić.
W serwerach opartych o NSCA należy dokonać dwóch modyfikacji w plikach
konfiguracyjnych, a więc trzeba:
dodać opcję Include do dyrektywy Options,
Zdefiniować specjalny typ dla plików, które mają być przetwarzane przez serwer.
Może się zdarzyć, że serwer, którego używasz, obsługuje SSI, ale sposób włączania tego
mechanizmu jest nieco inny. W takim razie należy dokładnie przejrzeć dokumentację i
znalezć odpowiedni opis.
SSI może zostać zainicjowane dla całego serwera lub tylko dla niektórych katalogów.
Podobnie, pewnym katalogom można odebrać prawo dostępu do tej usługi.
Rozdział 29. Porady i wskazówki na temat serwera WWW 805
Aby udostępnić SSI dla wszystkich plików w drzewie katalogów serwera, należy doko-
nać zmian w pliku access.conf, który znajduje się w katalogu konfiguracyjnym (zwykle
nosi on nazwę conf).
Plik kontroli dostępu dla całego serwera może znajdować się gdzie indziej i nosić inną nazwę.
Jest to zdefiniowane w pliku httpd.conf. W nowszych wersjach serwera Apache, wszystkie
dyrektywy konfiguracyjne umieszczane są w pliku httpd.conf, dotyczy to także dyrektyw
określających prawa dostępu.
Aby udostępnić SSI dla wszystkich katalogów, dopisz do pliku access.conf następującą
linię:
Options Includes
Zamiast umożliwiać przetwarzanie plików znajdujących się we wszystkich katalogach,
możesz je ograniczyć tylko do kilku wybranych. Aby włączyć mechanizm SSI tylko dla
plików, znajdujących się w katalogu /home/www/includes, musisz w pliku access.conf
wpisać następujące linie:
Options Includes
Włączenia SSI dla konkretnego katalogu można dokonać również za pomocą pliku kontroli
dostępu, znajdującego się właśnie w tym katalogu. Plik ten nosi zwykle nazwę .htaccess, a
więcej na jego temat opowiem w następnym rozdziale.
Zarówno globalnie, jak i tylko dla określonych katalogów można uaktywnić mechanizm
SSI z pewnym ograniczeniem, nie będą wykonywane polecenia, które powodują wywo-
łanie skryptów CGI. W tym celu, zamiast linii podanej powyżej, należy wstawić:
Options IncludesNoExec
Przejdzmy teraz do edycji pliku srm.conf (lub http.conf, w zależności do posiadanej
wersji serwera Apache), który powinien również znajdować się w katalogu konfigura-
cyjnym. W tym miejscu należy określić rozszerzenie dla plików HTML, które będą
przetwarzane przez serwer i będą zawierały odpowiednie polecenia. Zwykle pliki te po-
siadają rozszerzenie .shtml. Aby serwer mógł przetwarzać pliki z takim właśnie rozsze-
rzeniem, należy dopisać następującą linię:
AddType text/x-server-parsed-html .shtml
Możesz też spowodować, że wszystkie pliki znajdujące się na serwerze będą przezeń
przetwarzane:
AddType text/x-server-parsed-html .html
Zwróć jednak uwagę, że jeżeli serwer będzie analizował każdy wysyłany przez siebie
plik HTML, jego działanie ulegnie znacznemu spowolnieniu.
Po dokonaniu tych zmian należy ponownie uruchomić serwer, aby je uaktywnić i w za-
sadzie wszystko będzie już przygotowane.
806 Część 10. Konfiguracja i administracja serwera WWW
Tworzenie plików z poleceniami SSI
Teraz, kiedy serwer jest już odpowiednio ustawiony, można rozpocząć wstawianie po-
leceń SSI do plików HTML, tak aby serwer przetwarzał je w momencie, w którym ktoś
zażąda dostępu do nich.
Polecenia SSI umieszczane są w komentarzach HTML (w ten sposób są one ignorowa-
ne przez serwery, które nie wiedzą, co to jest SSI). Mają one swój specyficzny format,
który wygląda następująco:
W wyrażeniu tym polecenie oznacza polecenie SSI, które zostanie wykonane (np. inclu-
de, exec lub echo z każdym z nich zapoznasz się bliżej, kontynuując lekturę tego
rozdziału). Każde polecenie posiada jeden lub więcej argumentów, których wartości
podawane są w cudzysłowach. Tak skonstruowane wyrażenie można umieścić w do-
wolnym miejscu kodu HTML. Po przetworzeniu pliku przez serwer całość komentarza
zostanie zastąpiona przez to, co jest wynikiem wykonania danego polecenia: może być
to zawartość innego pliku, wartość zmiennej lub efekt działania skryptu.
Aby serwer wiedział, że powinien przetworzyć dany plik, należy nadać mu odpowied-
nie rozszerzenie (to samo, które zostało zdefiniowane w pliku konfiguracyjnym, czyli
.shtml). Jednakże, jeżeli skonfigurowałeś serwer tak, aby przetwarzał wszystkie pliki,
nie musisz zmieniać rozszerzenia.
Wiele z powstających obecnie, bardzo rozbudowanych serwerów WWW zawiera różnorakie
mechanizmy, umożliwiające tworzenie dość złożonych skryptów. Jednym z przykładów
takich rozwiązań jest środowisko tworzenia aplikacji LiveWire firmy Netscape, które
umożliwia wykonywanie przez serwer programów w języku JavaScript.
Konfiguracja SSI
Istnieje polecenie SSI, które nie powoduje wstawiania żadnych dodatkowych elemen-
tów, lecz służy do konfiguracji formatu innych poleceń. Polecenie #config określa
konfigurację wszystkich innych wyrażeń SSI, występujących po nim w danym pliku
HTML. #config może posiadać trzy argumenty.
errms
Jeżeli w trakcie wykonywania polecenia SSI wystąpi błąd, na stronie HTML oraz
g
w logu błędów pojawi się komunikat określony za pomocą tej opcji.
time-
Argument ten określa format wyświetlania daty oraz czasu i jest wykorzystywany
fmt
przez wiele poleceń SSI. Standardowy format wygląda następująco:
Wednesday, 14-May-98 21:04:46
size-
Ten argument określa format wyświetlania wartości polecenia SSI, które zwraca rozmiar
fmt
zadanego pliku. Jego możliwe wartości to bytes , która powoduje podanie pełnej liczby
bajtów oraz abbrev , która sprawia, że liczba jest przeliczana na kilobajty lub megabajty
oraz dodatkowo zaokrąglana. Standardowo przyjmowana jest wartość abbrev .
Rozdział 29. Porady i wskazówki na temat serwera WWW 807
Oto kilka przykładów użycia polecenia #config:
Tabela 29.1 przedstawia elementy możliwe do wykorzystania przy specyfikacji formatu
daty i czasu za pomocą polecenia timefmt. Pełną ich listę można znalezć w systemie
podręczników Uniksa (man strftime).
Tabela 29.1.
Formaty daty i czasu
Format Efekt
%c
Pełna data i czas: Thu, May 21 20:45:34 1998.
%x
Skrócona data: 05/21/98.
%X
Skrócony czas (24 godziny): 20:45:44.
%b
Skrócona nazwa miesiąca: Jan, Feb, Mar.
%B
Pełna nazwa miesiąca: January, February, March.
%m
Numer miesiąca (od 1 do 12).
%a
Skrócona nazwa dnia tygodnia (Mon, Tue, Thu).
%A
Pełna nazwa dnia tygodnia (Monday, Tuesday).
%d
Numer dnia tygodnia (od 1 do 7).
%y
Skrócony rok (96, 97, 98).
%Y
Pełny rok (1996, 1997, 1998).
%H
Aktualna godzina (wg zegara 24-godzinnego).
%I
Aktualna godzina (wg zegara 12-godzinnego).
%M
Aktualna minuta (od 0 do 60).
%S
Aktualna sekunda (od 0 do 60).
%p
a.m. lub p.m. wskazanie pory przed lub popołudniowej.
%Z
Strefa czasowa (EST, PST, GMT).
Włączanie innych plików do stron WWW
Najprostszym zastosowaniem SSI jest włączanie do plików HTML zawartości innych
plików. Służy do tego polecenie #include wraz z argumentami file lub virtual:
Argument file służy do określania względnej ścieżki dostępu do włączanego pliku
(względem pliku bieżącego). W pierwszym przykładzie plik singniture.html znajduje
się w tym samym katalogu, co edytowana strona. W ten sposób można również włączać
pliki znajdujące się w podkatalogach katalogu bieżącego (np. file=signatures/mysig.html),
808 Część 10. Konfiguracja i administracja serwera WWW
nie można natomiast odwoływać się do katalogów nadrzędnych (co oznacza, że w ścieżce
nie może znalezć się symbol .. ).
Argument virtual służy do określenia pełnej ścieżki dostępu do włączanego pliku
w postaci, w jakiej pojawia się w URL-u, nie w systemie operacyjnym. Jeżeli więc URL
pliku będzie następujący: http://myhost.com/~myhomedir/file.html, ścieżka będąca ar-
gumentem polecenia #include powinna wyglądać tak: /~myhomedir/file.html (bez
pierwszego ukośnika).
Plik, który jest w ten sposób włączany do strony, może być zwykłym plikiem HTML,
ale może też zawierać dalsze polecenia SSI (w ten sposób można stworzyć kilka pozio-
mów zagnieżdżenia). Za pomocą #include nie można jednakże zamieszczać skryptów
CGI, do tego służy polecenie #exec, o którym będziesz mógł przeczytać w dalszej czę-
ści tego rozdziału Wyniki działania poleceń i skryptów jako część stron WWW .
SSI pozwala na umieszczanie na stronach wartości predefiniowanych zmiennych, takich
jak nazwa czy data ostatniej modyfikacji danego pliku HTML lub bieżąca data.
Do wyświetlania wartości zmiennych służy polecenie #echo oraz argument var z na-
zwą zmiennej:
Dzisiejsza data:
Tabela 29.2 przedstawia kilka zmiennych, które mogą zostać wyświetlone za pomocą
polecenia #echo.
Tabela 29.2.
Zmienne SSI
Zmienna Wartość
DOCUMENT_NAME
Nazwa bieżącego pliku.
DOCUMENT_URL
Ścieżka do bieżącego dokumentu w postaci URL.
DATE_LOCAL
Bieżąca data w lokalnej strefie czasowej.
DATE_GMT
Bieżąca data w czasie Greenwich (GMT).
LAST_MODIFIED
Data i czas ostatniej modyfikacji bieżącego dokumentu.
Ćwiczenie 29.1: Tworzenie automatycznie wstawianego podpisu
Jeżeli stosowałeś się do moich rad z poprzednich rozdziałów, każda stworzona przez
Ciebie strona WWW zwieńczona jest podpisem lub znacznikiem adresu, który zawiera
Twoje imię i nazwisko, informacje kontaktowe itp. Jednakże, za każdym razem, kiedy
zdecydujesz się zmienić coś w tym podpisie, zmuszony jesteś robić to w każdym pliku,
co może wyprowadzić z równowagi nawet najbardziej cierpliwego człowieka.
Włączanie do każdej strony pliku z podpisem jest znakomitym zastosowaniem mecha-
nizmu SSI, pozwala bowiem na przechowywanie go poza właściwymi stronami. Wtedy
Rozdział 29. Porady i wskazówki na temat serwera WWW 809
wprowadzenie do niego jakichkolwiek poprawek staje się banalnie proste, wystarczy
zmienić tylko jeden plik i po sprawie.
W naszym ćwiczeniu spróbujemy utworzyć dokument HTML, który będzie zawierał
polecenie włączenia pliku z podpisem. Ten plik będzie z kolei zawierał aktualna datę,
wstawianą również za pomocą SSI. Końcowy rezultat, jaki powinniśmy uzyskać, wi-
doczny jest na rysunku 29.1 (data będzie oczywiście codziennie inna).
Rysunek 29.1.
Plik z podpisem
włączony do dokumentu
Rozpocznijmy od utworzenia pliku z podpisem. Znajdą się w nim standardowe infor-
macje umieszczane w tym miejscu strony (notka o prawach autorskich, dane kontakto-
we itp.), poprzedzone poziomą linią:
Ta strona: Copyright © 1995 Zuzanna Agawa zuza@kaktus.com
Ponieważ plik ten będzie częścią innej strony, nie ma potrzeby umieszczania w nim
znaczników struktury dokumentu, takich jak czy .
Żeby było ciekawiej, spróbujemy w pliku z podpisem umieścić bieżącą datę. Aby to
wykonać, wstawimy polecenie #echo wyświetlające wartość zmiennej DATE_LOCAL,
poprzedzone krótkim tekstem:
Dzisiejsza data:
Zachowajmy ten plik pod nazwą signature.shtml. Teraz należy umieścić go na serwerze
WWW i przetestować w różnych przeglądarkach. Rysunek 29.2 prezentuje efekt do-
tychczasowej pracy. W zasadzie wszystko jest w porządku, ale data prezentuje się ra-
czej nieciekawie. Byłoby lepiej, gdyby na stronie pojawiał się tylko dzień, miesiąc i rok.
Aby zmienić format daty, należy skorzystać z polecenia SSI #config oraz dyrektywy
timefmt %x (zgodnie z opisem w tabeli 27.1 będzie to format, który chcemy uzyskać).
Wyrażenie to może znalezć się w dowolnym miejscu pliku HTML, ale koniecznie przed
810 Część 10. Konfiguracja i administracja serwera WWW
Rysunek 29.2.
Plik z podpisem
poleceniem #include. W naszym przykładzie umieścimy je w pierwszej linii. Osta-
teczna postać pliku signature.shtml wygląda następująco:
Ta strona: Copyright © 1995 Zuzanna Agawa zuza@kaktus.com
Dzisiejsza data:
Przejdzmy teraz do strony, w której zawarty zostanie plik z podpisem. Wykorzystamy
do tego celu skróconą wersję dobrze nam znanej strony głównej ogrodu kaktusów Zu-
zanny. Oto jej kod HTML:
Ogród kaktusów Zuzanny: Katalog Ogród kaktusów Zuzanny Wybór i zamawianie roślin
Na końcu pliku (zaraz po znaczniku końca listy, przed ) wstawimy linię z po-
leceniem SSI:
Zachowaj ten plik z odpowiednim rozszerzeniem, które pozwoli na jego przetworzenie
przez serwer (niech będzie cactus.shtml). Kiedy wpiszesz w przeglądarce jego URL, za-
równo on sam, jak i plik z podpisem zostanie przetworzony przez serwer, a podpis wraz
z datą znajdą się na właściwym miejscu.
Dołączanie informacji o pliku
Polecenia #fsize i #flastmod pozwalają na zamieszczenie danych o wielkości i dacie
ostatniej modyfikacji przetwarzanego pliku, czego nie można było wykonać za pomocą
#include. Argumenty obydwu tych poleceń są identyczne, jak w przypadku #inclu-
de.
Rozdział 29. Porady i wskazówki na temat serwera WWW 811
file
Określa nazwę pliku podaną względem bieżącego katalogu.
virtual
Określa pełną ścieżkę dostępu do pliku w postaci, takiej jak w URL.
Format wartości polecenia #fsize zależny jest od uprzednio zdefiniowanej dyrektywy
#config sizefmt. Jeżeli, na przykład, wielkość pliku signature.html wynosi 223 baj-
ty, poniższa linia spowoduje wyświetlenie komunikatu: Ten plik ma wielkość 1K
bajtów.
Ten plik ma wielkość bajtów
Natomiast po przetworzeniu takiej sekwencji, na stronie pojawi się napis: Ten plik
ma wielkość 223 bajtów:
Ten plik ma wielkość bajtów
W przypadku polecenia #flastmod format zwracanych danych zależny jest od usta-
wienia #config timefmt. Poniższe przykładowe linie spowodują wyświetlenie ko-
munikatu: Ostatnia modyfikacja pliku: 5/26/01 (przy założeniu, że plik si-
gnature.html był rzeczywiście ostatnio poprawiany tego dnia)
Ostatnia modyfikacja pliku:
Wyniki działania poleceń i skryptów jako część stron WWW
Jeżeli opisane do tej pory polecenia SSI nie spełniają Twoich oczekiwań, masz możli-
wość uzupełnienia tych braków za pomocą poleceń systemu operacyjnego lub skryptów
CGI. Mogą one być umieszczane na stronach HTML i uruchamiane przez serwer
WWW, a rezultat ich działania pojawi się w kodzie przesyłanym do przeglądarki. Do
realizacji tego typu zadań służy polecenie SSI #exec.
#exec może posiadać dwa argumenty.
cmd
Nazwa polecenia, które może zostać uruchomione przez shell Bourne a (/bin/sh).
Może być to polecenie systemu operacyjnego (np. grep lub echo) lub napisany przez
Ciebie skrypt (w takim przypadku należy podać pełną ścieżkę dostępu do niego).
cgi
Nazwa i ścieżka dostępu do skryptu CGI w postaci, jaka pojawia się w adresie URL.
Skrypt uruchamiany w ten sposób nie różni się niczym od innych skryptów, a więc
w pierwszej linii musi zawsze zwrócić kontekst i może z powodzeniem wykorzystywać
wszystkie zmienne CGI, o których pisałam w rozdziale 18. Skrypty CGI dla po-
czątkujących . Oprócz tego można tu wykorzystać wszystkie zmienne, które pojawiają
się przy okazji polecenia #echo, a więc DATE_LOCAL, DOCUMENT_NAME itd.
Oto klika przykładów uruchamiania skryptów z wykorzystaniem SSI:
812 Część 10. Konfiguracja i administracja serwera WWW
Jedyny kłopot z uruchamianiem skryptów CGI za pomocą poleceń SSI polega na tym,
że nie można w ten sposób przekazywać do skryptu danych, umieszczanych po jego na-
zwie, czyli nie można użyć poniższego wywołania:
Jak więc przekazać skryptowi jakiekolwiek argumenty? Można to zrobić, wykorzystując
URL, prowadzący do pliku .shtml, w którym znajduje się polecenie SSI wywołujące skrypt.
Że co proszę? Czy mógłabyś powtórzyć to zdanie?
Właśnie tak. Jest to dość skomplikowana procedura i nie ma raczej wielkiego sensu.
Oto przykład, który być może odrobinę przybliży tę ideę. Załóżmy, że dysponujemy
skryptem o nazwie docolor, który wymaga podania dwóch argumentów współrzęd-
nych x i y a wynikiem jego działania jest numer koloru (jest to przykład czysto teo-
retyczny, nie wiem po co program miałby zwracać numer koloru, ale coś takiego akurat
przyszło mi do głowy).
Oprócz tego mamy też plik color.shtml, w którym znajduje się linia wywołująca skrypt
z zakodowanymi argumentami (na przykład 45 i 64). Jest to więc następujące wywołanie:
Twój kolor, to .
Skrypt uruchomiony bezpośrednio z przeglądarki lub jako połączenie z pliku HTML
poradzi sobie z takim wywołaniem, ale próba takiego przekazania argumentów do skryptu
wywoływanego za pomocą SSI skończy się błędem.
Możesz jednak umieścić owe argumenty w URL-u prowadzącym do pliku color.shtml.
Załóżmy, że istnieje trzeci plik, z którego poprowadzimy połączenie do naszego pliku:
Sprawdz kolor Aby skrypt został wywołany z żądanymi argumentami, należy umieścić je w powyższym
połączeniu:
Sprawdz kolor W pliku color.shtml należy teraz poprawić wywołanie skryptu, co polega na usunięciu
nieszczęsnych argumentów i znaku zapytania po jego nazwie.
Twój kolor, to .
Gotowe.
Teraz skrypt będzie mógł pobrać argumenty w zwykły sposób (poprzez linię poleceń
lub zmienną QUERY_STRING) i zwrócić wartość wyliczoną na ich podstawie.
Ćwiczenie 29.2: Tworzymy licznik trafień
Istnieje wiele programów, które można wykorzystać do umieszczania na stronie tzw.
licznika trafień, niektóre z nich potrafią nawet wygenerować graficzne rysunki liczni-
ków. W tym przykładzie spróbujemy stworzyć prosty licznik, który będzie równie sku-
teczny w działaniu.
Rozdział 29. Porady i wskazówki na temat serwera WWW 813
Do utworzenia licznika trafień potrzebne będą następujące elementy:
plik zliczający, zawierający tylko i wyłącznie jedną liczbę (liczbę dotychczasowych
odczytów strony),
prosty program, który zwraca właściwą liczbę i aktualizuje plik zliczający,
polecenie SSI umieszczone w pliku, którego odczyty chcemy zliczać, jego zadaniem
będzie uruchamianie skryptu.
Przyjrzyjmy się bliżej naszemu plikowi zliczającemu. Liczba w nim zawarta reprezen-
tuje ilość dotychczasowych odczytów strony WWW. Możesz wpisać do niego liczbę 1
albo też przeszukać logi serwera i znalezć rzeczywistą wartość. Utwórzmy więc ten plik.
W tym przykładzie nadamy mu nazwę home.count i jako pierwszą wpiszemy liczbę 0:
echo 0 > home.count
Poza tym prawo zapisu do tego pliku musi być tak ustawione, aby mógł tego dokonywać
serwer WWW (pamiętaj, że jest on uruchamiany jako użytkownik nobody). Prawo zapisu
dla każdego użytkownika można ustawić w następujący sposób za pomocą polecenia
chmod:
chmod a+w home.count
Drugim potrzebnym elementem jest skrypt, który wyświetla liczbę i aktualizuje plik.
Można do tego wykorzystać skrypt CGI (wiele popularnych liczników z nich korzysta),
ale dużo prościej jest posłużyć się zwykłym skryptem shell-owym. Oto jego kod:
#!/bin/sh
countfile=/home/www/Web/Examples/More_HTML/chap09/home.count
nums=`cat $countfile`
nums=`expr $nums + 1`
echo $nums > /tmp/countfile.$$
cp /tmp/countfile.$$ $countfile
rm /tmp/countfile.$$
echo $nums
Jedynym miejscem, w którym musisz dokonać zmian jest linia druga. Zmienna countfi-
le powinna zawierać pełną ścieżkę do pliku, który posłuży Ci jako plik zliczający. W mo-
jej wersji znajduje się on w katalogu, zawierającym pozostałe przykłady z tego rozdziału.
Zapisz skrypt w tym samym katalogu, w którym uprzednio umieściłeś plik zliczający oraz
stronę, której odczyty będziesz liczył. Nie ma potrzeby kopiowania go do katalogu
cgi-bin. Poza tym powinieneś nadać mu atrybut wykonywalności i kilkakrotnie uru-
chomić, aby sprawdzić, czy rzeczywiście aktualizuje plik zliczeń. Mój skrypt nazywa
się homecounter.
W tej chwili pozostaje nam tylko utworzenie strony, na której znajdzie się licznik. Wy-
korzystałem do tego celu stronę prywatną niejakiego Janka (który, jak widać, nie jest
zbyt twórczym osobnikiem):
Prywatna strona Janka Prywatna strona Janka
814 Część 10. Konfiguracja i administracja serwera WWW
Cześć, nazywam się Janek. Jesteś
osobą, która odwiedziła moją stronę.