Schrift
[thread]3114[/thread]

Pfad verloren...: Arbeits-Verzeichnis bei mod_perl ändern?



<< >> 8 Einträge, 1 Seite
macMeck
 2004-05-18 16:03
#30754 #30754
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Salut zusammen,

ich habe für ein Projekt angefangen CGI-Skripte nach mod_perl zu portieren. Soweit kein Problem, außer dass ich mit dem Pfad nicht klarkommen.
Unter CGI ist das Arbeitsverzeichnis ja das Verzeichnis, in dem das aktuelle Skript ausgeführt wird. In mod_perl ist es aber anscheinend das Apache-Verzeichnis. Soll heißen: Ich habe jetzt das Problem, dass meine relativen Pfade zum Beispiel zu config-Dateien (so ala '../setup/config.ini' ) nicht mehr funktionieren.
Gibt es da ne Möglichkeit irgendwo im Apache Config-Skript dieses Arbeitsverzeichnis einzustellen? Bzw. weiß jemand wie das geht ???

Dank euch schon mal...

macMeck\n\n

<!--EDIT|macMeck|1084881839-->
It all works, as long as it's documented!
ptk
 2004-05-18 16:12
#30755 #30755
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Benutzt du Apache::Registry oder echte Handler?
macMeck
 2004-05-18 17:04
#30756 #30756
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Apache::Registry... erstmal.
It all works, as long as it's documented!
ptk
 2004-05-18 18:12
#30757 #30757
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Damit sollte
Code: (dl )
1
2
use FindBin;
use lib "$FindBin::Bin";
funktionieren, um auch relativ zum Skript vorhandene Module einzubinden. Wenn du Dateien mit relativen Pfad laden willst, musst du
Code: (dl )
open(my $fh, "$FindBin::Bin/datei")
schreiben. Oder du machst ein
Code: (dl )
chdir $FindBin::Bin
am Anfang. Aber du musst bedenken, dass dieses chdir bei jedem Aufruf des Apache::Registry-Skripts durchgefuehrt werden muss, da andere Skripte im selben Apache-Prozess auch ein chdir machen koennen.
Strat
 2004-05-19 00:42
#30758 #30758
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht in der httpd.conf die Umgebungsvariable PERL5LIB auf das Verzeichnis setzen?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
macMeck
 2004-05-21 14:23
#30759 #30759
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Also der Vorschlag von ptk geht nicht, weil in der "$FindBin::Bin" auch das Apache-Verzeichnis steht... Aber die Geschichte von Strat werde ich mir mal anschauen...
It all works, as long as it's documented!
ptk
 2004-05-21 14:52
#30760 #30760
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das Problem bei FindBin ist, dass der erste Aufruf von FindBin (und sei es in einem anderen Skript oder einer anderen von httpd eingebunden Konfigurationsdatei) gewinnt und der Wert von $FindBin::Bin auf alle Ewigkeit in diesem Prozess festgeschrieben ist.

Um das zu umgehen, kann man entweder
Code: (dl )
1
2
use FindBin;
FindBin->again;

schreiben (nur in *sehr* neuen Perls) oder
Code: (dl )
1
2
delete $INC{'FindBin.pm'};
require FindBin;


Das Problem ist auch unter "KNOWN ISSUES" in der Manpage zu FindBin beschrieben.
macMeck
 2004-05-21 16:55
#30761 #30761
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Okay, Punkt für dich. Wer lesen kann ist mal wieder klar im Vorteil ;)

Aber die Lösung, das in der httpd.conf irgendwie zu verändern wäre halt schon die schönere, weil man das dann beim Programmieren im Skript nicht vergessen kann...

macMeck
It all works, as long as it's documented!
<< >> 8 Einträge, 1 Seite



View all threads created 2004-05-18 16:03.