Frage

Ich habe ein Skript, das in Perl geschrieben und als CGI ausgeführt. Es funktioniert gut. Vor kurzem habe ich das mod_perl Modul in Apache installiert ist, und die PerlModule ModPerl :: Registry-Richtlinie verwendet.

PerlModule ModPerl::Registry
PerlModule CGI
PerlSendHeader On

Alias /perl/ /real/path/to/perl/scripts/
<Location /perl>
SetHandler  perl-script
PerlHandler ModPerl::Registry
Options ExecCGI
</Location>

<Files *.perl>
SetHandler  perl-script
PerlHandler ModPerl::Registry
Options ExecCGI
</Files>

Ich habe gelesen, dass dies mit ich nicht meinem cgi Perl-Code ändern muß. (Ich immer streng Pragma verwenden, also keine Sorge über nicht initialisierte globale Variablen und so ähnlich).

Meine ursprüngliche Skript funktioniert nach wie vor, wie beabsichtigt, mit einer Ausnahme, Dateien, dass ich mit der mitgelieferten require () Funktion nicht mehr aufgelöst werden kann.

script.cgi:

#!/usr/bin/perl -w
use strict;
use CGI qw(:standard Vars);
require "includes/functions.cgi";

#blah blah, more stuff

script.perl

#!/usr/bin/perl -w
use strict;
use CGI qw(:standard Vars);
require "includes/functions.perl"; # <---- Returns error:  Can't locate includes/functions.perl in @INC
#blah blah, more stuff

Die Verzeichnisstruktur funktioniert wie folgt:

$ ls

script.cgi script.perl includes /

$ ls includes /

functions.cgi functions.perl

War es hilfreich?

Lösung

Von: http://perl.apache.org/docs /2.0/api/ModPerl/Registry.html

META: Dokument, dass jetzt wir nicht chdir () in das Verzeichnis Drehbuch, weil es den gesamten Prozess unter Threads beeinflusst. ModPerl :: RegistryPrefork sollte von denjenigen genutzt werden, die nur unter prefork MPM ausgeführt werden.

so, wenn Sie mit prefork MPM Apache2, sollten Sie versuchen, ModPerl :: RegistryPrefork verwenden. Wenn Sie Arbeitnehmer verwenden, oder ein Ereignis oder Fenster, Sie gehen zu haben Ihr Programm nicht ändern davon ausgehen, dass die cwd das Verzeichnis ist, dass das Perl sitzt in.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top