Forum Webscript.Ru

Программирование => Perl => Тема начата: woozex от 18 Июня 2002, 16:39:22

Название: 500 Internal System Error
Отправлено: woozex от 18 Июня 2002, 16:39:22
Встречается много сообщений на тему этой ошибки, но все не то. Помогите, плиз, кто может!
 
Вот мой скрипт:
    #!/usr/bin/perl
    use CGI qw/:cgi-lib/;
    print header(\'text/plain\'),
    "test\\n";
    ReadParse();
    print "var=$in{var}";
 
Сначала скрипт выполняется несколько раз нормально, но затем через раз вылезает subj, затем если еще понажимать на Reload - ошибка уже каждый раз.
Что это может быть?
 
Копирую в Ascii режиме, сервер Apache.
Скрипт типа
     #!/usr/bin/perl
     use CGI qw/:standard/;
     print header(\'text/plain\'),
     "test\\n";
выполняется нормально любое количество раз.
 
Сообщение об ошибке из error log:
 
[Tue Jun 18 12:47:28 2002] [error] Undefined subroutine &Apache::ROOT::cgi_2dbin::_31_2ecgi::header called at /var/www/world_cup/forum/cgi-bin/1.cgi line 3.
Название: 500 Internal System Error
Отправлено: Evgeny от 19 Июня 2002, 18:52:05
Что за ф-ция ReadParse()? Считывает параметры?
Если да, почему бы не использовать param(...)
Попробуй этот скрипт:

#!/usr/bin/perl
use CGI qw/:standard/;
print header(\'text/plain\'),
"test\\n";
$in{var}=param(\'var\');
print "var=$in{var}";
Название: 500 Internal System Error
Отправлено: woozex от 20 Июня 2002, 09:02:05
Спасибо, так работает, но пока неизвестно подойдет ли это мне, поскольку я переделываю старые скрипты с cgi-lib.pl на CGI.pm. Прочитал статью "Как перейти с cgi-lib.pl на CGI.pm" и стал делать так, как там написано. Ведь хочется все сделать с наименьшими затратами!
ReadParse действительно разбирает строку параметров. Она существовала в cgi-lib.pl и для совместимости скриптов ее и др. включили в CGI.pm
Название: 500 Internal System Error
Отправлено: Evgeny от 20 Июня 2002, 16:40:44
Можешь эту ф-цию использовать для разбора параметров.

if ($ENV{\'REQUEST_METHOD\'} eq "GET") { $buffer = $ENV{\'QUERY_STRING\'}; }
else { read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});  }
@nvpairs = split(/&/,$buffer);
foreach $pair (@nvpairs)
{  ($namebuffer, $valuebuffer) = split(/=/, $pair);
    $valuebuffer =~ tr/+/ /;
    $valuebuffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $in{$namebuffer}=$valuebuffer;
}

Я её в основном пользуюсь т.к. не люблю лишний раз модули подключать. (она по-моему и работает в cgi-lib.pl)
Название: 500 Internal System Error
Отправлено: Chs от 30 Июня 2002, 13:35:35
Цитировать
[Tue Jun 18 12:47:28 2002] [error] Undefined subroutine &Apache::ROOT::cgi_2dbin::_31_2ecgi::header called at /var/www/world_cup/forum/cgi-bin/ 1.cgi line 3.

При use CGI qw/:cgi-lib/;  функция header не экспортируется.
Можно сделать еще экспорт ее одной, тогда все будет работать.:)