Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache cgi perl脚本中的$0在/var/www/html和~/public\u html中的行为不同_Apache_Perl - Fatal编程技术网

Apache cgi perl脚本中的$0在/var/www/html和~/public\u html中的行为不同

Apache cgi perl脚本中的$0在/var/www/html和~/public\u html中的行为不同,apache,perl,Apache,Perl,所以我有一个脚本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

所以我有一个脚本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\u-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
This is try.pl, now is Tue Mar 13 17:48:25 EET 2018
和/home/user/public_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
This is try.pl, now is Tue Mar 13 17:48:25 EET 2018
正如您所看到的,问题是$0只在public_html中提供了basename。我还将添加cgi-bin/.htaccess:

Options +ExecCGI -Indexes
AddHandler cgi-script .pl

<Files ~ "\.(conf|config)$">
    Order allow,deny
    Deny from all
</Files>
Options+ExecCGI-索引
AddHandler cgi script.pl
命令允许,拒绝
全盘否定

我做的另一个测试是在另一台计算机上进行的,其中$0给出了/var/www/html和public_html中的绝对路径。您知道是什么导致了这种情况吗?

如果您需要知道脚本驻留在哪里,请使用该模块
FindBin
是一个标准模块,随Perl一起安装。有关标准模块的列表,请参见。

为什么需要
$0
,而
$ENV{“SCRIPT\u NAME”}
没有给你什么?我将测试$ENV{“SCRIPT\u NAME”},但我需要的是理解为什么它在不应该的情况下会有不同的行为。为什么不应该
$0
是传递给Perl运行的文件名。如果你用完整路径调用一个脚本,你会得到它,但你也可以用相对路径调用它,这就是你得到的。我是通过浏览器调用它们的,为什么在一台电脑上从root调用,在另一台电脑上从cgi bin调用?这正是我想要了解的——不知道——您需要包括Apache配置的相关部分,以便任何人都能做出明智的回答,而不是猜测@daxim然后使用
$FindBin::RealBin
而不是
$FindBin::Bin