Помощь

Все разделы помощи → Вопросы по виртуальному хостингу

Perl скрипт выдает Internal Server Error. Почему?

Этому может быть несколько причин:

  1. Неверные права у файла скрипта, должны быть 755
  2. Файл скрипта содержит windows переносы строк
  3. Неверно указан путь к perl
  4. Ошибка в самом скрипте

Скрипты, написанные на языке Perl, в операционных системах Unix должны иметь правильный перенос строки. В операционной системе Windows в конце каждой строки ставится символ переноса строки и символ возврата каретки. В системах Unix используется только символ переноса строки. В результате скрипты, написанные под системой Windows и закаченные по FTP не в ASCII режиме, не работают.

Самый простой способ решить данную проблему - это перезакачать все Perl-скрипты в ASCII режиме. В этом режиме FTP клиент автоматически заменит все Windows-окончания строка на Unix-окончания.

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

perl -i -npe 's/\r//' myscript.pl

где myscript.pl имя вашего скрипта.

Какие модули Perl у вас установленны?

Установлены все стандартные модули. Также по запросу клиента мы можем установить необходимый модуль.

Какие права нужно выставлять файлам pl, cgi?

Для файлов cgi (perl, скомпилированные "C"-программы), права доступа должны быть 755 (rwxr-xr-x).

755 - исполнение-запись-чтение для владельца и чтение-исполнение для всех остальных.

Какой мне прописывать путь до Perl?

Самой первой строкой в скрипте Perl должна быть такая строка:

#!/usr/bin/perl 
Какой мне прописывать путь до Sendmail?

Вам надо указывать путь:

/usr/sbin/sendmail
Установка библиотек Perl в домашний каталог

Авторизуемся в нашем SSH клиенте (например, putty),

Переходим в каталог private

cd private 

Качаем необходимые модуль с cpan.org, командой (пример модуля, GD-2.45 )

wget http://search.cpan.org/CPAN/authors/id/L/LD/LDS/GD-2.45.tar.gz 

Распаковываем командой:

tar -xzf GD-2.45.tar.gz

Переходим в папку с модулем:

cd GD-2.45

Устанавливаем:

perl Makefile.PL PREFIX=~/private/modules
make
make test
make install

В Вашем скрипте после этого необходимо добавить:

use lib qw(/home/httpd/vhosts/domain.ru/private/modules
/home/httpd/vhosts/domain.ru/private/modules/lib
/home/httpd/vhosts/domain.ru/private/modules/lib64
/home/httpd/vhosts/domain.ru/private/modules/lib64/perl5/site_perl
/home/httpd/vhosts/domain.ru/private/modules/lib64/perl5
/home/httpd/vhosts/domain.ru/private/modules/lib/perl5/site_perl
/home/httpd/vhosts/domain.ru/private/modules/lib/perl5);