2012-01-11 174 views
1

我有一個運行mod_fcgid的apache 2 webserver。 CGI腳本通過傳遞一些環境變量,然後exec'ing一個Perl程序,執行如:將env變量傳遞給fcgi(perl)

index.cgi: 
#!/bin/sh 
export TEST_VAR=test 
exec test.pl 

test.pl: 
#!/usr/bin/perl 
use CGI::Fast; 
while ($q = new CGI::Fast) { 
    print "Content-type: text/html\r\n\r\n"; 
    print "$ENV{TEST_VAR}"; 
} 

這不FCGI運行的時候,卻使它時(例如,在正常工作,通過「SetHandler fcgid腳本」 .htaccess),TEST_VAR沒有通過(甚至沒有在第一次運行)。除此之外,fcgi似乎確實有效。

任何想法或建議的方法?我希望根據各種配置原因如上所述設置外部環境,但這不是強制性的。

謝謝!

+0

會使用配置文件是一種可能的選擇嗎?我發現它傾向於使事情比依靠環境變量更清楚(而且更加一致)。 – Ilion 2012-01-22 13:01:31

回答

0

我想你必須檢查/更新你的apache配置。

1)首先我會檢查apache設置的環境。從FastCGI的網站:

要通過每個請求的環境變量FastCGI應用程序,看看:mod_env(SETENV,PassEnv,UnSetEnv)...

從FCGI手冊:

使用FcgidInitialEnv定義環境變量傳遞到FastCGI應用程序...

也許這是一些操作系統/沙箱/虛擬機/ chroot的奇怪安全功能,它們會在%ENV結束之前修改環境變量?

2)FastCGI腳本的文件擴展名通常是.fcgi,而不是.cgi或.pl。 apache是​​否可以將您的任何腳本識別爲FastCGI/FCGI?你在Apache配置中爲AddType/AddHandler/SetHandler/FastCgiServer設置了什麼?

另外:我不確定你的Perl腳本甚至留在內存中。 shell腳本中的exec生成一個新的「標準」perl子進程,在腳本運行後應該終止,或者不運行?