我是 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
uahst341
cPanel 的当前用户在哪里
我没有命令行访问权限。我可以如何在没有命令行提示符的情况下运行该文件?
更新
在托管服务提供商的帮助下,我发现我必须在/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/
网站顶部的目录中。如果您不确定,请咨询您的托管服务提供商。