Kirjautuminen

Haku

Tehtävät

Opasarkisto: SSI-opas: SSI-opas

Kirjoittaja: k-mikko. Vuosi: 2003.

Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi.

Apache-palvelimen SSI-ominaisuus (Server Side Includes) on hyödyllinen, kun sivustolla on esimerkiksi samanlainen navigointipalkki jokaisella sivulla. Kun esimerkkipalkkiin pitäisi saada yksi linkki lisää, pitää se tehdä joka sivulle erikseen. Tämähän se vasta tylsää ja turhauttavaa on. SSI:n ansiosta yhden tiedoston muuttaminen riittää.

Ensimmäiseksi sinun tulee huolehtia siitä, että SSI on toiminnallinen (kts. Apachen asennusopas). Tämän jälkeen voidaan siirtyä asiaan.

Sivujen sisällyttäminen

SSI:n perustoiminto, sivujen sisällyttäminen (include), onnistuu seuraavalla HTML-koodin sekaan lisättävällä tekstinpätkällä:

<!--#include virtual="sivun tiedostonimi" -->

eli siis vaikkapa

<!--#include virtual="ylaosa.html" -->

Tiedoston tyypillä ei ole merkitystä, eli sivulle voi sisällyttää esimerkiksi php-tiedostoja.

Muuttujat

SSI osaa myös käsitellä muuttujia alkeellisella tasolla. Ympäristömuuttujia ovat:

DATE_GMTGMT-aika.
DATE_LOCALPaikallinen aika.
DOCUMENT_NAMEHaettu tiedostonimi (esim. index.shtml).
DOCUMENT_URIHaettu tiedostonimi. Lisäksi polku palvelimen juurihakemistosta, eli siis www.sivu.com/testit/index.shtml palauttaisi /testit/index.shtml
LAST_MODIFIEDAjankohta, jolloin tiedostoa viimeksi muokattiin.
USER_NAMETiedoston omistajan/luojan nimi.

Muuttujien tulostus hoituu seuraavalla syntaksilla:

<!--#echo var="muuttujan nimi" -->

Esim.

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

Muuttujia voi myös itse asettaa ja tämä hoituu set-direktiivillä:

<!--#set var="Muuttujan nimi" value="Muuttujan arvo" -->

Jos muuttujan arvo pitää sisällyttää toisen muuttujan "sisään", tulee tämä tehdä, kuten seuraavassa esimerkissä:

<!--#set var="Tervehdys" value="Hei, tulit sivulle, jota on viimeksi muokattu ${LAST_MODIFIED}" -->

Palvelin tunnistaa muuttujan, jos sen nimen edessä on dollarinmerkki ($). Koska muuttuja pitää joskus sijoittaa muiden merkkien välittömään läheisyyteen, on parempi tehdä homma selväksi palvelimelle rajoittamalla muuttujan nimi aaltosulkuihin, jättämällä $-merkki sulkujen eteen.

Jos muuttujan arvoksi pitää saada vaikkapa "sata dollaria", eli $100, voi sen tehdä laittamalla kenoviivan $-merkin eteen, jottei palvelin sekoita lukua muuttujaan.

<!--#set var="Tervehdys" value="Moi, minulla on rahaa /$100" -->

Komentojen suorittaminen

SSI pystyy ajamaan palvelimella komentoja seuraavan pätkän avulla.

<!--#exec cmd="Komento" -->

Tällä voi kätevästi listata kansion sisällön (UNIX-koneella).

<!--#exec cmd="ls" -->

Jos kyseessä on sivu, jonka sisältöön käyttäjät voivat vaikuttaa, kuten vieraskirja tai forum, on suotavaa, että siinä missä SSI yleensä asetetaan päälle .htaccess-tiedostossa tai Apachen konfiguraatiotiedostossa rivillä

Options Includes

hoidetaan se tällä kertaa rivillä

Options IncludesNOEXEC

jolloin mahdollisen aukon löytyminen ei takaa sitä, että käyttäjät pääsisivät ajelemaan ties mitä palvelimella.

Asetusten muuttaminen

Seuraavia asetuksia voidaan muuttaa syntaksilla

