Отладка CGI-скриптов на Perl

Дневник админа
Отладка CGI-скриптов на Perl

CGI-отладка Perl-скриптов

CGI-отладка Perl-скриптов CGI-скрипты могут быть одними из самых & # 171; трудных для отладки & # 187; заявление. Как правило, они отлаживаются на сервере, на котором они будут работать. Процесс поиска ошибок, таких как синтаксические ошибки, становится очень сложной задачей, поскольку из-за интерфейса CGI сообщения об ошибках не доходят до оператора, отлаживающего сценарий, когда он сидит на клиентской машине. К тому же, наряду с платой за пропускную способность интернета, отладка скриптов CGI также становится довольно дорогой :).

Цель этой статьи — представить некоторые методы и приемы, которые помогут вам отлаживать скрипты CGI в Perl, а также указать из наиболее распространенных ошибок их кодирования.
Ниже предполагается, что отладка CGI выполняется под Windows-9x.

Подготовка среды рабочего стола

При написании и отладке сценариев CGI на Perl вы должны использовать локальный веб-сервер , т.е. веб-сервер, установленный на компьютере. В этом случае с точки зрения браузера работа с таким сервером не будет отличаться от работы с сервером в Интернете. Практически любой сервер Windows можно использовать в качестве локального веб-сервера, если он поддерживает сценарии CGI. Самыми простыми вариантами являются PWS (Personal Web Server) из Windows9x или IIS (Internet Information Server) из NT. Однако, если на вашем сайте используются такие вещи, как SSI, все же лучше установить Apache для Windows. Большинство провайдеров веб-хостинга сегодня имеют веб-сервер Apache под UNIX, так что эта совместимость не повредит. Кроме того, Apache позволяет использовать дополнительные настраиваемые переменные среды CGI, поэтому лучше отлаживать сценарии CGI, которые & # 171; реалистично & # 187; будет работать на Apache (хотя это мое мнение). Локальный сервер имеет & # 171; доменное имя & # 187; localhost и IP-адрес 127.0.0.1. Следовательно, доступ к нему осуществляется через URL-адрес в форме: http://localhost/& # 8230; Однако для запуска сценариев CGI на Perl недостаточно установить веб-сервер, необходимо также установить сам Perl. Я рекомендую Perl для Win32 от ActiveState.

После установки Perl вы должны ввести & # 187; его в настройках вашего веб-сервера в качестве обработчика сценариев для сценариев Perl. Разные веб-серверы делают это по-разному, прочтите документацию к серверу. Для PWS и IIS настройка Perl — это «особая задача». На большинстве веб-серверов Windows сценарий CGI принадлежит определенному «миру» (сценарий Perl, другой), поэтому обработчик упоминается по расширению имени файла. Если у вас такой сервер, вам следует настроить сценарии Perl CGI на то же расширение, что и у вашего хостинг-провайдера (стандарт де-факто — * .cgi, иногда * .pl). В Apache право собственности на сценарий определяется не расширением, а строкой & # 171; #! & # 8230; & # 187 в начале сценария, как почти все серверы UNIX. При этом для нас очень важно иметь возможность запускать Perl-скрипты & # 171; без веб-сервера & # 187; т.е. как обычные программы. Это очень полезно для проверки их на наличие синтаксических ошибок. Проверить, все ли установлено правильно, можно, написав простой скрипт:

 #!/Usr/bin/perl
печать & quot; Content-Type: text/plain; charset = windows-1251nn & quot ;;
print & quot; Сценарий успешно выполнен! Поздравляем! & Quot; 

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

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

Если вы видите сам скрипт или что-то вроде & # 171; Доступ запрещен & # 187;, & # 171; Permission Denied & # 187;, & # 171; Forbidden & # 187; или вы вообще ничего не видите (например, при загрузке& # 171; пустой & # 187; документ), проверьте настройки сервера скорее всего, у вас неправильные разрешения для папки cgi.
Теперь давайте попробуем запустить наш CGI-скрипт как обычную Perl-программу. Перейдите в программу оболочки (например, менеджер FAR) и введите: perl (адрес скрипта)

Результат должен быть:

 Content-Type: text/plain
; charset = windows-1251 Скрипт работал корректно! Поздравляем! 

Без слов в последней строке это могло быть & # 171; abracadabra & # 187; Ничего страшного; это просто несоответствие кода между скриптом и оболочкой, в которой мы его запускаем. Самое главное, что это работает. Если оба вышеуказанных теста прошли успешно поздравляю! Вы можете отлаживать большинство сценариев CGI на своем компьютере, не платя своему провайдеру ни цента! Итак, теперь у вас есть собственный & # 171; Интернет в миниатюре & # 187; :)))

Методы отладки скриптов

