Страница 7 из 16 Декодирование на perl tr/+/ /; s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge;
(списано из CGI.pm) На самом деле, можно не возится со всем этим, а использовать модуль CGI.pm (Имеется в поставке Perl 5.004 и более поздних. Если у вас perl версии 4 или 1, нужно срочно взять на CPAN новую версию perl) Самый большой и последний пример Предположим мы делаем поисковую систему, тогда у нас должен быть HTML с формой и программа, которая будет выполнять поиск. search.html <html> <head> <title>Поиск</title> </head> <<body> <h1>Чего искать?</h1> <form action=/cgi-bin/search.pl method=get> Строка для поиска: <input type=text name=string width=70><p> Искать в <input type=checkbox name=searchin value=internet>Интернет <input type=checkbox name=searchin value=intranet>Интранет <input type=checkbox name=searchin value=extranet>Экстранет<p> <input type=submit value=Давай!><input type=reset value="Нет, не надо"> </form> </body> </html>
Программа: #!/usr/bin/perl -- поменяйте, как надо use CGI qw(:standard);
print "Content-Type: text/html\n\n"; # Не забудьте про два "\n"
$string = param("string"); @searchin = param("searchin"); # searchin это checkbox и его значения # возвращаются списком
# Искать мы сегодня ничего не будем print "<html> <body> <h1>Мы сегодня ничего не ищем</h1> Но, если бы искали, то: <br> Искали бы строку <b>$string</b><br>\n"; print "В <b>" . join(" ", @searchin) . "</b>\n"; print " </body> </html> ";
Да, кстати, если вы собираетесь писать в файлы с помощью CGI-программ, не забывайте про file locking (См. часть C за подробностями). 4.2 Как заставить браузеры не кешировать выдаваемый результат? Выдавайте заголовки в таком виде: print "Content-Type: type/sub-type\n"; # Подставьте Ваш тип/подтип print "Pragma: no-cache\n"; # Для HTTP/1.0 клиентов print "Cache-Control: no-cache\n"; # Для HTTP/1.1 print "Expires: Thu Jan 1 00:00:00 1970\n\n"; # Это уже любой броузер должен # понять
4.3 Как перенаправить клиента на другой URL? В заголовке напишите: print "Status: 302\n"; # Или 301. Разница состоит в том, что по стандарту 301 значит "перемещён # навсегда", а 302 -- "перемещён временно" print "Location: ВАШ Новый URL\n"; # URL должен быть указан абсолютный print "URI: ВАШ новый URL\n\n"; # Для https/1.0
Подробности: см. rfc1945(https/1.0), rfc2068(https/1.1) 4.4 Как загрузить файл на сервер? В поставку CGI.pm входит пример file_upload.cgi. За подробностями смотрите CGI(3). Учтите, что если у вас система, которая разделяет бинарные и текстовые файлы -- вам понадобится использовать binmode. Также, помните, что "Русский Apache" не будет производить перекодировку multipart форм. 4.5 Как получить файл по URL? Возьмите на CPAN библиотеку libwww-perl и смотрите lwpcook(3), там написаны основы использования библиотеки и есть примеры. |