【发布时间】:2018-08-22 18:11:37
【问题描述】:
所以我有这个脚本 try.pl:
#!/usr/bin/perl -T
use strict;
use warnings;
print "content-type: text/plain\n";
print "\n";
$ENV{PATH} = "/usr/bin:/usr/sbin";
my $date = `/bin/date`;
print "This is $0, now is $date \n";
在两个位置:/vaw/www/html/website/cgi-bin/try.pl 和 /home/user/public_html/website/cgi-bin/try.pl 根据我打开哪个,我得到不同的结果: /vaw/www/html/website/cgi-bin/try.pl 给我:
This is /var/www/html/website/cgi-bin/try.pl, now is Tue Mar 13 17:11:56 EET 2018
和 /home/user/public_html/website/cgi-bin/try.pl 给我:
This is try.pl, now is Tue Mar 13 17:48:25 EET 2018
如您所见,问题在于 $0 只给了我 public_html 中的基本名称。我还要添加 cgi-bin/.htaccess:
Options +ExecCGI -Indexes
AddHandler cgi-script .pl
<Files ~ "\.(conf|config)$">
Order allow,deny
Deny from all
</Files>
我做的另一个测试是在另一台计算机上,$0 给出了 /var/www/html 和 public_html 中的绝对路径。有什么想法可能导致这种情况吗?
【问题讨论】:
-
你为什么需要
$0,它给你什么$ENV{"SCRIPT_NAME"}不需要? -
我将测试 $ENV{"SCRIPT_NAME"},但我需要了解为什么它在不应该的情况下表现不同。
-
为什么不应该呢?
$0是传递给 Perl 运行的文件名。如果你用完整路径调用脚本,你会得到它,但你也可以用相对路径调用它,这就是你得到的全部。 -
我通过浏览器调用它们,为什么在一台电脑上从 root 调用它,而在另一台电脑上从 cgi-bin 调用它?这就是我想知道的
-
不知道 - 您需要包含 Apache 配置的相关部分,以便任何人做出明智的回答而不是猜测。