Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документация, учебники по Perl.doc
Скачиваний:
3
Добавлен:
29.10.2018
Размер:
1.83 Mб
Скачать

Кто посещает мою страничку?

Вам иногда хотелось наверное узнать,кто же смотрит на вашу страничку,откуда и когда ваша страничка посещалась. Бывают такие вопросы? Кто-то считает,что ответить на них нельзя. Но вы не верьте этому расхожему мнению. Один раз с подобными вопросами ко мне подошел мой одногрупник, Диман. У него неплохой сайт. и туда к нему всегда валит целая куча народа. Вот как раз разговор и зашел об этой куче народа. Результатом моего непродолжительного труда стал небольшой скрипт.В страничку он втакается через тэг <IMG src="cgi-bin/get_ip.cgi"> он покажет вам изображение что не будет бросаться в глаза. Зато при своей работе он все запишет в файл ipdata.txt : В нем будет время и IP-адрес того,кто смотрел на вашу страничку!

#!/usr/bin/perl

#get_ip.cgi

$gif="../gifs/player.gif";

$data="ipdata.txt";

print "Content-Type: image/gif\n\n";

open G,$gif;

print <G>;

close G;

open D,">>$data";

print D scalar localtime,' '.$ENV{'REMOTE_ADDR'}."\n";

close D;

Гостевая книга

А вот еще пример того,как можно с умом использовать нехитрые знания. Гостевая книга ,в которую каждый может записать свое вам пожелание. К ней прилагаются .gif -файлы,позволяющие указать свое настроение. Запись происходит в базу данных guestbook.dat и при каждой новой записи в гостевую книгу скрипт извещает по почте хозяина гостевой книги, а тому кто в нее вошел по почте посылается сообщение об этом.

#!/usr/bin/perl

#guestbook.cgi

$myemail="paaa\@uic.nnov.ru";

$myname="lesha";

$mail="mail";

($sd,$sn)=($ENV{'SCRIPT_FILENAME'}=~/(.*)\/([^\/]*)/);

$datafile=$sd."\/guestbook.dat";

@Mailgifs=qw(../gifs/mood0.gif ../gifs/mood1.gif ../gifs/mood2.gif);

$Facetxt{$Mailgifs[0]}= ":)";

$Facetxt{$Mailgifs[1]}= ":|";

$Facetxt{$Mailgifs[2]}= ":(";

sub urldecode{

local($val)=@_;

$val=~s/\+/ /g;

$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/eg;

return $val;

}

sub strhtm{

local($val)=@_;

$val=~s/&/&/g;

$val=~s/</</g;

$val=~s/>/>/g;

$val=~s/(http:\/\/\S+)/<A href="$1">$1<\/A>/g;

return $val;

}

$cont_len=$ENV{'CONTENT_LENGTH'};

if($ENV{'REQUEST_METHOD'} eq 'GET'){$query=$ENV{'QUERY_STRING'};}

else {sysread(STDIN,$query,$cont_len);}

if($query eq ''){

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

print <<HTML_generating;

<HTML><HEAD><TITLE>Wellcome to my guestbook</TITLE></HEAD>

<BODY bgcolor="cyan">

<CENTER><H1>Wellcome to my guestbook</H1></CENTER>

<HR><FORM action="guestbook.cgi" METHOD="POST">

<TABLE border=0>

<TR><TD>Name:</TD><TD colspan=3><INPUT NAME="Name"></TD></TR>

<TR><TD>E-mail:</TD><TD colspan=3><INPUT NAME="Email"></TD></TR>

<TR><TD>URL:</TD><TD colspan=3><INPUT NAME="URL"></TD></TR>

<TR><TD>Message:</TD><TD colspan=3><TEXTAREA NAME="Message" rows=6 cols=64></TEXTAREA></TD></TR>

<TR><TD>Mood:</TD><TD><IMG src="$Mailgifs[0]"></TD><TD><IMG src="$Mailgifs[1]"></TD><TD><IMG src="$Mailgifs[2]"></TD></TR>

<TR><TD> </TD><TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[0]"></TD>

<TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[1]"></TD>

<TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[2]"></TD></TR>

<TR><TD colspan=2><INPUT TYPE="submit" VALUE="Send"></TD>

<TD colspan=2><INPUT TYPE="reset" VALUE="Clean"></TD></TR>

</TABLE></FORM>

<HR><BR>

HTML_generating

open DATAFILE,"$datafile"|| die "Cannot open $datafile $!\n";

@GUESTDATA=<DATAFILE>;

print @GUESTDATA;

close DATAFILE;

print "</BODY></HTML>";

}

else{

foreach(@fields=split(/&/,$query)){

if(/^Name=(.*)/){$Name=&urldecode($1);}

if(/^Email=(.*)/){$Email=&urldecode($1);}

if(/^URL=(.*)/){$URL=&urldecode($1);}

if(/^Message=(.*)/){$Message=&urldecode($1);}

if(/^Mood=(.*)/){$Mood=&urldecode($1);}

}

$MESSAGE=&strhtm($Message);

if(-e $datafile){unless (-r $datafile && -w $datafile){die "Cannot access $datafile\n";}}

$Newmsg="<IMG src=\"$Mood\"><BR><A href =\"mailto:$Email\">$Name</A>".

"(<A href=\"$URL\">$URL</A>):<BR>\n$MESSAGE<HR>\n";

open DATAFILE,"+<$datafile" || die "Cannot open $datafile $!\n";

@GUESTDATA=<DATAFILE>;

@GUESTDATA=($Newmsg,@GUESTDATA);

seek(DATAFILE,0,0);

print DATAFILE @GUESTDATA;

close DATAFILE;

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

print "<HTML><HEAD><TITLE>Congratulations</TITLE></HEAD>\n";

print "<BODY bgcolor=\"cyan\">\n<CENTER><H1>Congratulations:you have successfully entered to $myname\'s";

print "guestbook.Thank you!</H1></CENTER><HR>$Newmsg</BODY></HTML>";

open MAIL,"|$mail $Email";

print MAIL "Guestbook\n";

print MAIL "You have entered to $myname\'s guestbook\n";

print MAIL "Thank you.\n\t\t\t\t$myname";

close MAIL;

format NOTIFYMAIL=

Guestbook

========================== Guestbook Entry =======================

| Time: |Name: |

| @<<<<<<<<<<<<<<<<<<<<<<<<|@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |

scalar localtime,$Name

+--------------------------+-------------------------------------+

| Email: |URL: |

| @<<<<<<<<<<<<<<<<<<<<<<<<|@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |

$Email,$URL

+--------------------------+-------------------------------------+

| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |

$Message

| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |

$Message

| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |

$Message

| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<< |

$Message,$Facetxt{$Mood}

==================================================================

.

open NOTIFYMAIL,"|$mail $myemail";

write NOTIFYMAIL;

close NOTIFYMAIL;

}