Январь 25, 2006

Отладка CGI-скриптов на Perl (Часть 2)

При установке всего вышеизложенного для нас очень важна возможность запускать Perl-скрипты "без веб-сервера", т.е. как обычные программы. Это очень удобно при проверке их на синтаксические ошибки.

Проверить правильную установку всего можно, написав простой скрипт:

#!(путь к Перл)
print "Content-Type: text/plain ;
charset=windows-1251\n\n";
print "Скрипт отработал успешно! Поздравляю!";

Сохраните этот скрипт в файле, например, test.cgi и положите этот файл в вашу cgi-bin папку.

Теперь проверьте работу скрипта, запустив браузер и выполнив URL:

http://localhost/cgi-bin/test.cgi

Если все нормально, вы должны увидеть в окне браузера следующий вывод:

Скрипт отработал успешно! Поздравляю!

Если же Вы вместо этого вывода скрипта увидели на экране сам скрипт или нечто вроде "Access Denied" , "Permission Denied" , "Forbidden" или ничего не увидели вообще (как при загрузке "пустого" документа), то проверьте настройки Вашего веб-сервера - скорее всего, у Вас неверно установлены права доступа на Вашу cgi -папку.

Теперь попробуем запустить наш CGI-скрипт как обычную программу на Perl. Зайдем в какую-нибудь команднострочную оболочку (например, FAR manager) и наберем:

perl (адрес Вашего скрипта)

В результате Вы должны увидеть вывод:

Content-Type: text/plain ;charset=windows-1251

Скрипт отработал успешно! Поздравляю!

Вместо слов в последней строчке возможна "абракадабра" - это ничего страшного; просто несоответствие кодировок в скрипте и в оболочке, в которой мы его исполняем. Главное, чтобы он заработал.

Если оба вышеуказанных теста прошли успешно - поздравляю! Теперь Вы можете отлаживать большинство CGI-скриптов на своем компьютере, не платя провайдеру за это ни копейки! Теперь у Вас есть свой маленький "интернет в миниатюре" :)))

Приемы отладки скриптов.

Довольно распространенной синтаксической ошибкой является пропуск ";" в конце оператора. (особенно это характерно для тех кто привык к Бейсику, где разделитель строки является разделителем между операторами. В Perl, как и в C/C++, все переводы строки, возвраты каретки и табуляции приравнены по значимости к пробелу и называются "пробельными символами". Разделителями операторов они не являются. Единственным исключением является их использование в строковых константах, где они являются "сами собой", но это только подтверждает правило, что они не разделяют операторы.)

Итак, если Ваш скрипт содержит синтаксическую ошибку, то сообщение об этой ошибке все равно до браузера не "дойдет". Чаще всего при синтаксической ошибке в скрипте сервер выдает ошибку "500 Internal Server Error". Что ж, это действительно считается "внутренней ошибкой сервера"... Вот только в какой она строке?!

Но ведь мы теперь можем запустить CGI-скрипт "как программу", и увидеть сообщение Perl об ошибке!

продолжение следует...

Часть 1

Часть 3

Разместил:

Автор: Андрей Черный

Ваш комментарий

Обсудить на форуме?

Подумайте, прежде чем высказать своё мнение. Постарайтесь сделать свой комментарий полезным для других. Не используйте ненормативную лексику. Пользователи, пишущие "от нечего делать" бессмысленные наборы символов, будут блокироваться навсегда.