如何从IIS6中的相对路径加载Perl模块?
我正在使用一个在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"
的问题是线
use lib "..\\PerlModules\\";
将其更改为完整路径的Perl模块,其中:
use lib "C:\\Perl\\PerlModules\\";
或什么。
原因是您的CGI脚本从同一目录中的命令行运行是正常的,但是当它由服务器从另一个目录运行绝对路径时,目录..\\PerlModules\\
不再是正确的位置这些模块(因为现在......相对于服务器的目录而不是你的脚本)。当它尝试加载模块时,它无法找到它并输出错误消息。 Web服务器无法应对错误消息,因此您可以获得上述信息。
如果您不想在您的cgi脚本中使用绝对路径,请使用FindBin
模块在BEGIN块内使用use lib
进行调查。这减轻了这种问题
一件事是CGI :: Carp模块和它的“fatalsToBrowser”选项:
use CGI::Carp 'fatalsToBrowser';
捕获错误&抛出他们到浏览器。这仅用于调试。
关于CGI :: Carp模块的大提示。 您的答案的最终代码是 使用FindBin; 使用lib“$ FindBin :: Bin /../ PerlModules”; – Laramie 2010-05-27 06:29:12
这是在一个BEGIN {};是不是? – 2010-05-27 06:31:10
编辑问题让它自己回答很奇怪。 – 2010-05-31 10:35:53