Falscher Pfad bei perl scripts
Aqutes
- webserver
0 volker0 Aqutes0 volker0 volker0 Christoph Schnauß0 Aqutes
2 Christian Kruse
Ich habe mir einen Xitami Server installiert, dazu CGI und PHP
Ich hab die Umgebungsvaribalen definiert und PERL und PHP in die Serverkonfiguration geschrieben
das Ausführen ist kein problem
Weiters hab ich noch Virtuelle Hosts errichtet die jeder ein eigenen Ordner besitzen
dort gibt man den relativen pfad zu dem Root verzeichnis an und zum cgi-bin verzeichnis beides hab ich getan
wenn ich jetzt bei einem virtuellen host ein cgi-script aufrufe in dem der code
Code:
opendir(DIR,"./");
while(my $file = readdir DIR) {
print "DATEI: $file<br>\n";
}
closedir(DIR);
enthalten ist werden alle Dateien im Root des Webservers, also nicht des Virtuellen host angezeigt.
Hat vielleicht einer von euch schon dieses Problem gehabt und wenn ja wie hab ihr es behoben.
hallo aqutes,
mit der zeile
opendir(DIR,"./");
sagst du deinem skript explizit dass es das document root (./) öffnen soll. wenn das skript je nach virtual host ein spezielles verzeichnis öffnen soll musst du es ihm sagen. dazu kannst du in deiner httpd.conf in den jeweiligen <VirtualHost> sektionen mit der direktive setEnv die pfade setzen, also z.b.:
<VirtualHost xyz>
DocumentRoot /user/user1
...
setEnv USER_PATH /user/user1
...
</VirtualHost>
dann solltest du in deinem skript mit
opendir(DIR,$ENV{USER_PATH});
drauf zugreifen können.
hab ich allerdings nicht ausprobiert, also keine garantie.
gruss aus berlin, volker
ja aber das versteh ich nicht ganz,
weil bevor ich den computer aufgesetzt habe hatte ich
das selbe script und alle hat funktioniert
und außerdem sagt ja ./ aus, dass der pfad der ist wo das script liegt
sprich in meinem beispiel im cgi-bin ordner
/ root
./ selbe ordner
../ ein ordner hinauf
so ist es normalerweise
soviel ich weiss bedeutet './' oder 'root' im webserver-kontext immer document root. das cgi-bin verzeichnis liegt ja nicht ohne grund ausserhalb des document root, man muss unbedingt vermeiden dass clients darauf zugriff haben. die einzige instanz die auf das cgi-bin verzeichnis zugreifen darf ist der webserver selbst.
gruss aus berlin, volker
ok, wer lesen kann ist klar im vorteil, du benutzt ja gar keinen apachen. wie beim xitami-server die virtual host konfiguration funktioniert weiss ich nicht, keine ahnung ob es da auch sowas wie 'setEnv' gibt. allerdings wird dich dieser server auch nicht auf verzeichnisse ausserhalb des document root zugreifen lassen, deswegen nehme ich an dass auch in deinem fall mit './' document root gemeint ist.
gruss aus berlin, volker
hallo,
weil bevor ich den computer aufgesetzt habe hatte ich
das selbe script und alle hat funktioniert
Wie dein Script so ganz ohne Computer funktionieren konnte, müßtest du wohl etwas genauer darlegen.
und außerdem sagt ja ./ aus, dass der pfad der ist wo das script liegt
Nein, das ist es nicht _ganz_. Und wenn es so wäre, würdest du diese beiden komischen Zeichen doch gar nicht brauchen, weil sie keinen Sinn machen würden - tun sie auch tatsächlich nicht wirklich.
sprich in meinem beispiel im cgi-bin ordner
/ root
Welche: ServerRoot, DocumentRoot oder root-Verzeichnis des Server-Rechners?
./ selbe ordner
Nicht unbedingt.
../ ein ordner hinauf
Ja, in der Regel.
Um dein Problem nachvollziehen zu können, müßtest du aber etwas genauer angeben, was du denn an deinem Server wie konfiguriert hast und welches System du fährst.
Grüße aus Berlin
Christoph S.
Win 2000
Xitami Web server
Standard einstellungen des Xitami Servers:
Main HTML directory: ./webpages
Main CGI directory: ./cgi-bin
CGI URLs start with: /cgi-bin
Filters: .pl - D:\PERL\bin\perl.exe
Vitual Host:
Main HTML directory: ./webpages/test/
Main CGI directory: ./webpages/test/cgi-bin
CGI URLs start with: /cgi-bin
Filters:
Wenn ich einen virtuelen host einrichte möchte ich das das Root verzeichnis, das des virtuellen host ist und nicht des standard host
Sprich es wäre ja ein vergehen wenn benutzer auf andere virtuelle host zugreifen können.
und deshalb stimmt irgendwas bei meinen einstellungen im xitami nicht
你好 Aqutes,
und außerdem sagt ja ./ aus, dass der pfad der ist wo das script liegt
sprich in meinem beispiel im cgi-bin ordner
Erstmal steht . fuer das PWD, das Present Working Directory. Und die
CGI-Schnittstelle definiert nicht, was das PWD sein muss, wenn das CGI-Script
ausgefuehrt wird. Das ist beim Apachen idR das Verzeichnis, in dem das
Script liegt, aber das muss nicht so sein. Deshalb solltest du im Kontext
CGI nie mit relativen, sondern immer mit absoluten Pfadangaben arbeiten.
再见,
CK