Shell Bsh / Cgi Programmierung
 
StartSeite | ShellBsh/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Nachfolgend CGI-Scripting mit bsh (ShellBsh).

Es sind Ausschnitte aus einem realen Webcounter-System.
Diese Beispiele sind noch recht anspruchslos.


 Conv()  {
    local h=0000 z=00
    conv -'t+ ' $1
    while expr "${{1}" :h '%%%([a-fA-F0-9]%{2%}%)'
    do
       base -16 h +b z
       expr "${{1}" :$1 '%%'$h += "$z"
    done
    return 0
 }
 
 # Aufruf:
 Conv POSTstring


Das folgende Script ist ein Download-Registrierer, der zwischengeschaltet ist.
Die Namen der Dateiquellen enthalten eine verfremdende vorgesetzte Zeichenkette. Darauf wird jeweils ein Link gesetzt, der für den httpd-Server maßgebend ist. (Location:) Die Linknamen sind durch Sekunden-String und Prozeß-ID einzigartig und werden ab einem bestimmten Alter gelöscht, und zwar von diesem Script selbst. Zum Löschen sind also keine cron-Läufe notwendig.
Vorteile:
Die Inhalte werden nicht kopiert.
Der Browser bietet nicht den Script-Namen (get.pl) zum Speichern an, sondern einen individuellen Namen.

 #!/usr/bin/bsh
 
 set -f
 
 deroot="$DOCUMENT_ROOT/de"
 expr "$deroot" :deroot '/de/de' '/de'
 
 arg="$QUERY_STRING"
 ok=0
 expr "$arg" :zn '^%([0-9]%{1,2%}%.[0-9]%{1,3%}%):.' && {
    expr "$arg" :nam ':%(..*%)$' || nam=
    expr "$nam" =:nam '%%2f' += '/'
    expr "$nam" :dir '^%(.*/%)[^/]*$' || dir=
    expr "$nam" :nam '%([^/]*%)$' || nam=
    expr "$nam" :erw '%.%([^/.]%{1,%}%)$' || erw=
    pre=XXXXXXXXXX
    [ -s "$dir$pre$nam" ] && ok=1
 }
 
 [ ok -eq 0 ] && {
    echo "Content-type: text/plain%n"
    exit 0
 }
 
 HTTP_REFERER="$HTTP_REFERER::$dir$nam"
 export HTTP_REFERER
 
 expr "$REMOTE_ADDR" :: '127%.0%.0%.' || extern icnt.pl $zn.i0
 
 ifset erw || erw=bin
 conv -l erw
 ctyp=text/plain
 
 case "$erw" in
   shtml|html|htm|php3)  ctyp=text/html ;;
   txt|bsh|pl|text)      ctyp=text/plain ;;
   exe|bin|zip|gz|tar|drv|z|obj|o)
                         ctyp=application/octet-stream ;;
   gif)                  ctyp=image/gif ;;
   jpg|jpeg)             ctyp=image/jpeg ;;
   *)                    ctyp=text/plain ;;
 esac
 
 systime Time
 cd "$deroot"
 set +f
 for lkn in *[0-9][0-9]_[0-9]*
 do
    expr "$lkn" :time '^%([0-9]%{8,10}%)_[0-9]%{1,}_' || continue
    let "Time-time>400" && remove "$lkn"
 done
 set -f
 cd -
 
 http_lkn="${Time}_$$_$nam"
 lkn="$deroot/$http_lkn"
 [ -e "$lkn" ] && remove "$lkn"
 link "$dir$pre$nam" "$lkn"
 
 clen=0
 fstat -sv clen "$dir$pre$nam"
 
 Out="Content-Type: $ctyp
 Location: ../$http_lkn
 Content-Length: $clen
 
 "
 
 catv Out
 
 exit 0


KategorieProgrammierBeispiele
StartSeite | ShellBsh/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 21. September 2002 18:08 (diff))
Suchbegriff: gesucht wird
im Titel
im Text