>
> Clear DayI tired to run the script below on my host server
> and it would not run. The server cannot find Taintcheck or
> Timefuncs. I uploaded these pm file to the server. What did
You don't simply upload the pm files they have to be instsalled
On the server.
Perl -MCPAN -e shell
CPAN> Install Whatever
I'd recommend visiting cpan.org to learn about how this is done. It really quite
simple and fast.
Dmuey
> I do wrong? Is Apache the problem?
>
> SERVER INFORMATION:
> Path to Perl: /usr/local/bin/perl
> Path to Sendmail: /usr/sbin/sendmail
> Path to home directory: /home/horace-f
> Path to Date: /bin/date
> What Operating System are we using? RedHat Linux
> What Web Server Software is running on the server? Apache 1.3
>
> SCRIPT:
> #!/usr/bin/perl -wT
> #####################
> # guestbook.cgi #
> #####################
>
> $ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin';
> ## $ENV{'SHELL'} = '/bin/sh';
> $ENV{'ENV'} = '';
> $ENV{'IFS'} = '';
>
> use lib '/home/horace-f/perl_lib';
>
> use Taintcheck;
> use Timefuncs;
> use CGI;
> use strict;
> use vars qw($__START__ $CGI $GUESTBOOK);
>
> ####################################
> # Paths Guestbook CGI & HTML files #
> ####################################
>
> $CGI = "guestbook.cgi";
> $GUESTBOOK= "/home/horace-f/public_html/guestbook.txt";
>
> eval { main() }; $__START__ = __LINE__;
>
> if ($@) {
> chomp($@);
>
> $@ =~ s/\(eval\) line (\d+)/${CGI} . " line " . ($__START__-$1-1)/e;
> $@ =~ s/( at ).*( line )/$1${CGI}$2/;
>
> my $error_message = $@;
>
> print <<ERR
> Content-type: text/html
> <html>
> <head><title>Error</title></head>
> <body>
> <h1>Error</h1><br>\n
> <code>$error_message</code>
> </body>
> </html>
> ERR
>
> }
>
> exit(0);
>
> ############
> # MAIN #
> ############
>
> sub main {
> my $q = new CGI;
>
> if ($q->param()) {
> add_entry($q);
> }
> else {
> display_guestbook($q);
> }
> }
>
> #####################################################
> # subroutines
> #
> # in: CGI object
> #
> # out:
> #
> # Description:
> #
> # Reads the guestbook file & prints it as html
> #
> #####################################################
>
> sub display_guestbook {
> my $q = shift;
> my ($html,$e,$num_entries,$entries,$cookie,$thanks);
>
> $html = $q->header . $q->start_html("My Guestbook");
>
> $html .= $q->h1("Guestbook");
>
> open (GB, "<$GUESTBOOK") || die "Unable to read guestbook
> file " . "'$GUESTBOOK' (error: $!). " . "Please try again
> later, or contact " . "the webmaster of this site for assistance";
>
> ########################################
> # get a read lock on the guestbook #
> ########################################
>
> lock_filehandle(\*GB, 'R');
>
> ####################################
> # read and process the entries #
> ####################################
>
> while (!eof(GB)) {
> my $e = new CGI(\*GB);
> $num_entries++;
> $entries .= draw_guestbook_entry($e);
>
> ###############################################
> # Here's where things get 'spooky': If the user has signed #
> # the guestbook, she'll have a cookie set that will tell us #
> # when she signed it.
> #
> ###############################################
>
> if ($e->param('cookie') == $q->cookie('sg_signed_at')) {
> $thanks = "<p>Hello, <b>" . $e->param('name') .
> "</b>! Thanks for signing my guestbook on " .
> date_string($e->param('cookie')) . "</p>\n";
> }
> }
>
> close (GB);
>
> ################################################
> # Insert the count of entries, and the entries themselves, into #
> # the html page
> #
> #################################################
>
> if ($num_entries) {
> $html .= "<p>Signed $num_entries time" .
> (($num_entries > 1) && ("s"));
> $html .= " · Last signed " .
> date_string( (file_stats( $GUESTBOOK ))[0] );
> $html .= $thanks if $thanks;
> $html .= $entries . "</p>;
> }
> else {
> $html .= "<h3>No entries!</h3><hr>";
> }
>
> $html .= &entry_form($q);
> $html .= $q->end_html;
>
> print $html;
> }
>
> ###############################################
> # in: CGI object
> #
> # out:
> #
> # Description:
> #
> # Adds entry to guestbook file, then prints guestbook html #
> # Also sets a cookie with the current time
> #
> ###############################################
>
> sub add_entry {
> my $q = shift;
> my ($name,$email,$homepage,$msg,$entry,$url,$cookie);
>
> $url = $q->url;
>
> ###########################################
> # it's often easier to access parameters than cookies, #
> # so save the value here first
> #
> ###########################################
>
> $q->param('cookie', time);
>
> ################################################
> # then create a cookie, which we'll put in the outgoing #
> # http header
> #
> ################################################
>
> $cookie = $q->cookie( -name=>'sg_signed_at',
> -value=>$q->param('cookie') );
> untaint_params($q);
>
> #############################################
> # write the submission to the guestbook #
> #############################################
>
> open (GB, ">>$GUESTBOOK") || die "Unable to write to
> guestbook (error: $!). " . "Please try again later, or
> contact the webmaster " . "of this site for assistance";
>
> #########################################
> # get a write lock on the guestbook #
> #########################################
>
> lock_filehandle(\*GB, 'W');
>
> $q->save(\*GB);
>
> ###################################################
> # closing automatically removes the file lock
> #
> ###################################################
>
> close GB;
>
> ########################################################
> # say thanks, with a link back to the questbook
> #
> # here's where the cookie actually gets set on the
> #
> # user's computer
> #
> ########################################################
>
> print $q->header( -cookie=>$cookie ),
> $q->start_html("Thanks"),
> $q->h1("Thanks!"),
> $q->h3("Your message has been added to my guestbook."),
> $q->p,
> $q->a({href=>$q->url}, "Go back to the guestbook"),
> $q->end_html;
> }
>
> ###########################################
> # in: guestbook entry #
> # out: guestbook entry in html format #
> # description: #
> # Format a guestbook entry as html #
> ###########################################
>
> sub draw_guestbook_entry {
> my $entry = shift;
> my $author;
>
> ##################################################
> # import the params into a namespace, for easy
> #
> # interpolation below.
> #
> ##################################################
>
> $entry->import_names('E');
>
> ##################################################
> # include email & homepage links, if present
> #
> ##################################################
>
> $author = $E::name;
> if ($E::email =~ /(.*?)@((.*?)\.)+.*/) {
> $author = qq|<a href="mailto:$E::email">$E::name</a>|;
> }
>
> if ($E::homepage) {
>
> ######################################################
> # make sure the homepage url begins with http://
> #
> ######################################################
>
> $E::homepage =~ s|^(http://)*(.*)$|http://$2|;
> $author .= qq| (<a href="$E::homepage">$E::homepage</a>)|;
> }
> return <<ENTRY;
> <p><b>$author</b>
> <br/>$E::message</p>
> <hr/>
> ENTRY
>
> }
>
> sub entry_form {
> my $q = shift;
> my $url = $q->url;
>
> my $form = <<E_FORM;
> <h3>Sign My Guestbook:</h3>
> <form action="$url" method="post">
> <p><b>Name</b>: <input type="text" name="name"/></p>
> <p><b>E-mail</b>: <input type="text" name="email"/></p>
> <p><b>Homepage</b>: <input type="text" name="homepage"/></p>
> <p><b>Message</b>:</p> <p><textarea cols="30" rows="6"
> wrap="virtual" name="message"></p> <p>Type your message here.
> </textarea> <input type="submit"></p> </form> E_FORM
>
> $form;
> }
>
> ##############################################################
> #########
> # lock_filehandle
>
> #
> # in: filehandle
>
> #
> # out:
>
> #
> # description: flock()s a filehandle, for concurrency-safe
> access #
> ##############################################################
> #########
>
> sub lock_filehandle {
> my $fh = shift;
> my $lock = shift;
>
> use Fcntl qw(:flock);
>
> my $lock_code;
>
> if ($lock =~ /^r/i) {
> $lock_code = LOCK_SH;
> } elsif ($lock =~ /^w/i) {
> $lock_code = LOCK_EX;
> } else {
> $lock_code = LOCK_UN;
> }
>
> #########################
> # give it two tries #
> #########################
>
> unless (flock ($fh, $lock_code | LOCK_NB)) {
> unless (flock($fh, $lock_code)) {
> die "flock: could not get $lock lock on $GUESTBOOK";
> }
> }
>
> return 1;
> }
>
>
>
>
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]