CGI . Web - CGI - cgi-bin, . CGI URL . , test.pl web - , URL: http://localhost/cgi-bin/test.pl. cgi-bin , , : /usr/local/etc/httpd/cgi-bin/test.pl /website/cgi-shl/test.pl.
CGI . ,
<A HREF="cgi-bin/test.pl">Click here to run a CGI program</A>
CGI , URL. <A HREF="cgi-bin/search.pl/root/document"> Search the Document Directory</A>
PATH_INFO.
<A HREF="cgi-bin/search.pl?Wine+1993">Search for 1993 Wines</A>
QUERY_STRING.
CGI :
#!/usr/local/bin/perl -w
use strict;
print "Content-type: text/plain\n\n";
print "Hello, World.\n";
test.pl cgi-bin web . URL : http://localhost/cgi-bin/test.pl
: Hello, World.
CGI STDIN - HTML , STDOUT - , STDERR - log - .
CGI HTTP, STDOUT: print("Content Type: text/html\n\n");
, Location : print("Location: $nextPage\n\n");
CGI
CGI %ENV. :
CONTENT_LENGTH - , STDIN . POST.
CONTENT_TYPE - , STDIN.
HTTP_ACCEPT - MIME
HTTP_USER_AGENT -
HTTP_FROM - email .
PATH_TRANSTLATED -
REMOTE_ADDR -
REMOTE_HOST - .
REMOTE_USER - .
REQUEST_METHOD - "GET" "POST"
SCRIPT_NAME - .
SERVER_NAME .
SERVER_PORT - , 80.
SERVER_PROTOCOL .
|
|
URL
, , :
<1>=<1>&<2>=<2>&<3>=<3>
X , NAME, X , . ( , , , , , ), <>=<> &.
GET URL, , URL , , URL , (/), POST. Web- , . , +. (HEX) , %. Ivan Ivankov [email protected] : Ivan+Ivankov+%[email protected] %3E. < %3C, > %3E. CGI .
<INPUT> submit, CGI . :
<INPUT TYPE=submit VALUE="Process Information">
:
<FORM METHOD =GET> <FORM METHOD =POST>. : <FORM METHOD=get ACTION=/cgi-bin/gestbook.pl>
GET URL, ACTION, . QUERY_STRING CGI . POST , STDIN. , CONTENT_LENGTH. METHOD=GET. REQUEST_METHOD. :
sub getFormData {
my($buffer) = "";
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$buffer = $ENV{'QUERY_STRING'};# GET
}
else {# POST
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
}
$buffer.
name=value, (&).
name=Ivan+Ivankov&age=34
, & :
name=Ivan+Ivankov
age=34
=:
Field Name: name Field Value: Ivan+Ivankov
Field Name: age Field Value: 34
, , , getFormData(). split() decodeURL().
my(%frmFlds);
getFormData(\%frmFlds);
sub getFormData {
my($hashRef) = shift;
my($buffer) = "";
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$buffer = $ENV{'QUERY_STRING'};
}
else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
foreach (split(/&/, $buffer)) {
my($key, $value) = split(/=/, $_);
|
|
$key = decodeURL($key);
$value = decodeURL($value);
%{$hashRef}->{$key} = $value;
}
}
sub decodeURL {
$_ = shift;
tr/+/ /;
s/%(..)/pack('c', hex($1))/eg;
return($_);
}
HTML- :
<!-- HTML--->
<FORM METHOD=POST ACTION=/cgi-bin/guestbook.cgi>
<BLOCKQUOTE>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR> <TD COLSPAN=2> <BR> <BR>
</TD> </TR>
<TR> <TD> : </TD>
<TD><INPUT TYPE=text NAME=signer SIZE=40></TD>
</TR>
<TR> <TD>E-Mail: </TD>
<TD><INPUT TYPE=text NAME=email SIZE=40></TD>
</TR>
<TR> <TD>: </TD>
<TD><INPUT TYPE=text NAME=city SIZE=20></TD>
</TR>
<TR> <TD>Home Page URL: </TD>
<TD> <INPUT TYPE=text NAME=url SIZE=40 VALUE=http://>
</TD> </TR>
<TR>
<TD COLSPAN=2>:<BR>
<TEXTAREA NAME=comments COLS=40 ROWS=4>
</TEXTAREA><BR>
<INPUT TYPE=submit VALUE=PostIt!></TD>
</TR> </TABLE>
</BLOCKQUOTE>
</FORM>
submit. . <FORM> : METHOD, , ACTION, URL CGI-. POST , GET. , , <TEXTAREA>, . POST:
ACTION=http://www.server.com/cgi-bin/script.cgi
, Web-, . <INPUT>, <FORM> <TEXTAREA> . <INPUT>, <FORM>, : NAME, TYPE VALUE. :
<INPUT TYPE=text NAME=emailVALUE=@>
<INPUT TYPE=submit NAME=buttonVALUE=PostIt!>
(TYPE=text), (TYPE=submit). (TYPE=reset). TYPE NAME . . <INPUT> VALUE. , . , VALUE=@ , @.
, , PostIt, !
#!/usr/local/bin/perl
&GetFormInput;
$Name=$field{name};
$Email=$field{email};
$City=$field{city};
$Url=$field{url};
$Comments=$field{comments};
print Content-type:text/html\n\n;
&Title;
print <B>Name: $Name</B><BR>\n
<B>Email:</B>
<A HREF=\mailto:$Email\>$Email</A><BR>\n
<B>City:</B> $City<BR>\n
<B>Url:</B>
<A HREF=\$Url\>$Url</A><BR>\n
<B>Comments:</B> $Comments<BR>\n;
sub GetFormInput {
(*fval) = @_ if @_;
local ($buf);
if ($ENV{REQUEST_METHOD} eq POST) {
read(STDIN,$buf,$ENV{CONTENT_LENGTH});
}
else {
$buf=$ENV{QUERY_STRING};
}
if ($buf eq ) {
|
|
return 0;
}
else {
@fval=split(/&/,$buf);
foreach $i (0.. $#fval){
($name,$val)=split (/=/,$fval[$i],2);
$val=~tr/+/ /;
$val=~ s/%(..)/pack(c,hex($1))/ge;
$name=~tr/+/ /;
$name=~ s/%(..)/pack(c,hex($1))/ge;
if (!defined($field{$name})) {
$field{$name}=$val;
}
else {
$field{$name}.= ,$val;
#if you want multi-selects to goto into an array change to:
#$field{$name}.= \0$val;
}
}
}
return 1;
}
sub Title {
print <H2>Simple GuestBook</H2><P>\n;
return 1;
}
HTML-. GET, CGI- .
POST, CGI-. : &GetFormInput, , . print Content-type:text/html\ n\n MIME- ( HTML-), &Title Simple Guestbook Web- HTML-.
- .
CGI- . , , . Perl CGI-LIB.PL CGI.PM. Perl-. CGI-LIB.PL .
: require ../cgi-lib.pl;
. , :
require ../mylib.pl;
, . . : &Parse_Data;
- ( , , ), $field{ } $CGI{ }.
#
#!/usr/local/bin/perl
require 'cgi_lib.pl';
&Parse_Data;
$Name=$CGI{'name'};
$Email=$CGI{'email'};
$City=$CGI{'city'};
$Url=$CGI{'url'};
@Comments=$CGI{'comments'};
#
$c=0;
foreach (@Comments) {
$Comments[$c] =~ s/\n/ /g;
chomp($Comments[$c]);
$q=$Comments[$c]+$Desc[$c];
$q = ~ s/\n/ /g;
$c++;
}
$file="guestbook";
$dbase="../";
open (F, "+>>$dbase/$file") || die "Error of adding a record
$!\n";
print F join ("::","$Name", "$Email", "$City", "$Url",
"@Comments"),"\n";
$i=1;
foreach (@F) {
print F $_;
$i++;
}
close (F);
print "Content-type:text/html\n\n";
|
|
&Title;
print "<B>Name: $Name</B><BR>\n
<B>Email:</B> <A HREF=\"mailto:$Email\">$Email</A><BR>\n
<B>City:</B> $City<BR>\n
<B>Url:</B> <A HREF=\"$Url\">$Url</A><BR>\n
<B>Comments:</B> $Comments<BR>\n";
CGI- . (Append), .
Web -
web ? Web Apache 127.0.0.1 "http://localhost". . (Request).
Apache . config.conf, , , , -f "path", path *.cfg. Apache Server - . "Install to" , z:\home\web_server. Apache MakeConf.exe. MakeConf.exe , , , : : "z:/home/web_server".
Apache start_apache.cmd, stop.cmd. , error.log access.log logs.