繁体   English   中英

Perl CGI脚本的环境变量

[英]Environment variable for perl cgi scripts

我有一个类似于以下内容的cgi脚本:

BEGIN {
    unshift (@INC, "$ENV{'HOME'}/www/cgi-bin/SiteSpecific");
}

print "Content-type: text/html\n\n";
use SiteObject;
my $siteObjInst = SiteObject->instance();
print $siteObjInst->{HideFields};

这在命令提示符下可以正常运行,但是当从浏览器作为CGI脚本运行时失败。 可能未设置$ ENV {'HOME'},因为脚本无法找到该模块。

是不是CGI脚本没有在shell中运行并且没有找到环境变量?

如果上述情况成立,是否需要使用其他方法在BEGIN块中设置所需的变量?

谢谢你的帮助。

一个CGI程序将由Web服务器设置其环境。 可以根据是否设置Web服务器来设置是否设置HOME,如果设置了HOME,则可能会指向运行该Web服务器的用户的主目录,而不是您的主目录。

您可以从CGI程序中打印$ ENV {HOME}的值,甚至更好的是,打印整个%ENV哈希值以查看实际情况。

以我的经验,最好将完整路径硬编码为额外的库,或者在外部设置路径(例如,使用PERL5LIB)。 如果要在程序内部进行设置,请使用“ lib”编译指示,而不要直接修改@INC:

use lib '/home/user/www/cgi-bin/siteSpecific';

您绝对不能保证$ENV{HOME}外壳程序和运行Web服务器的ID具有相同的变量。 暂时忘记所有代码,然后尝试以下操作:

print "Content-type: text/html\n\n";
print  q[<html><head><title>A Page</title></head>]
    . qq[<body><h1>\$HOME=$ENV{HOME}</h1></body></html>]
    ;

甚至这个:

use strict;
use warnings;
use CGI;

my $q = CGI->new;
print $q->header
    , $q->start_html( 'A Page' )
    , $q->start_table
    , $q->Tr( $q->th( 'Name' ), $q->th( 'Value' ))
    , ( map { $q->Tr( $q->td( $_ ), $q->td( $ENV{$_} )) } sort keys %ENV )
    , $q->end_table
    , $q->end_html
    ;

要获取一些问题和可能的答案的列表,请从如何对Perl CGI脚本进行故障排除开始

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM