Perl и CGI программы — особенности использования


1. Использование готовых скриптов

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

  • Убедиться, что в скриптах указан правильный путь к интерпретатору:

Perl: /usr/bin/perl
Python: /usr/local/bin/python

Теперь вы можете скопировать свои скрипты на сервер.
Загружать файлы необходимо в каталог ваш_домен/cgi. Файлы из данного каталога будут доступны по адресу http://ваш_домен/cgi-bin/имя_файла. Для того чтобы CGI-скрипты запускались из корневого каталога сайта ваш_домен/docs, необходимо создать в нем файл .htaccess со следующим содержимым:

AddHandler cgi-script .cgi .pl .py
Options +ExecCGI

На скрипты необходимо установить права доступа 755 или -rwxr-xr-x.
Права доступа можно изменить с помощью файлового менеджера панели управления.


2. Написание простейшего CGI-скрипта

Рассмотрим написание простого CGI скрипта на Perl.
Если вы работаете под управлением ОС «Windows», то для работы с кодом скриптов вам необходимо использовать специализированный текстовый редактор, например, Notepad++. Стандартную для Windows программу «Блокнот» лучше не использовать. Для демонстрации работы CGI скрипта необходимо создать два файла. Первый файл представляет собой html-документ с формой ввода текста:

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
              <html>
              <head>
               <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
               <title> Пример работы с Perl</title>
              </head>
              <body>
                <form method='post' action='/cgi-bin/hello.pl'>
                  Введите ваше имя:<input type='text' name='name'>
                  <input type='submit'>
                </form>
              </body>
              </html>

Второй файл является CGI-скриптом

#!/usr/bin/perl
use CGI;
print "Content-type: text/html\n\n";
$my_cgi = new CGI;
$your_name = $my_cgi->param('name');
print "Hello $your_name!!!";

Первый файл вы можете разместить в каталоге ваш_домен/docs. Второй файл вы должны разместить в директории ваш_домен/cgi. Обязательно проверьте права на ваш CGI-скрипт. Они должны быть установлены в значение -rwxr-xr-x или 755.


3. Просмотр установленных модулей PERL

Для проверки установленных PERL-модулей необходимо последовательно выполнить следующие действия:

vim modules.pl

Таким образом будет создан файл modules.pl

  • Теперь необходимо его отредактировать, для этого нажмем Insert, напишем следующее:
#!/usr/bin/perl -w

                use ExtUtils::Installed;

                $installed = ExtUtils::Installed->new();
                foreach $module ($installed->modules()){
                   printf "Module: %s\t\tVersion: %s\n", $module, $installed->version($module);
                }

Для выхода из редактора с сохранением только что набранного текста, нажимаем Esc и затем :wq

  • Можем посмотреть установленные модули:

perl ./modules.pl


4. Установка дополнительных модулей PERL

Вы можете установить на хостинг дополнительные модули PERL из исходных кодов. Прежде чем приступать к установке, подключите последнюю версию PHP в разделе Управление веб-сервером Управление модулем PHP панели управления хостингом, при этом будет подключен обновленный набор программного обеспечения, который может включать в себя нужный вам модуль Perl.
Перед установкой требуется задать переменные окружения, чтобы установленные модули были доступны интерпретатору.

cat >> ~/.bashrc << "EOF"
PERL5LIB=$HOME/PERL/lib:$HOME/PERL/lib/perl5
export PERL5LIB

MANPATH=$HOME/PERL/share/man
export MANPATH
EOF

  • Чтобы изменения вступили в силу, выполните команду:

source ~/.bashrc

Для того чтобы установить выбранный модуль для PERL, необходимо выполнить следующую последовательность команд:

  • на странице http://search.cpan.org/ найдите нужный модуль, например, Net::SMPP и скопируйте ссылку для загрузки архива с исходными кодами модуля,
  • подключитесь к хостингу по SSH и перейдите в каталог для временных файлов

cd ~/tmp

  • загрузите архив на хостинг по найденной ссылке с помощью wget

wget http://search.cpan.org/CPAN/authors/id/S/SA/SAMPO/Net-SMPP-1.12.tar.gz

  • распакуйте архив и перейдите в каталог с исходными кодами модуля

tar -xf Net-SMPP-1.12.tar.gz
cd Net-SMPP-1.12

Установку необходимо выполнять в отдельный каталог, например, /home/login/PERL, где login — идентификатор услуги хостинга, указав переменную INSTALL_BASE.

  • Для установки модуля с помощью файла Makefile.PL используйте команды:

perl Makefile.PL INSTALL_BASE=$HOME/PERL
make
make install

  • Для установки модуля с помощью файла Build.PL используйте команды:

perl Build.PL
./Build --install_base $HOME/PERL
./Build install --install_base $HOME/PERL

Для использования установленных модулей в perl-скрипте нужно их подключить, добавив следующие строки в файл скрипта:

use lib "/home/login/PERL/lib";
use lib "/home/login/PERL/lib/perl5";
use Net::SMPP;

Для того чтобы веб-сервер Apache мог работать с дополнительными модулями, необходимо в панели управления хостингом включить модуль env_module и добавить следующие строки в файл .htaccess в корневом каталоге сайта или в каталоге с CGI-скриптами:

SetEnv PERL5LIB /home/login/PERL/lib:/home/login/PERL/lib/perl5

где login — идентификатор услуги хостинга.


5. Возможные ошибки

Ошибка 403

Если при обращении к скрипту вы видите сообщение об ошибке 403, это значит, что на скрипт установлены некорректные права доступа. На CGI-скрипты необходимо установить атрибут исполнения (права доступа 755 или -rwxr-xr-x). Атрибуты можно изменить с помощью файлового менеджера панели управления.

Ошибка 500

Если во время запуска своего скрипта вы видите сообщение о 500-ой ошибке, это значит, что в скрипте есть ошибка из-за которой транслятор Perl'а не может успешно завершить свою работу. Ошибка может быть как синтаксическая (например, вы забыли где-то закрыть кавычку или фигурную скобку), так и логическая, например, в результате каких-либо ваших действий происходит деление на ноль. Для того, чтобы понять причину ошибки, вам необходимо посмотреть лог-файлы веб-сервера, которые хранятся в каталоге /var/log/.

Всё ещё остались вопросы?