Создание серверных приложений на языке PERL


WWW,CGI-специфика - часть 3



2. Длина данных, передаваемых таким методом, ограничена.


3. Hельзя передавать multipart form data, в т.ч. файлы через кнопочку

"Browse"


POST - передача данных скрипту через STDIN. Отсутствуют минусы метода GET.

Обычно метод GET используется, когда скрипт вызывается со страницы через линк

, а POST - при нажатии кнопки submit в форме.

О получении параметров внутри скрипта читайте в следующем Q.



Q: Как обрабатывать параметры, переданные скрипту?

A1: Используйте модуль CGI. Прочтите perldoc CGI , а для начала простой

пример:

use CGI;


$q=new CGI();


$mode=$q->param('mode');


$q - объект, который имеет несколько методов и полей, относящихся к

параметрам вызова, переменным окружения, cookie, и пр. В $mode содержится значение параметра 'mode'.

или проще: use CGI qw/:standard/;


$mode=param('mode'); если вам не нужно несколько объектов.

A2: Некоторые предпочитают пользоваться библиотекой cgi-lib (она тоже входит в модуль CGI, хотя существуют индивидуумы, которые включают ее отдельным файлом).


Пример:


use CGI qw(:cgi-lib);


ReadParse(); #Функция возвращает все параметры в хэш.


$mode=$in{'mode'};


A3: Можно пойти по пути изобретения велосипеда и начать переписывать модуль CGI, т.е. разбор параметров метода GET, потом наверняка понадобиться POST, а потом multipart form data. В написанный код закрадуться ошибки, которые придется отлавливать на последующих этапах. Это конечно дает неплохую практику программирования, но лучше просто посмотрите как написан модуль CGI.


(Высказанное в последнем ответе является тем самым ИМХО ).



Q: Посоветуйте халявный хостинг с поддержкой CGI-perl.


A:www.virtualave.net


free.prohosting.com


www.hypermart.net


www.virtualave.net


www.webservis.ru


www.h1.ru


www.holm.ru


www.hut.ru


Примечание:


В последнее время почти все халявные хостинги перестали поддерживать исходящие запросы, т.е. скачать откуда-нибудь файл используя LWP или Net::Ftp не получиться.


Если знаете хостинг с поддержкой исходящих запросов, напишите мне, буду благодарен.




Q: Что надо указатьв заголовках HTTP-ответа CGI скрипта, выводящего

содержимое, которое надо не показать на экране, а сохранить в файле с заданным

именем, например 'download.zip' ? А то браузер сохраняет файл с именем скрипта.


A: print "Content-Type: application/octet-stream\nContent-Length: ", -s 'download.zip' ,"\n";


print "Content-Disposition: attachment; filename=download.zip\n\n";



Q: Директивы SSI не обрабатываются в выводе скрипта. Что делать?


A: Есть специальный модуль - CGI::SSI.





Начало  Назад  Вперед