Good idea thanks!
----- Original Message -----
>From: "Dan Muey" <[EMAIL PROTECTED]>
>To: "Mr. Horace Franklin Jr." <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
>Sent: Friday, March 07, 2003 10:37 AM
> Subject: RE: CG I Script [guestbook.cgi]
>
>
>
>
> >
> > I 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]
>
>
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]