Kirjoittaja: k-mikko (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.
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.
SSI osaa myös käsitellä muuttujia alkeellisella tasolla. Ympäristömuuttujia ovat:
DATE_GMT | GMT-aika. |
DATE_LOCAL | Paikallinen aika. |
DOCUMENT_NAME | Haettu tiedostonimi (esim. index.shtml). |
DOCUMENT_URI | Haettu tiedostonimi. Lisäksi polku palvelimen juurihakemistosta, eli siis www.sivu.com/testit/index.shtml palauttaisi /testit/index.shtml |
LAST_MODIFIED | Ajankohta, jolloin tiedostoa viimeksi muokattiin. |
USER_NAME | Tiedoston 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" -->
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.
Seuraavia asetuksia voidaan muuttaa syntaksilla
<!--#config jotain="arvo" -->
errmsg | Virheilmoitus, joka lähetetään, jos jossain on virhe. |
sizefmt | Muoto, 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. |
timefmt | Ajan esittämisen muoto. Esim. timefmt="%A %B %d, %Y" |
Tiedoston koko ilmoitetaan syntaksilla
<!--#fsize virtual="tiedostonimi" -->
Äsken mainittu sizefmt-asetus vaikuttaa tiedostokoon esittämismuotoon.
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:
muuttuja
(tosi, jos muuttuja ei ole tyhjä)muuttuja1 = muuttuja2
muuttuja1 != muuttuja2
muuttuja1 < muuttuja2
muuttuja1 <= muuttuja2
muuttuja1 > muuttuja2
muuttuja1 >= muuttuja2
( ehto )
(tosi, jos ehto on tosi)! ehto
(tosi, jos ehto on epätosi)ehto1 && ehto2
(tosi, jos molemmat ehdot tosia)ehto1 || ehto2
(tosi, jos jompikumpi ehdoista on tosi)Ville Pekka Koivuranta, 4.11.2003
Noniin saatiinhan tänne tällainenkin, paitsi tekstit menevät yli reunan : cellspacingia!
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.
Hyvä opas, mutta... $-merkin käytön esimerkki: siinä on /$100, eikö sen pitäisi olla \$100?
Jep. Laitoin näköjään epähuomiossa väärin päin.
<!--#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" ?
Kyllä se on ihan elif
eikö oo sama hoitaa koko roska phpllä?
<?php
include ("ylaosa.php");
?>
?
"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?
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 -->
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.