cgi form fail to write to the *.txt file?

Posted on 2000-02-16
Medium Priority
Last Modified: 2010-03-05
cgi form fail to write to the *.txt file?

I use the following cgi script file to write the date to the *.txt file, but I fail, how come?

the cgi is as following:


#Change this path!

$COMMENT_FILE = "/hct_university/she/registrationDir/rs1.txt";

# The associative array $values will contain the data.

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";

# Make sure it's a POST-method form submission
if (! &VerifyForm()) {
      print "<title>Not a POST Form Submission</title>\n";      
      print "</head>\n";
      print "<h1>Not a POST Form Submission</h1>\n";      
      print "This page should be accessed only by submitting\n";
      print "a form using the POST method. Perhaps your\n";
      print "browser does not support forms.\n";
      print "</body></html>\n";
      exit 0;

#OK, it's a form submission, so parse it.

#Use the information

#OK, we have all the data. Write it to a file in which
#we collect comments from users. Open to append, of course.

$fname = ">>" . $COMMENT_FILE;
open(OUT, $fname);

#The format I write here just happens to be appropriate for
#reading with a typical Unix mail reader; for instance,
#mail -f comments.txt should open the file.
#No subject lines, though.
print OUT "sir this is the testing";
#print OUT "Name: ", $FORM{'Name'},"\n";
#print OUT "Name: ", $values{'name'},"\n";
#print OUT "job title: ", $values{"job_title"},"\n";
#print OUT "Employee #: ", $values{"employee"},"\n";
#print OUT "LOB: ", $values{"lob"},"\n";
#print OUT "Dept #: ", $values{"dept_loc"},"\n";
#print OUT "Project Number : ", $values{"project_num"},"\n";
#print OUT " ESN Number: ", $values{"phone"},"\n";
#print OUT "Course Title: ", $values{"course_title"},"\n";
#print OUT "Course Number #: ", $values{"course_num"},"\n";

print "<title>Thank you, ", $values{"name"}, "</title>\n";      
print "</head>\n";
print "<h1>Thank you, ", $values{"name"}, "</h1>\n";      
print "Thank you for your comments.\n";
print "</body></html>\n";
exit 0;

sub VerifyForm
      local($bad, $contentType, $requestMethod, $result);
      $bad = 0;
      # Check the content type of the data we've received
      $contentType = $ENV{"CONTENT_TYPE"};
      if ($contentType ne "application/x-www-form-urlencoded") {
            $bad = 1;
      # And make sure the POST method was used
      $requestMethod = $ENV{"REQUEST_METHOD"};
      if ($requestMethod ne "POST") {
            $bad = 1;

      $result = ! $bad;

sub ParseForm
      local($fields, $name, $value, $data);
      #Split standard input into fields

      read(STDIN, $data, $ENV{"CONTENT_LENGTH"});
      @fields = split(/&/, $data);

      #Split the fields into names and values, creating
      #an associative array indexed by the names

      foreach $item (@fields) {
            ($name, $value) = split(/=/, $item);
            $name = &UnescapeString($name);
            $value = &UnescapeString($value);
            $values{$name} = $value;

#Unescape any special characters in a string

sub UnescapeString
        local($s) = $_[0];
      local($pos, $ascii);
      # Replace the + sign with spaces
      $s =~ s/\+/ /g;
      # Seek out and replace %xx hexadecimal escapes
      $pos = 0;
      while (($pos = index($s, "%", $pos)) != -1) {      
            $ascii = hex(substr($s, $pos + 1, 2));
            substr($s, $pos, 3) = pack("c", $ascii);
Question by:syu1
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3

Expert Comment

ID: 2528836
Try adding these lines:

open(OUT, $fname);
print "Open message: $!\n";

Tis will give you the system message after opening the file and will let you know if there was an error.  It is a good idea to do somethink like this

open(OUT, $fname) || die "Failed to open $fname";

Author Comment

ID: 2528974
it seems the file can not be opened, it is there, and the path seems ok, I just dont know what is wrong the *txt file?


Expert Comment

ID: 2529050
Did you try the solution I sent:

open(OUT, $fname);
print "Open message: $!\n";

What message did it print?


Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.


Author Comment

ID: 2529755
I try it, I got error message like : "no such file or directory found",

 thanks lot!

Expert Comment

ID: 2531068
OK so we know the problem is that some where the directory doesn't exist.  Notice I didn't say the file as perl create non existing files if you call then for write or append access.  But in this case it could create it because it was referenced to a dir which did't exist.

Author Comment

ID: 2532119

would you pls explan it again, as   I dont quite follow your last explanation, thanks!

Accepted Solution

guadalupe earned 200 total points
ID: 2534929
Ok the error message was that:

"no such file or directory found"

You opened the file like this:

$COMMENT_FILE = "/hct_university/she/registrationDir/rs1.txt";

$fname = ">>" . $COMMENT_FILE;

open(OUT, $fname);

the ">>" which you append onto the front of the file name means open the file for appending.  When perl is instructed to open a file for either writing or appending and it does not find the file it will create the FILE!!  Not any directories which may be part of thepath of the file but just the file.  But if the path doesn't exists it will be unable to create ther file and therefore unable to open it...  Therefore if it says the file or diectory doesn't exist it is much more lickly the problem is the dir.  Also if it was a lck of permissions to creat the file in the dir iot would say just that:

Permission denied

Check the spelling and location of the dir...

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many time we need to work with multiple files all together. If its windows system then we can use some GUI based editor to accomplish our task. But what if you are on putty or have only CLI(Command Line Interface) as an option to  edit your files. I…
A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Six Sigma Control Plans
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question