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

Veränderung (letzte Änderung) (keine anderen Diffs, Normalansicht)

Verändert: 1c1,114
Beschreibe hier die neue Seite.
Nachfolgend CGI-Scripting mit bsh (ShellBsh).


Es sind Ausschnitte aus einem realen Webcounter-System.

Diese Beispiele sind noch recht anspruchslos.




[[Code]
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.

[[Code]
#!/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

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