#!/usr/bin/perl # original skript: Shishir Gundavaram, shishir@ora.com # z knihy CGI programovanie webovskych stranok a aplikacii # vyslo u O'Reilly(tm) # cesky preklad ComputerPress, ISBN80-7226-088-X # slovensky kometar: Svatoslav Straka, straka@developer.sk $webmaster = "straka\@developer\.sk"; $method = $ENV{'REQUEST_METHOD'}; $script = $ENV{'SCRIPT_NAME'}; $query = $ENV{'QUERY_STRING'}; $document_root = $ENV{'DOCUMENT_ROOT'}; # $guest_file - relativna cesta k suboru s odkazmi $guest_file = "/guestbook.html"; $full_path = $document_root . $guest_file; # $exclusive_lock a $unlock maju vyznam len na systemoch na ktorych # je implementovany prikaz flock, na Windows nie! $exclusive_lock = 2; $unlock = 8; if ($method eq "GET") { if ($query eq "add") { $date_time = &get_date_time(); # Tu si mozete zvolit nazov pre Vas guestbook &MIME_header ("text/html", "Developer Zone Guestbook"); # popis ku guestbooku a vytvorenie formulara pre pridavanie odkazov print < Momentalne je: $date_time
Meno:       
E-mail:     
WWW Server: 

Sem napiste Vas odkaz:



End_Of_Guestbook_Form } else { if ( open(GUESTBOOK, "<" . $full_path) ) { # pokym Vas system nepozna prikaz flock, odpoznamkujte # nasledujuci riadok! flock (GUESTBOOK, $exclusive_lock); # Mozete si zvolit nadpis pre stranku, na ktorej budu # vypisane odkazy &MIME_header ("text/html", "Tu je guestbook!"); print <Pridaj odkaz
Pridanie_Odkazu while () { print; } # pokym Vas system nepozna prikaz flock, odpoznamkujte # nasledujuci riadok! flock (GUESTBOOK, $unlock); close(GUESTBOOK); } else { &return_error (500, "Guestbook File Error", "Cannot read from the guestbook file [$full_path]."); } } } elsif ($method eq "POST") { if ( open (GUESTBOOK, ">>" . $full_path) ) { # pokym Vas system nepozna prikaz flock, odpoznamkujte # nasledujuci riadok! flock (GUESTBOOK, $exclusive_lock); $date_time = &get_date_time(); &parse_form_data (*FORM); # Ak uzivatel nezada svoje meno, doplni sa "Anonym" $FORM{'name'} = "Anonym" if !$FORM{'name'}; $FORM{'from'} = $ENV{'REMOTE_HOST'} if !$FORM{'from'}; $FORM{'comments'} =~ s/\n/
/g; print GUESTBOOK < $date_time:
Odkaz pridal $FORM{'name'}, $FORM{'from'}:

$FORM{'comments'} End_Of_Write if ($FORM{'www'}) { print GUESTBOOK < $FORM{'name'} je dostupny aj cez: $FORM{'www'} End_of_Web_Address } print GUESTBOOK "


"; # pokym Vas system nepozna prikaz flock, odpoznamkujte # nasledujuci riadok! flock (GUESTBOOK, $unlock); close(GUESTBOOK); # Nadpis pre stranku s podakovanim &MIME_header ("text/html", "Dakujeme!"); # podakovanie za pridanie odkazu print <sem. End_of_Thanks } else { &return_error (500, "Guestbook File Error", "Cannot write to the guestbook file [$full_path]."); } } else { &return_error (500, "Server Error", "Server uses unsupported method"); } exit(0); sub MIME_header { local ($mime_type, $title_string, $header) = @_; if (!$header) { $header = $title_string; } print "Content-type: ", $mime_type, "\n\n"; print "", "\n"; print "", $title_string, "", "\n"; print "", "\n"; print "

", $header, "

"; print "
"; } sub get_date_time { local ($months, $weekdays, $ampm, $time_string); $months = "januar/febraur/marec/april/maj/jun/jul/" . "august/september/oktober/november/december"; $weekdays = "Nedela/Pondelok/Utorok/Streda/Stvrtok/Piatok/Sobota"; local ($sec, $min, $hour, $day, $nmonth, $year, $wday, $yday, $isdst) = localtime(time); if ($hour > 12) { $hour -= 12; $ampm = "pm"; } else { $ampm = "am"; } if ($hour == 0) { $hour = 12; } $year += 1900; $week = (split("/", $weekdays))[$wday]; $month = (split("/", $months))[$nmonth]; $time_string = sprintf("%s, %s. %s %s - %02d:%02d:%02d %s", $week, $day, $month, $year, $hour, $min, $sec, $ampm); return ($time_string); } sub parse_form_data { local (*FORM_DATA) = @_; local ( $request_method, $post_info, @key_value_pairs, $key_value, $key, $value); read (STDIN, $post_info, $ENV{'CONTENT_LENGTH'}); @key_value_pairs = split (/&/, $post_info); foreach $key_value (@key_value_pairs) { ($key, $value) = split (/=/, $key_value); $value =~ tr/+/ /; $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg; if (defined($FORM_DATA{$key})) { $FORM_DATA{$key} = join ("\0", $FORM_DATA{$key}, $value); } else { $FORM_DATA{$key} = $value; } } } sub return_error { local ($status, $keyword, $message) = @_; print "Content-type: text/html", "\n"; print "Status: ", $status, " ", $keyword, "\n\n"; print <CGI Program - Unexpected Error

$keyword


$message Please contact $webmaster for more information. End_of_Error exit(1); }