perl脚本无法使用浏览器打开,并且可以使用Linux shell命令

时间:2013-10-25 16:34:51

标签: perl cgi-bin

我有一些perl脚本文件已经启动并运行了几年,突然间,过去几天,它们都是up,down,up,down,.....没有语法对他们来说是错误的,因为有时候他们已经出现了,并且他们已经存在了很长一段时间,我最近没有改变它们。另外,我可以从Lunix shell命令运行它们没有任何问题,文件权限是755,所以一切似乎都设置正确。它们由网络托管公司托管,我无法访问服务器日志文件。

错误消息是典型的perl错误消息:

内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请与服务器管理员联系,告知他们错误发生的时间以及您在此错误发生之前执行的操作。 服务器错误日志中可能提供了有关此错误的更多信息。

2 个答案:

答案 0 :(得分:4)

在程序的早期添加use CGI::Carp qw( fatalsToBrowser );,以便将错误返回给浏览器。

或者,您可以使用CGI :: Carp使用的相同技术或脚本的包装器将错误保存在您自己的日志文件中。

将以下内容添加到脚本的开头,以便将错误和警告记录到您选择的日志文件中。

sub self_wrap {
   my $log_qfn = "$ENV{HOME}/.web.log";  # Adjust as needed.
   open(my $log_fh, '>>', $log_qfn)
      or warn("Can't append to log file \"$qfn\": $!"), return;

   require IPC::Open3;
   require POSIX;

   my $prefix = sprintf("[%s] [client %s] ",
      POSIX::strptime('', localtime),
      $ENV{REMOTE_ADDR} || '???'
   );

   my $suffix = $ENV{HTTP_REFERER} ? ", $ENV{HTTP_REFERER}" : '';

   my $pid = IPC::Open3::open3(
      '<&STDIN',
      '>&STDOUT',
      local *CHILD_STDERR,
      $^X, $0, @ARGV
   );

   while (<CHILD_STDERR>) {
      print(STDERR $_);
      chomp;
      print($log_fh $prefix, $_, $suffix, "\n");
   }

   waitpid($pid, 0);
   POSIX::_exit(($? & 0x7F) ? ($? & 0x7F) | 0x80 : $? >> 8);
}

BEGIN { self_wrap() if !$ENV{WRAPPED}++; }

答案 1 :(得分:0)

如果您的网站最近被托管公司转移到了其他服务器上,或者最近更改了服务器设置,请尝试使用“另存为”&gt;&gt;保存带有HTML套件的文件。 “另存为UNIX格式”,然后上传。