CGI-Beispiel: Zugriffszähler


Zum Text der Seite
Inhalt

Beispiel 1 - Der Counter (Zähler) des Kurses

Als einfaches Beispiel für ein CGI-Programm soll der Counter des Kurses dienen, obwohl Counter an sich relativ sinnlos sind (Nicht-Zählung gecachter Seiten und wenn doch gezählt, wissen Sie nicht, ob die Seite auch gelesen wurde).

Tab. 14: Ein Zugriffszähler
Ergebnis Realisierung
Counter Einbindung in der HTML-Datei:

<img src="http://pool.urz.uni-halle.de/cgi-bin/kurse/counter/counter.cgi?page=webdescgi">

bzw. mit eigenem CGI-Programm:

<img src="cgi-dir/cgi-programm?page=login">

  Quelltext des CGI-Programms (UNIX-Shell-Script):
#!/bin/sh
#---------------------------------------------------------------------------
#        counter.cgi v1.1 - einfacher Web-Counter
#        Aufruf: 
#                <img src="http://pool.urz.uni-halle.de/cgi-bin/\
#                    kurse/counter/counter.cgi?page=zaehlerdatei">
#
#        History:        22. 06. 01: Version 1.0
#                        16. 06. 04: Version 1.1: Pfadaenderung der 
#                                Programme vom NetPBM.
#
#        (C): U. Kehl URZ, Abt. Anwenderberatung
#
#---------------------------------------------------------------------------

##### HTTP-Header - als unbedingte Pflicht ! #####

echo "Content-Type: image/gif"
echo "Cache-Control: no-cache"
echo "Cache-Control: no-store"
echo "Expires: 0"
echo ""

##### Datei uebernehmen #####

if [ -n "$QUERY_STRING" ]           # ist QUERY_STRING nicht leer ? 
then 
        eval $QUERY_STRING          # name=wert aus QUERY_STRING uebernehmen 
else                                # keinee zaehlerdatei - wenigstens 0 
        /usr/bin/ppmtogif z0.pnm 2>/dev/null
        exit 0
fi 
if [ -z "$page" ]                   # falscher Parameter-Name oder name="" 
then
        /usr/bin/ppmtogif z1.pnm 2>/dev/null
        exit 0
fi

##### aktuellen Stand aus Datei lesen #####

count=`cat /tmp/$page.dat 2>/dev/null`
if [ -z "$count" ]; then 
        count=1
else 
        count=`expr $count + 1` 
fi
echo $count >/tmp/$page.dat

##### Ziffern bestimmen #####

z1=`expr $count / 100000`
count=`expr $count % 100000`
z2=`expr $count / 10000`
count=`expr $count % 10000`
z3=`expr $count / 1000`
count=`expr $count % 1000`
z4=`expr $count / 100`
count=`expr $count % 100`
z5=`expr $count / 10`
count=`expr $count % 10`
z6=$count

##### zusammensetzen des Bildes #####

/usr/bin/pnmcat -lr z$z1.pnm z$z2.pnm z$z3.pnm z$z4.pnm z$z5.pnm z$z6.pnm  \
        2>/dev/null | /usr/bin/ppmtogif 2>/dev/null

# Fertig #
exit 0

Vorgehensweise

  1. Ein Zugriffszähler muß immer automatisch aktualisiert und angezeigt werden.
  2. Die Browser laden Bilder und Objekte automatisch nach, alles Andere erfordert Nutzereingriff, deshalb Counter als Bild realisiert,
  3. Problem ist das Zusammensetzen des Bildes aus den notwendigen Ziffern,
  4. Lösung im Linux/UNIX:
    1. Installation des Paketes netpbm,
    2. Konvertierung der Ziffer-Bilder (pro Ziffer 0-9 ein GIF-Bild) in das pnm- (portable anymaps) Format,
    3. Verkettenung der Einzelbilder der Ziffern in ein neues PNM-Bild,
    4. Konvertierung in und Ausgabe der Ziffernkombination als GIF-Bild,
  5. Lösung in anderen *ixen:
    1. Paket netpbm holen und installieren,
    2. weiter wie in 3.
  6. GIF-Bild muß mit entsprechenden HTTP-Header und richtigen Mime-Type auf Standardausgabe ausgegeben werden,
  7. Wenn diese CGI-Programm gar nichts ausgibt, bleibt das unschöne Standardsymbol des Browsers für ein nichtvorhandenes Bild stehen,

Der Counter kann natürlich auch anders realisiert werden, z. B. über ein PHP-Programm direkt im HTML-Text, falls der Web-Server PHP unterstützt


Anfang
  Seitenanfang
 Trennstrich  ...Theorievorherige Seite  Trennstrich  nächste SeiteFormular...

Kurs Web-Design