Шаг 4 - Тестируем CGI

Сейчас мы проверим, работает ли наш Apache. Для этого нам понадобится "Hello, World!", соответствующий CGI-стандарту.

#!/usr/bin/perl -w
print "Content-Type: text/html\n\n";
print "Hello, World!";

Так он выглядит. Сохраните этот код в файл test.cgi в поддиректорию cgi-bin той директории, куда у вас установлен Apache. Запустите свой браузер и наберите в адресной строке http://localhost/cgi-bin/test.cgi.

4_1.gif (6527 b)

А теперь о том, как это работает. HTTP-сервер Apache слушает 80-ый порт. Ваш браузер к этому порту подсоединяется и отправляет запрос соответствующий стандартам протокола HTTP. Сервер Apache, получив запрос, выдаёт на него ответ. Ответом может быть, например, HTML-страничка или вывод CGI-программы. Для конечного пользователя особой разницы нет. Естественно, что ответ тоже должен соответствовать протоколу. Необходимый минимум для этого в программе - это строка print "Content-Type: text/html\n\n";. Ею мы создали заголовок ответа. Заголовок отделяется от тела пустой строкой, поэтому у нас в конце два символа перевода строки. Строку Content-Type: text/html можно расшифровать следующим образом - "ответ будет текстовый, это будет HTML-страница". Он может быть и таким "Content-Type: image/gif" - "ответ будет картинкой в формате GIF". Но о протоколах нам пока рано. Я подробно расскажу об этом, но позже. А в этом шаге я ещё коснусь скрипта, который записывается в директорию cgi-bin при инсталляции. Он называется printenv.pl. Попробуйте набрать в адресной строке браузера http://localhost/cgi-bin/printenv.pl.

4_2.gif (15864 b)

Он вывел вам все переменные окружения. Его код вы можете легко посмотреть, открыв любым текстовым редактором. Там много лишнего для ваших неокрепших умов :) Можно чуть-чуть попроще:

#!/usr/bin/perl -w

print "Content-Type: text/plain\n\n";
foreach(keys(%ENV)) {
  $val = $ENV{$_};
  print "$_=\"$val\"\n";
}

Первая строка как обычно. Вторая - заголовок, только теперь это обычный "текстовый текст" :))) Незнакомые конструкции встречаются в третьей и четвёртой строке. Что это за конструкции я объясню в следующих шагах. А пока в двух словах принцип действия скрипта. Для скрипта переменные окружения - это хэш. Скрипт проходит в цикле по всем ключам этого хэша, выбирает значения этих ключей и выводит их на экран. Функция вывода нам уже знакома. Только на этот раз выводится не просто строка, а строка с переменными. Да ещё и содержащая в себе символ ". Интерпретатор считает строкой всё, что заключено в двойные кавычки (") или одинарные кавычки ('). Поэтому строку вида "какая-то строка, содержащая строку "внутренняя строка"" он посчитает двумя строками - "какая-то строка, содержащая строку " и "". Естественно, что он не поймёт, что это между строками такое болтается - внутренняя строка - и будет ругаться. Для этого символы, которые использует интерпретатор - ", ', #, @, [, ], $, %, надо "экранировать" символом \. Ууууу... понаварочил :) Осталось рассказать только про комментарии. В скрипте printenv.pl после первой строки вы видели примерно следующее:

##
##  printenv -- demo CGI program which just prints its environment
##

Это комментарий. Всё, что написано после символа # и до конца строки интерпретатор игнорирует. Для этого шага всё. В следующем продолжим разбирать непонятные моменты этого демонстрационного скрипта. Такой маленький, а разговора хватит на несколько шагов...


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Горностаев Сергей aka Deadcat - 05.02.2004