Лістинг 5.13. counter.pl
#!/usr/bin/perl
use CGI;
$co = new CGI;
open (COUNT, "<counter.dat")
or die "Could not open counter data file!";
$count = <COUNT>;
close COUNT;
$count++;
open (COUNT, ">counter.dat");
print COUNT $count;
close COUNT;
$co->header
$co->start_html(
-title=>'Counter Example'
-author=>'Andrew'
-BGCOLOR=>'white'),
$co->center($co->h1('Counter Example')) $co->p,
$co->center($co->h3("Current count ", $count)) $co->p,
$co->center($co->h3("Reload the page to update the count"))
$co->end_html;
Цей сценарій дуже простий: все, що він робить, — це читає число, що зберігається в counter.dat, збільшує його на одиницю, записує назад в counter.dat і потім показує збільшений лічильник
Створюємо гостьову книгу.Створення гостьової книги — крок вперед в порівнянні з лічильником. Гостьова книга збирає коментарі користувачів і зберігає їх у файлі, що зазвичай має формат HTML, аби потім виводити їх на сторінці. Наша гостьова книга використовує три файли, що зберігаються в одному каталозі: guestbook.htm (лістинг 6-14), guestbook.pl (лістинг 6-15) і book.htm (лістинг 6-16). Перший є обличчям гостьової книги, тобто саме ця сторінка вказує користувачеві, що він може додати запис в книгу відвідувачів. Вона отримує ім'я користувача і коментар. Коли користувач натискує на кнопку підтвердження, дані посилаються сценарію guestbook.pl; іншими словами, якщо ви використовуєте цей сценарій, вам слід змінити вказаний URL в guestbook.htm на реальний URL guestbook.pl:
<BODY><H1>Please add to my guestbook</H1>
<FORM METHOD=POST ACTION=
"http://www.yourself.com/cgi/guestbook.pl">
У guestbook.pl (див. лістинг 6-15) ми відкриваємо власне гостьову книгу, що зберігається у файлі book.htm. Основна ідея — додати в неї ім'я користувача і його коментар, але book.htm закінчується тегами </BODY></HTML>. Тому спочатку треба встановити покажчик файлу перед цими словами за допомогою наступної коду:
open (BOOK, ">>book.htm") or die "Could not open guestbook!";
seek (BOOK, -lenght($co->end_html), 2);
Оскільки рядки </BODY></HTML> в даному випадку створюються за допомогою CGI-метода end_html, ми відкатуємося назад на довжину рядка, що генерується, що дозволяє нам не залежати від того, що метод end_html виводитиме в наступних версіях модуля CGI.pm.
Після цього код записує замість тегів </BODY></HTML> нові дані, додаючи в кінці ті ж теги викликом CGI-метода end_html. Потім guestbook.pl створює сторінку, на якій розташовується вдячність користувачеві за коментарі і гіперпосилання, позволяющая проглянути вміст гостьової книги. Іншими словами, якщо ви використовуєте цей сценарій, вам слід змінити URL, приведений в лістингу, на реальний URL book.htm (переконавшись, що права доступу для цього файлу досить низькі, аби guestbook.cgi міг записувати в нього дані):
"If you whant to take а look at the guest book "
$co->a({href=> "http://www.yourserver.com/cgi/book.htm"},
"click here"),".",
Якщо користувач клацає на гіперпосиланні, відкривається гостьова книга, а посилання на неї можна розташувати на будь-якій іншій Web-сторінці вашого розділу. Ім'я користувача і коментарі відображуються в гостьовій книзі разом з часом додавання запису. Файл guestbook.pl наводить в безпечний стан будь-який код HTML, який користувач може спробувати ввести в гостьову книгу, заміщаючи будь-які символи < HTML-кодом < (це робиться так: $username =~ s/</< і $text =~ s/</<), який виводить "<", аби не дозволяти броузеру намагатися розібрати коментарі користувача як HTML. Це означає, що будь-який код HTML, який користувач спробує ввести в гостьову книгу, буде виведений як текст і не виконуватиметься.
Відмітьте, що ви можете набудувати guestbook.pl так, щоб він приймав електронні адреси відвідувачів (втім, все більше і більше користувачів не бажають залишати свої адреси не стільки з міркувань секретності, скільки із-за програм, які сканують мережу у пошуках адрес електронної пошти, а потім продають отримані списки розповсюджувачам реклами). Ви також можете видозмінити файл гостьової книги book.htm, додавши графіку з по потужністю тега HTML <IMG>, встановивши фонове зображення і так далі Просто стежите, аби останнім, що ви виводите в book.htm був текст </BODY></HTML> (або виведення поточної версії CGI-метода end_html, оскільки в новій версії пакету CGI.pm він може змінитися), аби guestbook.pl міг відкататися на необхідне число символів і замінити ці теги новим коментарем.
Підказка. Якщо ви не хочете залежати від версії модуля CGI.pl, записуйте в окремий файл довжину тексту, виведеного методом end_html при останньому записі в гостьову книгу і використовуйте для установки покажчика це значення, а не довжину рядка, end_html, що виводиться.
Дата добавления: 2016-04-02; просмотров: 742;