2010-05-27 129 views
0

我正在使用一個在IIS 6中被稱爲CGI scipt的Perl模塊,該模塊正在被轟炸。 XP機器上的相同文件夾結構(IIS 5.1)非常棒。如果我在第9行刪除模塊加載命令,它會打印「即將載入」和「確定」,但是當我嘗試運行如何從IIS6中的相對路徑加載Perl模塊?

use Language::Guess; 

我收到

指定的CGI應用程序 由於沒有返回完整的HTTP標頭集合而導致行爲不當。

在瀏覽器中。

的文件夾結構是 /cgi-bin/test.pl /PerlModules/Language/Guess.pm

我試圖調整文件/文件夾的權限,並已審閱我的IIS配置一次又一次。它可以從IIS機器上的命令行運行良好,或者如果我將模塊複製到\ Perl \ site \ lib中,但是我沒有權限在此腳本指定的共享服務器上加載模塊。我錯過了一些簡單的東西嗎

這裏是test.pl

use strict; 
use CGI ':standard'; 

print header("text/html"); 

use lib "..\\PerlModules\\"; 
print "about to load<br/>"; 
#bombs here 
use Language::Guess; 

print "ok" 
+0

編輯問題讓它自己回答很奇怪。 – 2010-05-31 10:35:53

回答

2

的問題是線

use lib "..\\PerlModules\\"; 

將其更改爲完整路徑的Perl模塊,其中:

use lib "C:\\Perl\\PerlModules\\"; 

或什麼。

原因是您的CGI腳本從同一目錄中的命令行運行是正常的,但是當它由服務器從另一個目錄運行絕對路徑時,目錄..\\PerlModules\\不再是正確的位置這些模塊(因爲現在......相對於服務器的目錄而不是你的腳本)。當它嘗試加載模塊時,它無法找到它並輸出錯誤消息。 Web服務器無法應對錯誤消息,因此您可以獲得上述信息。

如果您不想在您的cgi腳本中使用絕對路徑,請使用FindBin模塊在BEGIN塊內使用use lib進行調查。這減輕了這種問題

一件事是CGI :: Carp模塊和它的「fatalsToBrowser」選項:

use CGI::Carp 'fatalsToBrowser'; 

捕獲錯誤&拋出他們到瀏覽器。這僅用於調試。

+1

關於CGI :: Carp模塊的大提示。 您的答案的最終代碼是 使用FindBin; 使用lib「$ FindBin :: Bin /../ PerlModules」; – Laramie 2010-05-27 06:29:12

+0

這是在一個BEGIN {};是不是? – 2010-05-27 06:31:10