<!--#config jotain="arvo" -->
errmsgVirheilmoitus, joka lähetetään, jos jossain on virhe.
sizefmtMuoto, jossa tiedoston koko ilmoitetaan (kts. alemmas). Jos arvo on bytes, ilmoitetaan koko tavuina, jos arvo on abbrev, ilmoitetaan koko joko kilo-tai megatavuina, riippuen tiedoston koosta.
timefmtAjan esittämisen muoto. Esim. timefmt="%A %B %d, %Y"

Tiedostokoon ilmoittaminen

Tiedoston koko ilmoitetaan syntaksilla

<!--#fsize virtual="tiedostonimi" -->

Äsken mainittu sizefmt-asetus vaikuttaa tiedostokoon esittämismuotoon.

Ehtolause

Syntaksi on seuraavanlainen:

<!--#if expr="Se on sitä" -->
	...tee jotain
<!--#elif expr="Se on tätä" -->
	...tee jotain muuta
<!--#else -->
	...Ja niin edelleen
<!--#endif -->

Ehtoja:

Ville Pekka Koivuranta, 4.11.2003

Kommentit

makeuu [06.11.2003 19:22:16]

Lainaa #

Noniin saatiinhan tänne tällainenkin, paitsi tekstit menevät yli reunan : cellspacingia!

k-mikko [06.11.2003 21:30:55]

Lainaa #

Tuo nimen kursivointi-tagi on näemmä jäänyt auki. Tuo reunan yli meneminen johtuu vaan siitä, että tein tuosta yhdestä esimerkistä vähän liian pitkän.

Quiz [07.11.2003 14:40:43]

Lainaa #

Hyvä opas, mutta... $-merkin käytön esimerkki: siinä on /$100, eikö sen pitäisi olla \$100?

k-mikko [07.11.2003 17:33:41]

Lainaa #

Jep. Laitoin näköjään epähuomiossa väärin päin.

T.M. [18.11.2003 14:47:37]

Lainaa #

<!--#if expr="Se on sitä" -->
	...tee jotain
<!--#elif expr="Se on tätä" -->
	...tee jotain muuta
<!--#else -->
	...Ja niin edelleen
<!--#endif -->

onko tossa kenties virhe: "elif" -> "elseif" ?

k-mikko [29.11.2003 22:38:24]

Lainaa #

Kyllä se on ihan elif

Miku [06.03.2005 21:38:58]

Lainaa #

eikö oo sama hoitaa koko roska phpllä?
<?php
include ("ylaosa.php");
?>


?

amakela [14.04.2005 15:19:54]

Lainaa #

"eikö oo sama hoitaa koko roska phpllä?"

En ole nyt ihan 100% varma tästä, mutta käyttää tuota php includea pitää sitä käyttää .php tiedostossa. Esim "www.paikka.fi/" on www.paikka.fi/index.html www.paikka.fi/index.php.

Voihan tämänkin tietysti confauksella järjestää. www.paikka.fi = www.paikka.fi/index.php ja silloin en näe varsinaista eroa?

tsuriga [27.10.2009 15:31:21]

Lainaa #

Tässäpä esimerkki dynaamisiin sivuihin, linkit muotoa index.shtml?<sivunnimi>.

index.shtml

<!--#config errmsg="The page you are looking for cannot be found" -->
<!--#include virtual="header.html" -->
<!--#if expr="${QUERY_STRING}" -->
  <!--#include virtual="${QUERY_STRING}.html" -->
<!--#else -->
  <!--#include virtual="main.html" -->
<!--#endif -->
<!--#include virtual="footer.html" -->

Huomio: Yllä oleva sallii ainakin kaikkien palvelimelta löytyvien ja käytettävissä olevien .html-päätteisten tiedostojen sisällytyksen, käytettäessä kannattaa noudattaa varovaisuutta omien tarpeiden mukaan.

Jos halutaan sallia vain juuri tiettyjen sivujen tuonti, if-rykelmä korvataan tällaisella:

<!--#if expr="${QUERY_STRING} = 'faq'" -->
  <!--#include file="faq.html" -->
<!--#elif expr="${QUERY_STRING} = 'about'" -->
  <!--#include file="about.html" -->
<!--#else -->
  <!--#include file="main.html" -->
<!--#endif -->

Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta