Frage

Ich installierte CGI :: Session-Modul auf meinem Host durch die Perl-Module Verzeichnis in meinem cgi-bin zu schaffen und dann das Modul in das Verzeichnis zu extrahieren, so habe ich:

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/

In einem Skript ich (diese befindet sich in cgi-bin / test /):

     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');

funktioniert alles einwandfrei, bis der Anruf abläuft. Wenn ich legte verfallen der Anruf innerhalb eines eval ich die folgende Fehlermeldung erhalten:

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 .)

Irgendwelche Ideen?

War es hilfreich?

Lösung

Aktuelle CGI :: Session Distribution Archiv hat CGI nicht :: Session :: File - Sie müssen sehr alte Version benutzen. In neuer Version, müssen Sie schreiben. "Treiber: Datei" in neuem Anruf (Anmerkung Fall von 'f')

Wenn Sie diese veraltete Version benötigt und kann nichts installieren, auf Hosting, installieren Sie diese Version von CGI :: Session lokal und kopiert "auto / CGI / Session /" Verzeichnis von% Perl% / site / lib / Hosting zu. Eine weitere Option ist make ohne cpan Shell und kopiert, die dir von blib / Bogen zu machen.

Andere Tipps

Ich denke, das Problem liegt in der relativen Wegfindung. Es scheint sicher davon ausgehen, dass Ihr Skript von Apache oder einem anderen Web-Server ausgeführt wird. In diesem Fall ../perl-modules/ könnte fast überall sein.

Auf meinem Webserver, ist das aktuelle Arbeitsverzeichnis /usr/local/apache22/, so ../perl-modules/ zu /usr/local/apache22/../perl-modules lösen würde, oder /usr/local/perl-modules/. Um dies zu überwinden, würde ich vorschlagen, in anstelle einem relativen Pfad einen absoluten Pfad setzen. Zum Beispiel:

use lib '/home/user105033/perl-modules/';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top