Очень распространенная синтаксическая ошибка — пропуск & # 171 ;; & # 187; в конце руководства. (Это особенно верно для тех, кто используется в Основах, где разделитель строк является разделителем между операторами. В Perl, как и в C/C ++, все разрывы строк, возврат каретки и табуляции рассматриваются как пробелы и называются & # 171; пробел & # 187;. Они не являются разделителями операторов. Единственным исключением является их использование в строковых константах, где они & # 171; сами по себе & # 187 ;, но это поддерживает только правило, что они не разделяют операторы.)
Итак, если в вашем скрипте есть синтаксическая ошибка, это сообщение об ошибке в любом случае не дойдет до вашего браузера. Чаще всего сервер выдает вам & # 171; 500 Internal Server Error & # 187; ошибка, когда в скрипте есть синтаксическая ошибка. Что ж, это считается & # 171; внутренней ошибкой сервера & # 187; & # 8230; но в какой строке это? Но теперь мы можем запустить сценарий CGI как программу & # 187; и увидите сообщение об ошибке Perl! Если мы сделаем умышленную ошибку в приведенном выше сценарии, удалив & # 171 ;; & # 187 ;; в конце предпоследней строки, а затем запустите ее & # 171; через сервер & # 187;, мы, вероятно, увидим & # 171; 500 Internal Server Error & # 187; написано заглавными буквами. Если мы запустим его & # 171; как программу & # 187 ;, мы увидим такое сообщение:

 синтаксическая ошибка в строке 3 test.cgi, рядом с & quot; print & quot;
Отладка CGI-скриптов на Perl

Выполнение test.pl прервано из-за ошибок компиляции.

Первая строка указывает, что синтаксическая ошибка произошла в test.cgi, строка 3, рядом с print. На мой взгляд, достаточно исчерпывающая информация! 🙂 (Во второй строке написано, что выполнение скрипта было прервано из-за ошибок компиляции). Теперь ищем строку 3, оператор печати, и устраняем ошибку. Кроме того, довольно неприятная ошибка, приводящая к совершенно непонятному поведению скрипта, — это пропуск закрывающей скобки (}). По моему опыту, все ошибки в сценариях CGI можно условно разделить на следующие категории:

Синтаксические (ошибки компиляции)

Ошибки связи CGI Логические

Прежде всего со всеми ними лучше всего обращаться с помощью описанного выше метода. Второй — неправильный вывод сценария: сценарий должен выводить свой ответ в формате HTTP, который является полем заголовка ответа, тогда пустая строка, за которой следует текст самого ответа. В приведенном выше примере будет напечатана строка заголовка: Content-Type: text/plain; charset = windows-1251; затем пустая строка и текст ответа:

 Скрипт работал нормально! Поздравляем! 

Когда сервер получает ответ от сценария, он обрабатывает заголовок, сгенерированный сценарием, добавляет к нему дополнительные поля и добавляет основную строку ответа. Вот почему сценарию CGI не нужно создавать полный заголовок. Обычно следует указывать поле Content-Type, но в любом случае пустая строка после заголовка обязательна.

Несколько слов о так называемом nph CGI-скрипты

Это скрипты, которые генерируют весь HTTP-заголовок. Следовательно, сервер неИли если вы отлаживали его на Apache, это, вероятно, это, вероятно, другой путь на вашем компьютере. Это для других программ, используемых сценарием CGI. Прием файлов, к которым получает доступ к сценарию.
в Windows нет разницы между великим и строчным буквы в именах файлов, например a.txt и a.txt Одинаковые имена. В системе UNIX, на которой большинство веб-серверов основаны, большие и строчные буквы W Имена файлов разные символы. Или скрипт, который открывает файл A.TXT: открытый файл, & # 187; A.txt & # 187 ;; Он будет хорошо работать под Windows, но он не будет работать под Unix (файл не будет найден). Наиболее распространенной ошибкой является загрузка всей страницы в & # 171; двоичный и # 187;. И если с файлами HTML и TXT Вы не будете проблемой, загруженной в этот режим (хотя это может быть), скрипты, загруженные таким образом, не будут работать.
Все файлы сценариев CGI, а также текстовые файлы, не используемые, должны быть загружены В режиме ASCII. Ссылка на файлы. Даже если все сделано правильно, вряд ли сценарий начнет работать сразу после загрузки на сервере Unix. Для работы вы должны установить разрешения на CGI и файлы, из которых они используют. Обычно, сразу после загрузки файлов на страницу у всех есть некоторые и # 171; стандартные разрешения (по умолчанию), например: — R R

Все файлы можно разделить На 3 группы с точки зрения необходимого доступа к ним:

  1. Файлы, используемые сценариями CGIPKI, используемые сценарием CGI для прочитанных штекеров, какой сценарий CGI использует для чтения и записи

обычно хостинга Поставщик Включение CGI определяет, какие права доступа они должны быть установлены для каждого типа файлов. Если нет, вы можете перейти к компромиссу со следующими настройками:

 

CGI & # 8212 Script; -Wx-R-X-R-X (755) чтение и # 8212; -W-R R (644) запись & # 8212 файлы; -W-RW-RW- (666)

Внимание! Некоторые серверы хостинга рекомендуют другим, более ограничительным конфигурациям разрешений для обеспечения лучшей защиты от красок на сайт и систему вообще! Так что следуйте инструкциям поставщика услуг хостинга, если они доступны!

Оцените статью