【问题标题】:$0 in a cgi perl script behaves differenty in /var/www/html and ~/public_htmlcgi perl 脚本中的 $0 在 /var/www/html 和 ~/public_html 中的行为不同
【发布时间】: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 配置的相关部分,以便任何人做出明智的回答而不是猜测。

标签: apache perl


【解决方案1】:

如果您需要知道脚本所在的位置,请使用模块FindBinFindBin 是标准模块,随 Perl 一起安装。如需标准模块列表,请参阅perldoc perlmodlib

【讨论】:

猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 2015-05-27
  • 2016-04-13
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多