Работа с Perl (.pl) скриптове

При всички Linux хостинг планове се поддържа Perl. Поддържаната версия на Perl e 5.10. За коректната работа на скриптове написани на Perl е необходимо да е изпълнено следното:

1. Правата на скрипта трябва да са 0755

2. Необходимо е скрипта да върне хедър, като това може да се осъществи с поставяне, например на следното:

#!/usr/bin/perl
print "Content-type: text/plain", "\n\n";

3. Пътят до Perl, който се задава в началото на скрипта, е:

#!/usr/bin/perl

4. Скриптът е необходимо да бъде в UNIX формат (не в ANSI).

Ето примерен скрипт, който функционира коректно:

#!/usr/bin/perl
print "Content-type: text/plain", "\n\n";
use strict;
use warnings;
print "Hello, World!\n";

Ако при тестовете с посочения скрипт се получи съобщение за грешка Internal Server Error, то най-вероятно правата на файла не са 0755.

На сървърите за споделен хостинг Perl работи като CGI или FastCGI.

По подразбиране се ползва CGI протокола. Ползването на FastCGI става чрез модула CGI:Fast.

За да се активира FastCGI е необходимо в директорията на скрипта във файл .htaccess да се добави следното:

AddHandler fcgid-script .pl

Също така в самия скрипт е необходимо да се укаже ползването на модула. Ето примерен скрипт, който работи под FastCGI:

#!/usr/bin/perl
print "Content-type: text/plain", "\n\n";
use strict;
use FCGI;
use Data::Dumper;
use IO::Handle;my $count = 0;my $in = new IO::Handle;
my $out = new IO::Handle;
my $err = new IO::Handle;
my $r = FCGI::Request($in,$out,$err);while($r->Accept() >= 0) {
my $me = `whoami`;
$out->print( "Content-type: text/html\r\n\r\n");
$out->print( "<pre>");
$out->print( "Count: ",($count+=3),"\n");
$out->print( "Me: $me\n");
$out->print( "Env: " . Dumper(\%ENV) . "\n");
$out->print( "Len: " . $ENV{'CONTENT_LENGTH'} . "\n");
if($ENV{'CONTENT_LENGTH'}) {
my $len = $ENV{'CONTENT_LENGTH'};
my $buf;
read(STDIN,$buf,$len);
$out->print( "POST ($len): $buf\n");
}
}

След като се достъпи скрипта през уеб, на страницата ще се визуализира подробна информация, в която ще присъства реда:

‘FCGI_ROLE’ => ‘RESPONDER’,

Още един тестов скрипт, който работи под CGI и FastCGI:

#!/usr/bin/perluse CGI::Fast qw(:standard);
$COUNTER = 0;
while (new CGI::Fast) {
print header;
print start_html("Fast CGI Rocks");
print
h1("Fast CGI Rocks"),
"Invocation number ",b($COUNTER++),
" PID ",b($),".",
hr;
print end_html;
}

При достъпването на този скрипт през уеб, когато се ползва CGI протокола, при презареждане на страницата ще се вижда различен номер на PID (proccess ID). Това означава, че всеки път се стартира нов процес.

Когато е активиран FastCGI, при презареждане няма да се стартира нов, различен процес за обработката на perl скрипта и номера на процеса (PID) ще си остане същия. Ще се промени номерът на извикванията (Invocation number).

Обновена: 11.10.2022
Беше ли Ви полезна тази статия?

Вижте още