-
Как работает "случайный" URL? -
А как сделать "случайную" картинку? -
Как c помощью CGI-программы показать картинку? -
Иногда требуется удалить из файла все HTML тэги. Как
это сделать? -
Как сделать чтобы банеры, на странице, менялись? -
Как сделать счетчик?
-
Как работает "случайный" URL? -
А как сделать "случайную" картинку? -
Как c помощью CGI-программы показать картинку? -
Иногда требуется удалить из файла все HTML тэги. Как
это сделать? -
Как сделать чтобы банеры, на странице, менялись? -
Как сделать счетчик?
Проще всего, оформить это, как CGI-программу. Сразу, стоит оговориться,
что URL не совсем случайный, он случайный…, но из вашего списка. Формат
списка простой и может пополняться либо в ручную, либо другими программами.
Пример файл LINKS.LST:
http://www.tsu.ru/
http://www.netscape.com/
http://www.microsoft.com/
CGI-программа на Perl ( rurl.pl ):
#!/usr/local/bin/perl
# случайный URL
open (FILE, "@url = ( );
# прочитали файл в массив, один элемент массива - одна строка из файла
close (FILE);
srand ( time );
$index = int ( rand ( $#url + 1 ) );
# получили случайное число в интервале от 0 до $#url + 1
print "Location: ", $url<$index>, "
";
exit;
Фрагмент вызова программы в HTML-файле:
Случайный URL
В принципе, можно использовать программу RURL.PL (см. "Как работает
"случайный" URL?"). Отличия будут только в файле с URL и в способе вызова
программы из HTML-файла.
Пример файл LINKS.LST:
http://www.myhost/pics/img01.gif
http://www.myhost/pics/img02.gif
http://www.myhost/pics/img03.jpg
Фрагмент вызова программы в HTML-файле:
Внимание! Этот способ не очень хорошо подходит для демонстрации рекламных
банеров. Хотя, в некоторых случаях можно использовать и эту программу.
: )
Иногда необходимо выводить картинку ИМЕННО CGI-программой. Как это
сделать? Предположим у нас есть картинка (в директории cgi-bin) - my_lg01.jpg.
Фрагмент CGI-программы (show_img.pl) на Perl:
#!/usr/local/bin/perl
open(FILE, "print "Content-type: image/jpeg
";
binmode( FILE );
binmode( STDOUT );
while (read(FILE, $data, 4096)) {
print $data;
}
close(FILE);
Вызов из HTML-документа будет выглядеть так:
Можно воспользоваться многочисленными программами конвертирующими HTML
в различные форматы. Можно самому написать маленькую программку.
Пример на Perl:
#!/usr/local/bin/perl
open(IFILE, "<$ARGV<0>");
@line = ();
close(IFILE);
$all_lines = join( "", @line);
$all_lines =~ s/<(<^>>*)>//g;
open(OFILE, ">$ARGV<1>");
print OFILE $all_lines;
close(OFILE);
Фрагмент этой программки можно использовать в CGI-программах для удаления
HTML тэгов (например в Guest Book или Message Board)
Проще всего воспользоваться такой приятной возможностью многих Web-серверов,
как SSI (Server Side Includes). Сервер, перед тем как послать HTML-документ
пользователью, разбирает его сам и выполняет некоторые "вставки" и только
после этого отдает документ пользователю. Чаще всего, документы с такими
"вставками" имеют тип .shtml, но это не обязательно. Для примера,
я написал простенькую программу случайного выбора банера из списка.
#!/usr/local/bin/perl
# banner.pl
$banner<0> = `"`;
$banner<1> = `"`;
$banner<2> = `"`;
$banner<3> = `"`;
$banner<4> = `"`;
srand(time);
$index = int(rand($#banner+1));
print "Content-type: text/html
";
print $banner<$index>;
exit;
Вызов в HTML-документе:
Вызов из html-файла может осуществляться разными способами. Это зависит
от сервера, его настроек и т.д. Приведу несколько видов вызова.
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
P.S. Ротацию банеров моджно сделать и для обычного .html, но это слегка
сложнее.
Очень простой счетчик можно написать если вы используете SSI (Server
Side Includes) на вашем Web-сервере. Большинство современных серверов поддерживают
SSI и отазываться от этого не стоит, тем более, что в отличии от графически
счетчиков, приведенный ниже, работает несмотря на то, включен у пользователя
"Automatically load images" или нет.
#!/usr/local/bin/perl
use SDBM_File;
sub O_CREAT { 0x0100 }
sub O_BINARY { 0x8000 }
sub O_RDWR { 0x0002 }
# Через | в нижестоящей строке можно перечислить
# IP адреса компьютеров которые не должны изменять счетчик
$exclude_addr = `127.0.0.1|194.226.48.11`;
# Для некоторых серверов нижестоящая
# строка не обязательна (а иногда и нежелательна)
print "Content-type: text/html
";
tie(%counter, "SDBM_File", `counters`, O_RDWR|O_CREAT|O_BINARY, 0666);
if ($ENV{`REMOTE_ADDR`} !~ /$exclude_addr/) {
$counter{$ENV{`QUERY_STRING`}}++;
}
print $counter{$ENV{`QUERY_STRING`}};
untie(%myhash);
exit;
В этом примере я не стал разбирать QUERY_STRING, проверять наличие ключа
в базе и т.д. Но все это наворачивается без особых трудозатрат и вообще
желательно. Все ваши счетчики будут накапливаться в директории /cgi-bin/
- файл counters.pag(.dir) или counters.db. Вызов из HTML-файла:
[an error occurred while processing this directive]
Для разных серверов этот вызов может варьироваться. Мне известны еще и
такие варианты:
[an error occurred while processing this directive]
[an error occurred while processing this directive]
Отзывы:
отзывов пока нет, ваш будет первым!
Смотрите также:
Вы читали "CGI для начинающих"

