簡體   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