Perl по-mod’ному Докучаев Дмитрий aka Forb Xakep, номер #068, стр. 068-108-3 2. В сценариях не должно быть служебных ключей _DATA_ и _END_. 3. В сценариях не должно быть функции exit(). Вместо нее используется Apache::exit(). На первый взгляд, правила простые, но часто программист их нарушает. Это приводит к ошибке 500 (я сам пару раз использовал запрещенный exit() в своих скриптах). Чтобы получить производительность при работе с БД, необходимо указать директиву PerlModule Apache::DBI (мы уже это сделали), а затем писать скрипт с использованием модуля DBI. Вот простой код register.cgi: register.cgi – сценарий добавления нового пользователя #!/usr/bin/perl use CGI qw(:standard); ## Юзаем модуль CGI.pm use DBI; ## и DBI $name=param('name'); $info=param('info'); $cc=param('cc'); $cctype=param('type'); $holder=param('holder'); $exp=param('exp'); $cvv=param('cvv'); ## Собираем все необходимые параметры my $r=shift; $r-<send_http_header('text/html'); $r-<print("Connecting to db...\n"); ## Используя синтаксис Apache, шлем хидер my $mysql=DBI-<connect("DBI:mysql:shop:localhost:3306","root","pwd") || $r-<print("cant connect"); ## Соединяемся с базой $query=$mysql-<do("INSERT INTO cc \(name,info,cc,type,holder,exp,cvv2\) VALUES \(\"$name\",\"$info\",$cc,\"$cctype\",\"$holder\",\"$exp\",$cvv\)"); ## и выполняем запрос $mysql-<disconnect; ## Дисконнект Устанавливай атрибут 755 и делай запрос к скрипту. Ясен перец, что от тебя требуется явное определение всех необходимых параметров. Если все сделано правильно, сервер моментально выполнит соединение и модификацию таблицы. Теперь, когда у тебя имеется одна (а может быть, и больше) строка в CC, колбась скрипт, который выводит данные в браузер. list.cgi – сценарий просмотра таблицы CC по указанному id #!/usr/bin/perl use CGI qw(:standard); ## Юзаем модуль CGI.pm use DBI; ## а также DBI $id=param('id'); ## Получаем значение параметра id my $r=shift; $r-<send_http_header('text/html'); $r-<print("Connecting to db...\n"); ## Шлем хидер и сообщение о соединении (с помощью модуля Apache) my $mysql=DBI-<connect("DBI:mysql:shop:localhost:3306","root","pwd") || $r-<print("cant connect"); ## Соединяемся с базой $query=$mysql-<prepare("SELECT * from cc where id=$id"); ## Формируем запрос $query-<execute; ## и выполняем его row=$query-<fetchrow_array(); foreach(@row) { $r-<print("$_\t"); ## Выводим построчно все возвращенные значения } $mysql-<disconnect; ## Дисконнектимся Запрос вида www.host.com/perl/list.cgi?id=1 покажет тебе первый рекорд в таблице. Значения будут отделяться друг от друга табуляцией. Теперь попробуй обновить окно браузера. Ответ сервера происходит с минимальной скоростью, потому что в силу вступают механизмы кэширования и работа модуля Apache::DBI. А сейчас представь, что к твоей машине ломятся 100 клиентов одновременно. Только mod_perl способен быстро предоставить необходимую информацию из БД (естественно, не такую конфиденциальную, а, например, список товаров или услуг твоей электронной лавочки :)). Вливайся! Поздравляю! Только что ты прошел теоретический и практический курс работы с mod_perl. Надеюсь, ты понял, что модуль действительно является мощнейшим средством для web-разработок, когда сервер не должен простаивать даже долю секунды. Работу с данным модулем практикуют такие порталы, как ValueClick, CMPnet и CitySearch. Я думаю, если ты познакомишься с mod_perl чуть поближе, то никогда не будешь оглядываться по сторонам в поиске новых решений для своего web-проекта. А программеры-энтузиасты всегда подкинут тебе искомый модуль, заюзав который, ты сэкономишь драгоценное время. |