LINUX.ORG.RU

Perl: FastCGI + die(), помогите пожалуйста


0

0

Здравствуйте! Скажите пожалуйста, как я могу использовать die() вместе с FastCGI? Вот есть такой скрипт(fasttest.fcgi):
#!/usr/bin/perl -w
use CGI::Fast qw(:standard);

while ($query = CGI::Fast->new()) {
print header(
-type => 'text/plain',
-charset => 'UTF-8'
);
print "Hello, World!\n";
die("I am die!\n");
}

И вот такая конфигурация fastcgi.conf для lighttpd:
fastcgi.server = (
"/test" => (
"TEST" => (
"socket" => "/tmp/test.socket",
"check-local" => "disable",
"bin-path" => "/srv/www/htdocs/cgi-bin/fasttest.fcgi",
"min-procs" => 2,
"max-procs" => 5,
"idle-timeout" => 20
)
)
)

Вот, и при выполнении данного скрипта, сообщение "Hello, World!" можно будет лицезреть ровно "max-procs" просмотров. После чего происходит ошибка - "500 - Internal Server Error". Помогает только перезапуск lighttpd. Как быть?

Вот с таким способом работает как надо:
#!/usr/bin/perl -w
use CGI::Fast qw(:standard);

while ($query = CGI::Fast->new()) {
eval {
print header(
-type => 'text/plain',
-charset => 'UTF-8'
);
local $SIG{__DIE__} = sub { print STDERR "SIG: @_"; };
print "Hello, World!\n";
die("I am die!");
};
}

Но в эффективности данного метода сомневаюсь...

anterior
() автор топика
Ответ на: комментарий от anterior

Хм.. тест с использованием Benchmark показал что с eval'ом все-равно что без него, так что думаю это вариант

anterior
() автор топика

а зачем die() в cgi?

1) die()
$ perl -e 'die();'; echo $?
255

2) exit()
$ perl -e 'exit();'; echo $?
0
$

я бы юзал 2 вариант или при использовании первого проверял бы $@ после блока eval

x97Rang ★★★
()
Ответ на: комментарий от x97Rang

> а зачем die() в cgi?

Очень просто. Я ловлю $SIG{__DIE__} и выдаю пользователю ошибку в формате xml с описанием номера строки и файла где произошла ошибка. Кроме того он используется как немедленное прекращение работы запроса.

anterior
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.