Январь 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 |
Разместил:
Автор: Андрей Черный