you might want to 'use strict' and see what pops up :)

additionally, you might want to read up on mod_perl_traps.pod and 
http://perl.apache.org/guide/porting.html

specifically
http://perl.apache.org/guide/porting.html#Exposing_Apache_Registry_secret


HTH

--Geoff

> -----Original Message-----
> From: Rob Egan [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, June 28, 2000 6:38 PM
> To: [EMAIL PROTECTED]
> Subject: can't properly append to file from mod_perl script
> 
> 
> Hi,
> 
> I am relocating content from a non-mod_perl Apache site to a new
> mod_perl/1.24 enabled Apache server and I have a problems 
> getting one of the
> CGI scripts to behave in mod_perl. All it does is capture 
> e-mail addresses,
> and place them in a text file so we can gather them up later 
> and drop them
> into a database. If you run the script as a regular CGI 
> (without mod_perl
> enabled) it works great. But on the mod_perl enabled server, 
> the script
> throws garbage into the file and overwrites previous entries if a user
> submits more than one e-mail address in a single session 
> (i.e. they enter
> one address, click "Back", then enter another address). 
> However, if the user
> submits one e-mail address, then quits their browser, 
> restarts the browser
> and enters another e-mail, it works just fine. Does anybody 
> have any idea
> why this would happen? I've included the CGI script below 
> with actual URL's
> omitted (which was written by some consultant who no longer 
> works here).
> Thanks!
> 
> -Rob
> [EMAIL PROTECTED]
> 
> ---------begin script text
> #!/usr/local/bin/perl
> 
> $|=1;
> 
> # Enumerate the locking options for clarity...
> $LOCK_EX = 2;
> $LOCK_UN = 8;
> $results_file = "./results.csv";
> $cl = $ENV{'CONTENT_LENGTH'};
> $rqm = $ENV{'REQUEST_METHOD'};
> 
> sub lock {
>       # print "locking<BR>";
>       flock(RESULTS, $LOCK_EX);
>       # print "seeking<BR>";
>       # seeks to the end of the file in case
>       # someone got while we were waiting for the lock
>       seek(RESULTS, 0, 2);
>       # print "locked<BR>";
> }
> 
> sub unlock {
>       # print "unlocking<BR>";
>       flock(RESULTS, $LOCK_UN);
>       # print "unlocked<BR>";
> }
> 
> sub web_die {
> print "Location:  http://<omitted>";
> die("\n");
> }
> 
> sub web_die_action {
> print "Location:  http://<omitted>";
> die("\n");
> }
> 
> sub return_error
> {
>       local ($status, $keyword, $message) = @_;
> 
>       print "Content-type: text/html", "\n";
>       print "Status: ", $status, " ", $keyword, "\n\n";
> 
>       print <<End_of_Error;
> 
> <HTML><HEAD><TITLE>Unexpected CGI Error</TITLE></HEAD>
> <BODY>
> <H1>$keyword</H1>
> <HR>$message</HR>
> </BODY>
> </HTML>
> End_of_Error
>       exit(1);
> }
> sub write_entry
> {
>               # Lock after you open
>               &lock();
> 
>               $count = 0;
>               foreach (keys %FORM)
>               {
>                $count++;
>               }
> 
>               for ($i = 0; $i < $count; $i++)
>               {
>                 $index = $i + 1;
>                 if ($FORM{"FIELD_$index"} eq "")
>                  {
>                   $FORM{"FIELD_$index"} = "NO ENTRY";
>                  }
>                 $FORM{"FIELD_$index"} =~ s/\"/\"\"/g;      # 
> ...change " to ""
>                 $FORM{"FIELD_$index"} =~ s/\r//g;          # 
> ...kill line feeds
>                 $FORM{"FIELD_$index"} =~ s/\n/ /g;         # 
> ...change cr to whitespace
>                 $FORM{"FIELD_$index"} = "\"" . 
> $FORM{"FIELD_$index"} . "\"";
>                 print RESULTS $FORM{"FIELD_$index"};
>                 print RESULTS ","
>                }
>               print RESULTS "\n";
> 
>               # Unlock before you close
>               &unlock();
> 
>               close(RESULTS);
> 
>               &location;
> }
> 
> if ($rqm eq "POST")
>  {
>   read(STDIN, $buffer, $cl);
>   @pairs = split(/&/, $buffer);
>   $q = 0;
>   foreach $pair (@pairs)
>    {
>     $q++;
>     ($name, $value) = split(/=/, $pair);
>     $FORM{"FIELD_$q"} = $value;
>     $FORM{"FIELD_$q"} =~ tr/+/ /;
>     $FORM{"FIELD_$q"} =~ 
> s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
>     if ($FORM{"FIELD_$q"} eq "0-12")
>      {
>        &location;
>        exit(0);
>      }
>    }
>  }
> elsif ($cl > 0)
>  {
>   &web_die_action;
> # Error: form results must be submitted with method POST
>  }
> 
> ###################################################
> if (! (-e $results_file))
> {
>       if (open (RESULTS, ">results.csv"))
>       {
>               &write_entry;
>       }
>       else
>       {
>               &return_error (500, "Results Error", "Cannot 
> create results.csv to store
> entries.");
>       }
> }
> 
> else
> {
>       if (! ((-r $results_file) && (-w $results_file)) )
>       {
>               &return_error (500, "Results Error", "Cannot 
> read or write to
> results.csv.");
>       }
>       else
>       {
>               open(RESULTS, ">>results.csv") || &web_die;
>               &write_entry;
>       }
> }
> exit(0);
> sub location
> {
> print "Location:  http://<omitted>";
> }
> 

Reply via email to