!

Dette materialet blir ikke lenger vedlikeholdt. Du vil finne oppdatert materiale på siden: http://borres.hiof.no/wep/

SSI
shtml
Treffteller
Børre Stenseth
Eksempler >Treffteller

Treffteller

Hva
Bruk av SSI for å telle antall besøkende på en webside

SSI (Server Side Include) er en variant av CGI. I stedet for at vi kaller opp et script fra en side som er lastet opp i nettleseren, så sørger tjeneren for å utføre scriptet i det siden sendes. Det scriptet produserer blir inkludert i den siden som sendes over fra tjeneren. Det er vanlig å sette opp tjeneren slik at sider av typen .shtml undersøkes med tanke på om de inneholder en forespørsel om å få utført et script.

Nedenfor finner du en typisk SSI-løsning: En teller som teller opp antall oppslag på en side og merker siden med antallet.

Løsningen er ganske generell og lager automatisk nye tellere for hver side som melder seg på for å bli talt. Løsningen er lite raffinert siden den ikke skiller mellom hvor de besøkende kommer fra og gjør heller ikke noe notat av når treffet skjer. Hovedkomponenten er et Python-script som:

  • finner ut hvilken side som skal "telles". Dette gjøres ved å bruke: os.environ['DOCUMENT_URI'].
  • ut av denne verdien lages et filnavn ved å erstatte alle tegn som ikke er bokstaver med _.
  • dersom fila ikke finnes fra før lages den med 4 kommaseparerte verdier: år, måned, dag , antall treff(=0).
  • Dersom fila finnes oppdateres antall treff med +1.
  • De 4 verdiene returneres, printes. Det betyr at de legges som en del av den siden som tjeneren sender.

En side som ønsker å benytte seg av en slik teller inkluderer følgende:

  <!--#exec cgi="../cgi-bin/hitcount/hitcounter.py" -->
  

forutsatt at scriptet heter hitcounter.py og at det er plassert som angitt relativt til siden som skal "telles". Filene som inneholder telledata legges i en egen katalog som scriptet kjenner stien til.

Scriptet hitcounter.py ser slik ut:

#! /usr/bin/python
import os,string,datetime
import cgitb; cgitb.enable()
print 'Content-type: text/html\n'
#------------------------------------
# HITCOUNTER
# Making and using a file based on DOCUMENT_URI for each counted page
# Each file has the following contet:
# start-year,start-month,start-day,count
# include something like this in the page that should be counted:
#     <!--#exec cgi="../cgi-bin/hitcount/hitcounter.py" -->
# The page should have extension : .shtml
# Relative catalog for data
# each using page will get its own file in this catalog
localCat='../../countdata/'
# pick up the filename we will deal with
fileName=os.environ['DOCUMENT_URI']
# replace all non-letters with underscore
temp=fileName
for ix in range(0,len(temp)-1):
    if not (temp[ix] in string.letters):
        fileName=string.replace(fileName, temp[ix], '_')
filename=localCat+fileName
# if this file does not exist, we must establish it
txt=''
if not os.path.exists( filename):
  now=datetime.date.today()
  txt='%s,%s,%s,0'%(now.year,now.month,now.day)
else:
  try:
    file=open(filename,'r')
    txt=file.read()
    file.close()
  except:
    # something went wrong
    txt='1814,5,17,0'
# pick up commaseparated pieces of the text
elts=string.split(txt,',')
count=int(elts[3])+1
elts[3]=str(count)
# return the message. change according to format wanted
months=['januar','februar','mars','april','mai','juni',
        'juli','august','september','oktober','november','desember']
print '%s treff siden %s. %s %s'%(elts[3],elts[2],months[int(elts[1])-1],elts[0])
# write back
txt='%s,%s,%s,%s'%(elts[0],elts[1],elts[2],elts[3])
try:
  outfile=open(filename,'w')
  outfile.write(txt)
  outfile.close()
except:
  print 'Error writing file: '+filename
Du kan se et eksempel på bruk her http://www.it.hiof.no/~borres/dw/ssi/telleeksempel.shtml

Installasjon

Hvis du vil installere en slik teller:

  • kopier Python-koden ovenfor og plassere den i din cgi-bin katalog, eller en underkatalog. ( pass på rettigheter og format )
  • etabler en katalog, f.eks. countdata utenfor cgi-bin katalogen og oppdatere stien i scriptet.
  • inkluder noe slikt som: <!--#exec cgi="../cgi-bin/hitcount/hitcounter.py" --> i de filene du ønsker å telle. Husk at de skal ha typen .shtml.
Referanser
Den aktuelle koden og bruken går fram av siden.
Vedlikehold
B.Stenseth, januar 2004
( Velkommen ) Eksempler >Treffteller ( Veggavis )