Ta strona wygląda tak kiepsko, ponieważ korzystasz z przeglądarki nie obsługującej ogólnie przyjętych standardów internetowych. Aby zobaczyą ją w pełnej krasie, zaktualizuj ją do wersji zgodnej z tymi standardami. Trwa to krótko i nie kosztuje nic.

Server Side Includes

Michał Paluchowski | opublikowany: 2001-06-22 | średnia ocena: brak ocen (wymagane minimum 5)

Czy jesteś udręczonym, przepracowanym webmasterem, który właśnie stanął przed zadaniem dokonania tych samych zmian na kilku tysiącach stron jednej witryny? Zadanie to może być znacznie prostsze dzięki wykorzystaniu Server Side Includes czyli SSI.

wydrukuj artykuł wyślij artykuł skomentuj i oceń artykuł wyślij komentarz
o autorach
Michał  Paluchowski Michał Paluchowski

CEO, właściciel i redaktor vortalu NetHut.pl. Jego ulubionym tygodnikiem jest Wprost, a na co dzień z przyjemnością czyta Gazetę Wyborczą. Jest zakochany w muzyce i komputerach, czasem nieco ekscentryczny. Zawsze otwarty na nowe znajomości.

Łącznie napisał dla nas 45 artykułów.

tych samych autorów
zobacz również

Czym są SSI?

SSI działają na większości, ale nie wszystkich serwerach. Po raz pierwszy pojawiły się na serwerze NCSA. Dalszego ich rozwoju dokonano w serwerze Apache, który obsługuje eXtended SSI. Niestety nie działają na serwerach CERN. Nie działają także na większości darmowych kont.

Polecenie lub dyrektywa SSI jest umieszczana w zwykłym pliku HTML wewnątrz linii komentarza. Tuż przed wysłaniem strony do przeglądarki internauty wszystkie polecenia są zamieniane przez serwer na odpowiednie dane. Dzięki nim można szybko zmienić wygląd wielu stron, wstawić aktualną datę, czas, wywołać skrypt CGI i nie tylko.

Uruchamianie SSI

Jeżeli posiadasz konto na innym serwerze skieruj pytania o dostępność SSI do swojego administratora. On też będzie mógł uruchomić SSI.

Jeżeli natomiast sam administrujesz serwerem, musisz zmienić kilka danych w jego pliku konfiguracyjnym. Znajdź w nim sekcję z poleceniami AddType i sprzed linii

#AddType text/x-server-parsed-html .shtml

usuń znak #. Ewentualnie dopisz powyższą linię.

Najczęściej pliki zawierające polecenia SSI maja rozszerzenie .shtml ale możesz też użyć rozszerzeń .html. Wystarczy dopisać to rozszerzenie do linii powyżej.

Składnia SSI

Ogólny wzór poleceń SSI wygląda tak:

<!--#dyrektywa parametr="wartość" -->

Piękne, prawda? Ale po kolei. Dyrektywa to polecenie dla serwera aby wykonał odpowiednie zadanie. Parametr określa na jakim elemencie ma to zadanie być wykonane. Wartość jest rezultatem jaki chcesz osiągnąć.

Ważne jest też umiejscowienie spacji. Pomiędzy znakami <!--# oraz dyrektywą nie może być żadnych spacji. Szczególnie dotyczy to znaków - i #, ponieważ jeżeli je oddzielisz serwer potraktuje linię jako zwykły komentarz i nie zrobi nic. Ważne jest też aby w ciągu znaków parametru i wartości nie było przerw. Natomiast zaraz po nim wstawiamy spację i znak zakończenia -->.

Dyrektyw i parametrów jest naprawdę niewiele. Oto one:

DyrektywyParametry
configerrmsg, timefmt, sizefmt
includevirtual, file
echovar
fsizefile
flastmodfile
execcmd, cgi

Dyrektywa ta zmienia domyślne zachowanie SSI.

errmsg

Ustawia inny niż domyślny komunikat o błędzie. Najlepiej umieścić go na samej górze dokumentu.

Przykład:

