运行 perl 文件且无法访问命令行时出现 500 内部服务器错误

运行 perl 文件且无法访问命令行时出现 500 内部服务器错误

我是 Perl 的新手。我test.pl使用以下代码创建了一个简单的文件:

#!/usr/bin/perl
print 'test';

将其上传到启用了 PERL 的 Linux 共享主机,并通过 cPanel 文件管理器将我的 PERL 文件权限更改为 755。

但是当我点击类似的链接时mydomain.com/test.pl,我收到了“500 内部服务器错误”。

在我的 cPanel 的“错误”部分中,我只看到这一行

uid:(1639/uahst341)gid:(1641/uahst341)cmd:test.pl

uahst341cPanel 的当前用户在哪里

我没有命令行访问权限。我可以如何在没有命令行提示符的情况下运行该文件?

更新

在托管服务提供商的帮助下,我发现我必须在/cgi-bin文件夹内创建 PERL 文件,通过 cPanel 文件管理器输入代码并添加如下行:print "Content-type: text/html\n\n";但是,当我在 Notepad++ 中以 UTF-8 格式编写相同的代码,然后将文件上传到服务器时,我再次收到 500 错误,并看到上传的文件比通过文件管理器创建的文件(UTF-8 格式)多 2 个字节。所以编码有问题。到底是哪个?

答案1

也许您的文件正在运行,但问题是它没有输出有效的 HTTP 响应?我会先修复这个问题,尽管我不确定该文件是否正在运行。

这接近最低限度的回应:

#!/usr/bin/env perl
print "HTTP/1.1 200 OK\r\n";
print "Content-Type: text/plain\r\n";
print "\r\n";
print "test\r\n";

第一行中使用 env 是可选的,但会使你的代码更加通用,是一个好习惯。

通常,您可以依靠 Web 服务器为您完成一些工作,因此稍微简单的版本是:

#!/usr/bin/env perl
print "Content-Type: text/plain\n\n";
print "test\n";

一旦你准备好了,最好就开始使用合适的库。看看https://perlmaven.com/hello-world-with-plain-cgi一些示例代码。如果您已经使用过其他语言,并且熟悉面向对象的概念,那么您可能应该从 perl 中的 CGI::Simple 开始。

如果您的 perl 脚本根本没有被执行,那么您需要了解一些有关 Web 服务器配置的信息。Web 服务器(例如,可能是 apache 或 nginx)需要查看后缀.pl并知道使用 perl 运行文件。它可能是这样配置的,也可能不是。它可能希望您使用后缀.cgi,或者您可能需要将文件放在/cgi-bin/网站顶部的目录中。如果您不确定,请咨询您的托管服务提供商。

相关内容