Когда сервер выполняет скрипт, для него создаются некоторые переменные
окружения, среди которых как локальные данные (адрес скрипта на сервере, версия
П/О сервера), так и данные полученные с HTTP запросом (версия браузера, IP
удаленной машины и т.д.)
Знать эти данные для CGI программиста просто
жизненно важно. Вот эти переменные:
| $ENV{'REQUEST_METHOD'} |
Это одно из самых главных поле используемое для определения метода запроса
HTTP. Протокол HTTP использует методы GET и POST для запроса к серверу. Они
отличаются тем что при методе GET запрос является как бы частью URL т.е.
http://..../cgi-bin/myscript.cgi?param=value а при методе POST данные передаются
в теле HTTP-запроса (при GET тело запроса пусто). Для нас пока интересен
только метод GET. |
| $ENV{'QUERY_STRING'} |
Это строка запроса при методе GET. |
| $ENV{'CONTENT_TYPE'} |
Тип тела запроса. |
| $ENV{'REMOTE_ADDR'} |
IP-Адрес удаленного Хоста, делающего данный запрос. |
| $ENV{'REMOTE_HOST'} |
Если запрашивающий Хост имеет доменное имя, то эта переменная содержит его,
в противном случае -тот же самый IP-адресс что и REMOTE_ADDR. |
| $ENV{'SCRIPT_NAME'} |
Содержит URL адрес файла скрипта. |
| $ENV{'SCRIPT_FILENAME'} |
Полный путь к скрипту на сервере. |
| $ENV{'SERVER_NAME'} |
Имя серера ,чаще всего доменное как www.microsoft.com ,но в редких случаях
за неимением такового может быть IP-адресом. |
| $ENV{'SERVER_PORT'} |
TCP-Порт сервера использующийся для соединения .По умолчанию HTTP-порт 80,
хотя может быть в некоторых случаях другим. |
| $ENV{'SERVER_SOFTWARE'} |
Программное обеспечение сервера. |
$ENV{'AUTH_TYPE'} $ENV{'REMOTE_USER'} |
Эти переменные определены в том случае, когда запрошенный ресурс требует
аутентификации пользователя. |
| $ENV{'HTTP_ACCEPT'} |
Давая запрос на сервер браузер обычно рассчитывает получить информацию
определенного формата, и для этого он в заголовке запроса указывает поле
Accept:, Отсюда скрипту поступает список тех MIME, которые браузер готов принять
в качестве ответа от сервера. |
| $ENV{'HTTP_USER_AGENT'} |
Браузер обычно посылает на сервер и информацию о себе, чтоб базируясь на
знании особенностей и недостатков конкретных браузеров CGI-скрипт мог выдать
информацию с учетом этого. Например, разные браузеры могут поддерживать или не
поддерживать какие-то HTML тэги. |
| $ENV{'CONTENT_LENGTH'} |
Длина в байтах тела запроса. |
| $ENV{'GATEWAY_INTERFACE'} |
Версия протокола CGI. |
| $ENV{'SERVER_PROTOCOL'} |
Версия HTTP протокола сервера. |
Получение
данных методом GET Суть метода GET заключается в передаче некоторого
объема информации вместе с URL скрипта. Для отделения URL от передаваемой
информации используют знак "?" (вопросительный знак). Неплохо бы чисто формально
напомнить, что все пробелы заменяются в URL на знак '+', а все специальные и
непечатные символы на последовательность %hh ,где hh-шестнадцатиричный код
символа. Методом GET можно одновременно передавать несколько значений. Как это
делается я расскажу вам позже, а пока будем довольствоваться одним передаваемым
значением.
Напишем программу, которая выводит квадрат числа, если
передаем ей число, или строку, если передаем текстовую строку. Передавать данные
следует примерно так:
"http://.../cgi-bin/script.pl?256"
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
if
($ENV{'QUERY_STRING'}**2 == 0){print $ENV{'QUERY_STRING'}}
else{print
$ENV{'QUERY_STRING'}**2}
И еще одна программка, выводящая
некоторые сведения о Вашем сервере:
#!/usr/bin/perl
#programm 9
print
"Content-Type:
text/html\n\n";
@array=($ENV{'SERVER_SOFTWARE'},$ENV{'SERVER_NAME'});
@array=(@array,$ENV{'SCRIPT_FILENAME'},$ENV{'HTTP_USER_AGENT'});
print
"<table>";
foreach (@array){
print
"<tr><td>$_</td></tr>\n";
}
print "</table>"
Попробуйте написать программу, выводящую
таблицу Пифагора с максимальным значением по оси X и Y, передаваемым методом
GET.
Сделайте так, чтобы ячейки закрашивались в шахматном порядке, а оси
имели черный цвет.
Напишите программу, которая выводит символьную
строку, переданную скрипту только в том случае, если IP удаленной машины не
соответствует 127.0.0.1 .