<!--#config errmsg="Znowu błąd SSI. Napisz do administratora root@serwer.pl" -->

timefmt

Określa format w jakim przedstawiana będzie data i czas. Musi być umieszczone przed dyrektywą echo. Przykład:

<!--#config timefmt="%A, %B %d, %Y" -->
<!--#echo var="LAST_MODIFIED" -->

wyświetli

Wednesday, April 12, 2000 (niestety po angielsku)

Symboli pozwalających dostosować format czasu jest sporo, więc proponuję wydrukować sobie ich listę.

sizefmt

Określa format w jakim podawana jest wielkość pliku. Użyj "bytes" dla bajtów i "abbrev" dla kilobajtów oraz megabajtów. Musi występować przed dyrektywą fsize. Przykład:

<!--#config sizefmt="abbrev" -->
<!--#fsize file="download.zip" -->

Include

To zdecydowanie najbardziej pożyteczna i najczęściej wykorzystywana dyrektywa SSI. Pozwala wstawić zawartość jednego pliku do drugiego. Jest to szczególnie przydatne gdy na wielu stronach znajdują się te same elementy (np. nagłówek czy menu) i trzeba je zmienić na inne. Wystarczy zapisać całe menu jako osobny plik a w pozostałych wstawić dyrektywy SSI.

Parametry są tylko dwa, ale ważne jest abyś użył właściwego.

virtual

Podaje wirtualną ścieżkę do dokumentu na serwerze.

<!--#include virtual="/includes/naglowek1.html" -->

Najlepiej stworzyć osobny katalog z plikami do wstawiania w inne strony. Należy pamiętać, że wstawiona zostanie cała zawartość pliku źródłowego, więc umieść w nim dokładnie to co chcesz mieć na stronie docelowej.

Na przykład możesz stworzyć stopkę dla każdej strony, gdzie będzie informacja o prawach autorskich i Twój adres e-mail. Może wyglądać tak:

<p>Wszystkie prawa zastrzeżone.</p>
<p>Kontakt <a href="mailto:adres@email.pl">Autor strony</a></p>

Zapisz to jako stopka.html i we wszystkich dokumentach w odpowiednim miejscu (prawdopodobnie na dole strony) umieść dyrektywę include wskazującą na ten plik.

file

Podaje ścieżkę w obecnym katalogu. Nie można przejść do poprzedniego ani przez użycie ../ ani ścieżek bezwzględnych.

<!--#include file="naglowek1.html" -->

Używając tego parametru musiałbyś mieć plik nagłówka w każdym katalogu, co nie poprawiłoby sytuacji uaktualnień. Może to być jednak przydatne jeżeli chcesz wstawić plik tylko na jednej stronie.

Wyświetla zmienne środowiskowe.

DOCUMENT_NAME

Wyświetla nazwę pliku aktywnego dokumentu.

<!--#echo var="DOCUMENT_NAME" -->

wyświetli

index.html

DOCUMENT_URI

Wyświetla wirtualną ścieżkę dokumentu.

<!--#echo var="DOCUMENT_URI" -->

wyświetli

/katalog/katalog2/plik.html

Aby wyświetlić adres z domeną, umieść ją przed dyrektywą:

http://www.domena.pl<!--#echo var="DOCUMENT_URI" -->

DATE_LOCAL

Pokazuje datę i czas, ustawione na serwerze.

<!--#echo var="DATE_LOCAL" -->

wyświetla

Saturday, 14-Oct-2000 12:54:06 EET

Domyślnie wyświetla to w dosyć nieciekawym formacie, ale można to łatwo zmienić stosując dyrektywę config w sposób opisany nieco wyżej.

DATE_GMT

Działa tak samo jak DATE_LOCAL ale wyświetla czas Greenwich (GMT = Greenwich Mean Time).

LAST_MODIFIED

Wyświetla datę kiedy dokument został ostatnio zmodyfikowany.

<!--#echo var="LAST_MODIFIED" -->

SERVER_SOFTWARE

Nazwa i wersja oprogramowania serwera

