【问题标题】:keep getting internal error with apache perlapache perl 不断出现内部错误
【发布时间】:2015-08-13 06:07:15
【问题描述】:

我有简单的登录页面。当我输入 abc 和 123 作为登录凭据时,它应该将我重定向到登录成功页面,但它一直给我内部错误。如果登录信息不是 abc 和 123,它应该重定向到错误的登录页面。也许我的 if 语句是错误的。你能检查我的代码吗?请。

#!/usr/bin/perl

use CGI qw( :standard );

$user = param( "user" );
$password = param( "password" );

$user = param( "user" );
$password = param( "password" );

if ($user == "abc") && ($password == "123")
print redirect ( "../../login.htm" );
}

if (!$user ne "abc") || (!$password ne "123")
print redirect ( "../../wrong.htm" );
}

【问题讨论】:

  • 首先,请将use strictuse warnings 添加到您的程序中。然后去修复它会给你的错误。如果您希望错误显示在浏览器中,use CGI::Carp qw(fatalsToBrowser); 但不要将其留在生产环境中。另请注意,CGI 不再包含在最新版本 (5.22) 的核心 Perl 发行版中。
  • 当您从服务器收到内部错误报告时,它应该会说“更多信息可能在您的服务器日志中可用”。 阅读您的服务器日志

标签: perl cgi


【解决方案1】:

我将您的代码放入名为 test.cgi 的文件中,然后检查它是否存在编译错误。

$ perl -c test.cgi
syntax error at test.cgi line 11, near ") &&"
Unmatched right curly bracket at test.cgi line 13, at end of line
Unmatched right curly bracket at test.cgi line 17, at end of line
test.cgi had compilation errors.

所以这给了你一些看的地方。您用于 if 语句的语法在几个方面被破坏了。

这里有一些建议可以帮助您更有效地编写 Perl 代码。

  1. 仅仅因为 CGI 程序被编写为在 Web 服务器上运行,这并不意味着它们只能在 Web 服务器上运行。养成在 Web 服务器环境之外检查编译错误的习惯。
  2. 当您测试在 Web 服务器上运行的 CGI 程序时,错误和警告将被写入 Web 服务器错误日志。养成到那里查找有关您发现的问题的更多详细信息的习惯。
  3. 始终将use strictuse warnings 添加到您的代码中,并修复它们显示给您的问题。 use warnings 会发现您的代码中至少还有一个问题。

最后,写CGI程序并不是2015年最好的写web应用的方式,请看some alternatives

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2012-06-14
    • 2015-12-01
    • 2018-11-09
    • 2013-12-24
    • 2021-04-05
    相关资源
    最近更新 更多