2010-02-09 71 views
-1

我安装CGI ::会话模块在我的主机创建我的cgi-bin perl的模块目录,然后提取其中的模块到该目录中,所以我必须:我的CGI :: Session安装有什么问题?

D: cgi-bin/perl-modules/CGI/ 
F: cgi-bin/perl-modules/CGI/Session.pm 
D: cgi-bin/perl-modules/CGI/Session/ 
F: cgi-bin/perl-modules/CGI/Session/File.pm 
D: cgi-bin/perl-modules/CGI/Session/ID/ 
D: cgi-bin/perl-modules/CGI/Session/Searialize/ 

在脚本怎么办?(这位于的cgi-bin /测试/):

 use lib '../perl-modules'; 
    use CGI::Session; 
    $session = new CGI::Session (
       "driver:File", 
       undef, 
       {Directory => '/tmp'} 
      ); 

$session->param('_logged_in', 1); 
$session->param('_remote_ua', $ENV{'HTTP_USER_AGENT'}); 
$session->expire('+2hr'); 

,一切工作正常,直到调用过期。当我把过期的呼叫放入一个eval中时,我得到以下错误:

Can't locate auto/CGI/Session/File/expire.al in @INC (@INC contains: ../perl-modules /usr/lib/perl5/5.8.7/i686-linux /usr/lib/perl5/5.8.7 /usr/lib/perl5/site_perl/5.8.7/i686-linux /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.7/i686-linux /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl .) 

任何想法?

+2

不要通过解压缩来安装模块。有时他们需要做一些事情来设置要安装的文件。使用INSTALL_BASE或--install_base参数来告诉发行版放置文件的位置。 – 2010-02-10 02:37:44

回答

1

最新CGI::Session distribution档案没有CGI :: Session :: File - 你必须使用非常旧的版本。在新版本中,您需要在新的调用中写入“driver:file”(注意'f'的情况)。

如果您需要过时的版本,并且无法在主机上安装任何内容,请在本地安装该版本的CGI :: Session,并将%perl%/ site/lib /目录下的“auto/CGI/Session /”目录复制到托管也。另一种选择是在没有cpan shell的情况下执行make,并从blib/arch复制该目录。

1

我认为你的问题在于相对路径。假设您的脚本正在从Apache或其他Web服务器执行,似乎很安全。在那种情况下,../perl-modules/可能在任何地方。

在我的网络服务器上,当前的工作目录是/usr/local/apache22/,所以../perl-modules/会解析为/usr/local/apache22/../perl-modules/usr/local/perl-modules/。为了克服这一点,我建议把绝对路径,而不是相对路径。例如:

use lib '/home/user105033/perl-modules/'; 
+1

旧的CGI :: Session使用Autoload,所以这不是路径问题。 – 2010-02-09 20:38:51

+0

只是认为它可能与它有关,因为在错误前面有一个古怪的'auto /'。 – 2010-02-09 20:47:12