<!--#echo var="SERVER_SOFTWARE" -->

SERVER_NAME

Nazwa serwera, aliasu DNS lub adres IP

<!--#echo var="SERVER_NAME" -->

GATEWAY_INTERFACE

Zmiany specyfikacji CGI, którą stosuje dany serwer

<!--#echo var="GATEWAY_INTERFACE" -->

SERVER_PROTOCOL

Nazwa i zmiany protokołu informacji, z którym przyszło to zapytanie, np. HTTP/1.0

<!--#echo var="SERVER_PROTOCOL" -->

SERVER_PORT

Port, pod którym serwer odpowiada

<!--#echo var="SERVER_PORT" -->

REQUEST_METHOD

Sposób zapytania dla obecnego dokumentu. Dla HTTP jest to GET, HEAD i POST.

<!--#echo var="REQUEST_METHOD" -->

PATH_INFO

Skrypty mogą być dostępne przez ich wirtualną ścieżkę, (bazującą na katalogu głównym), na końcu której klient może podać dodatkowe informacje.

<!--#echo var="PATH_INFO" -->

PATH_TRANSLATED

Podaje te same informacje co zmienna wyżej, ale zamienia je z lokalizacji wirtualnej na fizyczną.

<!--#echo var="PATH_TRANSLATED" -->

SCRIPT_NAMEWitrualna ścieżka do aktualnie wykonywanego skryptu.

<!--#echo var="SCRIPT_NAME" -->

QUERY_STRING

To jest tekst z końca adresu internetowego, po znaku ?, np.:

http://www.serwer.pl/katalog/plik.html?tekst_query_string

<!--#echo var="QUERY_STRING" -->

Wygląda to całkiem nieĄle, ale gdzie zastosowanie praktyczne? Podam jeden przykład, niezbyt użyteczny, ale na początek musi wystarczyć.

Na jednej stronie ustaw odnośnik do pliku color.html w ten sposób:

<a href="color.html?green">color</a>

Teraz stwórz plik color.html wstawiając w niego poniższy kod. Dyrektywy wstawiaj do pliku color.html a nie tego, w którym masz odnośnik.

<!--#set var="color" value="QUERY_STRING" -->

<font size=" 2" face="Verdana, Tahoma" color=
"<!--#echo var="color" -->">
<!--#echo var="QUERY_STRING" --></font>

Gdy teraz wywołasz plik color.html przez odnośnik na innej stronie zobaczysz słowo "green" w kolorze zielonym. Gdybyś wywołał ten plik bez żadnych parametrów nie zobaczyłbyś nic. Zawartością tej strony jest jedno słowo występujące po znaku zapytania w adresie. Gdyby adres był <a href="color.html?blue"> zobaczyłbyś słowo "blue" w kolorze niebieskim.

REMOTE_HOST

Nazwa komputera klienta wysyłającego zapytanie.

<!--#echo var="REMOTE_HOST" -->

REMOTE_ADDR

Adres IP klienta wysyłającego zapytanie.

<!--#echo var="REMOTE_ADDR" -->

AUTH_TYPE

Metoda sprawdzania tożsamości wykorzystana do rozpoznania użytkownika

<!--#echo var="AUTH_TYPE" -->

REMOTE_USER

Jeżeli strona jest chroniona, to jest to nazwa użytkownika, który się zalogował.

<!--#echo var="REMOTE_USER" -->

REMOTE_IDENT

Dla serwerów, które obsługują metodę autoryzacji RFC 931 ta zmienna zwraca nazwę użytkownika klienta, wysłaną z serwera. Użycie tej zmiennej powinno być ograniczone tylko do logowania.

<!--#echo var="REMOTE_IDENT" -->

CONTENT_TYPE

To jest typ zawartości danych dla zapytań, które mają dołączone informacje takie jak HTTP POST i PUT.

<!--#echo var="CONTENT_TYPE" -->

CONTENT_LENGTH

Długość dołączonych informacji, podana przez klienta.

<!--#echo var="CONTENT_LENGTH" -->

