Рассмотрим сценарий регистрации пользователя на
Рассмотрим сценарий регистрации пользователя на веб-сервере.Имя пользователя и его пароль записываются в текстовый файл и используются для его последующей аутентификации.
#!/usr/local/bin/perl #Объявляем глобальные переменные.
$request=$ENV{'REQUEST_METHOD'}; $content=$ENV{'CONTENT_LENGTH'}; $basedir="http://www.mydomain.com/~"; $userdir="f:/home";
#Подпрограммы для декодирования данных из формы.
sub urldecode { local($val)=@_; $val=~ s/\+/ /g; $val=~ s/%[0-9a-hA-H] {2}/pack('C',hex($1))/ge; return $val; }
sub strhtml { local($val)=@_; $val=~s//>/g; $val=~s/(http:\/\/\+S)/<A href="$1">$1<\/A>/g; return $val; } ######################################################################
if ($request eq 'GET') { $query=$ENV{'QUERY_STRING'}; } else { sysread(STDIN,$query,$content); }
#Генерируем форму,если никакие данные не введены. print "Content-type:text/html\n\n"; print <<HTML_gen; <HTML><BODY bgcolor="e6e8fa">
HTML_gen
if ($query eq '') { print <<HTML; <h2 align=center><font color="ff0000">Registration.</font></h2> <p><font face="serif" size=2> Please,fill in the form below. <p>After registration you will receive your personal directory and unique URL.Fill all fields carefully. Form fields marked as <font color="ff0000">*</font>are required.</font> <p><FORM ACTION="../cgi-bin/addlogin.cgi" METHOD="POST" name="reg"> <center><TABLE BGCOLOR="bfbfbf"> <TR><td><font color="ff0000">*</font> <TD><b>Login:</b><TD><INPUT TYPE="text" NAME="login" SIZE="20"> <TR><td><font color="ff0000">*</font> <TD><b>Password:</b> <TD><INPUT TYPE="password" NAME="pass" SIZE="20"> <TR><td><font color="ff0000">*</font><TD><b>E-mail:</b> <TD><INPUT TYPE="text" NAME="email" SIZE="20"> <TR><TD colspan=3><p><center> <INPUT TYPE="submit" VALUE="Submit"></center> </TABLE></center> </FORM> HTML
#Декодируем поля формы
else { foreach (@fields=split(/&/,$query)) { if (/^login=(.*)/) { $login=&urldecode ($1); } if (/^pass=(.*)/) { $password=&urldecode ($1); } if (/^email=(.*)/) { $email=&urldecode ($1); } }
#Проверяем, не существует ли данное имя в системе. open(INFO,"login.txt") ||die; @data=<INFO>;#Читаем строки в массив. close(INFO);
foreach $string(@data) { @item=split(/&/,$string);#Разбиваем строку на части. foreach (@item) { if ($item[0] eq $login) { #Сравниваем полученное имя с первым полем файла #для каждой строки и если такое найдено выдаем #ошибку. print <<HTML; <h2 align=center><font color="ff0000">Error!</font></h2>
<p><center><b>The name <font color="ff0000">$login</font> already exists in the system. <p>Please,go back and choose another name.</b>
<p><form><input type="button" value="Back" onClick="history.back()"></form>
</center>
HTML exit; } } }
#Если имя не найдено,открываем базу данных и добавляем информацию.
if ($item[0] ne $login) { open(DATA,">>login.txt"); $string=join('&',$login,$password,$email,scalar localtime,$ENV {'REMOTE_ADDR'}; print DATA "$string\n"; close(DATA);
#Создаем домашний каталог пользователя и переходим в него.
mkdir("$userdir/$login",0700); chdir("$userdir/login"); opendir(USER,"$userdir/$login");
#Помещаем файл index.html в каталог пользователя.
open(IN,">$userdir/$login/index.html"); print IN "This is the test!\n"; close(IN); closedir(USER);
#Содержание файла может быть любым,это только для примера.
#Генерируем ответ пользователю.
print <<HTML; <p><h1 align=center><font color="ff0000">Congratulations!</font></h1>
<p><b>Your registration was successful and your data were added to our database.Thank you for your time.</b>
<p><center><b><font color="ff0000">
You entered:</font>(print this page and keep it in safe place)</b>
<p><table>
<tr><td><b>Your login name:</b><td><font color="0000ff">$login</font>
<tr><td><b>Your password:</b><td><font color="0000ff">$password</font>
<tr><td><b>Your e-mail address:</b><td><font color="0000ff">$email</font>
</table></center>
HTML } }
Скрипт выдает ответ в виде html-страницы,содержащей всю информацию,введенную пользователем.