Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 236
  • Last Modified:

Need help converting a CGI script to PHP

well, my free web host died on me. i moved to a new one and it allows PHP scripts but for CGI scripts to work you'd have to pay $$.

i figured ok, i know a little perl, how hard could this php thing be? for my form mail scripts, i just downloaded a ready made version (so much for learning).

but, my other script, it's sorta like a guestbook, but it's not. i tried looking at the php code of guestbook scripts to see if i could figure out how, but that didn't help any, most had something to do with MySQL. then i went to php.net to see if i could look up bits of code... i just got lost.

so here's my little script:

#!/usr/bin/perl

use CGI;

$q=new CGI;
$list ='list.html';
$|++;
print "Content-type: text/html\n\n";

unless (open(LIST, "$list")) {
   print "Could not open $list $!\n";
   die "Could not open $list $!";
}
@contents=<LIST>;
close(LIST);

open (LIST, ">$list");

foreach $line (@contents) {
   print LIST $line;
   $line=~/<!--data-->/ || next;
   print LIST "<CENTER>Date: ", $q->param('date'), "<BR>\n";
   print LIST "Name: ", $q->param('name'), "<BR>\n";
   print LIST "Class: ", $q->param('classtype'), "<BR>\n";
   print LIST "Explaination: ", $q->param('explain'), "<BR>\n";
   print LIST "</CENTER>";
}

close (LIST);

#send them to the list
print qq|<HTML><HEAD><TITLE></TITLE><META HTTP-EQUIV="refresh" CONTENT="0; URL=$list"></HEAD></BODY></HTML>|;

How (appreciate examples, explaination of code etc. :) can I do this using PHP? if not, i guess i'll go look for a CGI enabled host. =\
0
sayhi
Asked:
sayhi
  • 5
  • 3
1 Solution
 
dkjariwalaCommented:
From what I understood from the script,

Basically this script processes form and makes a new entry in list.html under <!--data--> section. Right ???

Check the code below,

<?php

$list = 'list.html'; //name of file.

$lines_array = file($list) or die('Can not open list file ' . $list); //file function opens file named $list and each line of the file is put in differnet array elements.

$fp = fopen($list,'w') or die('Can not write to file ' . $list);

$CRLF = "\n"; //keep it "\r\n" if on unix/linux.

flock($fp,LOCK_EX); //lock file for writing.


//following code should be used if your form is submitted by GET method.
// as such if you have register_globals on in your php.ini [ normally it is ] you don't nee to fetch value like this, but this is the best practise.

$date = $HTTP_GET_VARS['date'];
$name = $HTTP_GET_VARS['name'];
$class= $HTTP_GET_VARS['classtype'];

/*
Put up like
$date = $HTTP_POST_VARS['date'];
$name = $HTTP_POST_VARS['name'];
$class= $HTTP_POST_VARS['classtype'];

If your form is submitted by POST Method.

*/

foreach($lines_array as $line)
{
     fwrite($fp,$line . $CRLF); //write original lines as it is.
     if(eregi('\<\!--data--\>',$line)) // if line stats its a place where data is stored
     {
          fwrite("<CENTER>Date: $date<br>" . $CRLF); //write out new entry.
          fwrite("<CENTER>Name: $name<br>".$CRLF);
          fwrite("<CENTER>Class:$classtype<br>".$CRLF);
          fwrite("</CENTRE>" . $CRLF);
     }

}
fclose($fp); //close the file.

?>
<HTML>
     <HEAD>
          <TITLE></TITLE>
          <META HTTP-EQUIV="refresh" CONTENT="0; URL=$list">
     </HEAD>

     <BODY>
     </BODY>
</HTML>



JD
0
 
dkjariwalaCommented:
Oops,
one thing I forgot,

Just change those last few lines of HTML code to this,

<HTML>
    <HEAD>
         <TITLE></TITLE>
         <META HTTP-EQUIV="refresh" CONTENT="0; URL=<?=$list">
    </HEAD>

    <BODY>
    </BODY>
</HTML>


Rest stays the same,
JD
0
 
sayhiAuthor Commented:
" Basically this script processes form and makes a new entry in list.html under <!--data--> section. Right
??? "

yup

Form is submitted by Post.

Stuff I don't understand/can't figure out:

$CRLF = "\n"; //keep it "\r\n" if on unix/linux. (what's this?)

//following code should be used if your form is submitted by GET method.
// as such if you have register_globals on in your php.ini [ normally it is ] you don't nee to fetch
value like this, but this is the best practise. (what's this mean??)

I'll try out your code tonight.

0
Industry Leaders: 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!

 
dkjariwalaCommented:
Okie,
The carriage return are different for *nix and Windows
Inf windows, New lines are specified by \n whereas on *nix it is separated by \r\n.

Oh one more goof up.

Use following foreach loop instead of previous code.

foreach($lines_array as $line)
{
    fwrite($fp,$line . $CRLF); //write original lines as it is.
    if(eregi('\<\!--data--\>',$line)) // if line stats its a place where data is stored
    {
         fwrite($fp,"<CENTER>Date: $date<br>" . $CRLF); //write out new entry.
         fwrite($fp,"<CENTER>Name: $name<br>".$CRLF);
         fwrite($fp,"<CENTER>Class:$classtype<br>".$CRLF);
         fwrite($fp,"</CENTRE>" . $CRLF);
    }

}
         
See here I have wrote one line ( <CENTER>Date : ***)and then I need to put up new line character. So I am putting value of varialble $CRLF, which you have setup earlier depending upon your os platform.

And regarding that register_globals, don't worry about it right now. Once you study PHP little , you will find out what I am talking about.

JD
0
 
sayhiAuthor Commented:
ah okay.

well, i haven't gotten it to work yet.
here is the error i am getting:

Warning: fopen("/usr/home/vhost/username/list.html", "w") - Permission denied in /usr/home/freehost/10023/cgi-bin/list.php on line 8
Can not write to file /usr/home/vhost/username/list.html
0
 
dkjariwalaCommented:
Error is pretty self explanatory.


The fopen statement is same as open (LIST, ">$list") incase of PHP.

Here the error is,The file you are trying to update is not writable by script,

CHMOD it to 766 an it should work.

JD
0
 
sayhiAuthor Commented:
Doh, i totally forgot permissions
i should've know that heh

anyway, THANK YOU so much for your help. now people can start to post stuff at my site.
0
 
dkjariwalaCommented:
My pleasure !! :)

JD
0

Featured Post

Receive 1:1 tech help

Solve your biggest tech problems alongside global tech experts with 1:1 help.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now