HTTP_ACCEPT

Lista typów MIME, które przyjmie klient.

<!--#echo var="HTTP_ACCEPT" -->

HTTP_USER_AGENT

Oprogramowanie przeglądarki, której używa klient. Zwraca dane w formacie software/wersja biblioteka/wersja, np. MS Internet Explorer/5.50.4134.0600

<!--#echo var="HTTP_USER_AGENT" -->

HTTP_REFERER

URL dokumentu, który zawierał odnośnik do tej strony.

<!--#echo var="HTTP_REFERER" -->

OK, tyle tego wystarczy bo sam zanudzę się na śmierć. Dobrze jednak mieć całą listę by w odpowiednim momencie móc znaleĄć potrzebna zmienną. Czas na dalsze dyrektywy.

Fsize wyświetla rozmiar określonego pliku. Format w jakim rozmiar zostanie wyświetlony może być określony przez użycie dyrektywy config w połączeniu z parametrem sizefmt. Fsize jest podobny do polecenia include ponieważ przyjmuje zarówno parametr file jak i virtual. Pamiętaj, virtual pozwala wyświetlić rozmiar pliku umieszczonego gdziekolwiek na serwerze, nie tylko tego nad którym obecnie pracujesz.

<!--#fsize file="index_temporary.html" -->

flastmod

Flastmod wyświetla datę kiedy określony plik został ostatnio zmodyfikowany. Format w jakim data zostanie wyświetlona może być określony przez użycie dyrektywy config w połączeniu z parametrem timefmt. Fsize jest podobny do polecenia include ponieważ przyjmuje zarówno parametr file jak i virtual. Pamiętaj, virtual pozwala wyświetlić datę pliku umieszczonego gdziekolwiek na serwerze, nie tylko tego nad którym obecnie pracujesz.

<!--#config timefmt="%A, %d %B, roku %Y" -->
<!--#flastmod file="file.html" -->

Oto pozyteczny trick, który pozwoli wyświetlić daty ostatnich modyfikacji plików ze spisu treści. Po prostu dodaj poniższą linię z odpowiednią ścieżką po każdym odnośniku.

<!--#config timefmt=" %B  %d, %Y" -->
<a href="/katalog/plik.html">Plik</a>
<!--#flastmod virtual="/katalog/plik.html" --><br>
<a href="/inny_katalog/inny_plik.html">Inny Plik</a>
<!--#flastmod virtual="/inny_katalog/inny_plik.html" -->

Co wyświetli:
Plik April 19, 2000
Inny Plik January 08, 2000

Wygląda to na mnóstwo pracy przy dwóch odnośnikach ale pomnóż odnośniki razy dwadzieścia i pomyśl, że wszystkie są modyfikowane regularnie, i trzeba zmieniać daty. Łatwo więc zorientować się jak wykorzystanie flastmod ułatwia życie.

exec

To polecenie wykonuje skrypt CGI lub polecenia shella. Musi zostać uruchomione aby być wykorzystywane. Dostępne parametry to:

cmd wykona polecenie shella wykorzystując /bin/sh.

cgi wykonuje skrypt CGI. Poniższe polecenie umieści w tym miejscu licznik na stronie, przyjmując, że counter.pl to skrypt licznika znajdujący się w katalogu cgi-bin.

<!--#exec cgi="/cgi-bin/counter.pl" -->

To właściwie wszystko jeśli chodzi o podstawową wersję SSI. Jednakże eXtended SSI Apache'a to zupełnie nowy świat, czekający na odkrycie. Oto kilka miejsc, gdzie można go znaleĄć.

Apache Week - Using Server Side Includes
W3C - Server Side Include commands
Apache: The Definitive Guide Chapter 10: Server Side Includes
Webmonkey - The Fundamentals of XSSI
Webmonkey - Using XSSI Variables
Webmonkey - Backend Apache/XSSI

oceń artykuł: Kiepski 1 2 3 4 5 Doskonały
 
projekt i multimedia
programowanie
marketing
strategie prowadzenia
infrastruktura
praca