PHP kennt Alias aus httpd.conf nicht

Alles, was PHP betrifft, kann hier besprochen werden.

PHP kennt Alias aus httpd.conf nicht

Postby Riebensiel » 29. May 2005 22:01

Hallo liebe Leute,

ich betreibe (derzeit noch "nur" im Intranet) einen kleinen Web Server, xampp, na klar, unter Windows XP. Nun habe ich in der httpd.conf mittels Alias einige virtuelle Pfade eingerichtet.

In Java Script kann ich sagen:

var jspfad="/myvirtpfad/";

und auf den virtuellen Pfad zugreifen.

In PHP funktioniert das leider nicht.
Wenn ich sage

$phppfad = '/myvirtpfad/';

findet das PHP Script nichts.
z.B.

$phppfad = 'c:/myabspfad/';

funktioniert hingegen. Mit einer absoluten Angabe kommt PHP also zurecht.

Mache ich beim Ansprechen des virtuellen Pfads in PHP etwas falsch? oder geht es einfach nicht? oder kann ich aus Javascript heraus den virtuellen Pfad an PHP übergeben? Oder wie? Oder was? Irgendwie verstehe ich da etwas nicht. PHP läuft ja serverseitig und javascript clientseitig. Eigentlich müßte es umgekehrt sein, dass PHP die httpd.conf Anweisungen kennt und Jacascript evtl. nicht...

Für sachdienliche Hinweise wäre ich sehr dankbar.

Schönen Gruß aus Hamburg

Riebensiel
Riebensiel
 
Posts: 12
Joined: 19. January 2004 23:20
Location: Hamburg

Postby jakimo72 » 30. May 2005 16:28

Die virtuellen Pfade gelten nur, wenn man sie über http anspricht.
$phppfad = "http://localhost/myvirtpfad/";
sollte funktionieren.
Ansonsten greift PHP einfach über die File-Schnittstelle
auf Dateien zu, und da gibt es keine virtuellen Pfade
(höchstens symbolische Links...).

Der Vergleich zwischen Javascript und PHP ist hier
wenig nützlich, da Javascript auf dem Client, PHP aber
auf dem Server ausgeführt wird.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Fehler liegt woanders

Postby Riebensiel » 30. May 2005 21:54

Hallo Jakimo,

vielen Dank für Deinen Hinweis. Inzwischen habe ich erkannt, dass meine Überlegung im Grundsatz falsch war. Ich lese mit php ein Verzeichnis aus, mit opendir und lese die Dateinamen in ein PHP Array ein. Dieses Array übergebe ich an JS zur weiteren Verarbeitung. Nun sind die virtuellen Pfade aus httpd.conf nicht wirklich Pfade, sondern URLs. Ein opendir auf eine URL kann, wenn ich es jetzt richtig verstanden habe, nicht funktionieren, da eine URL eben kein Verzeichnis ist. Vermutlich ist es allein aus Sicherheitsüberlegungen auch gut so, dass das Verzeichnis auf diese Weise nicht ausgeforscht werden kann. Dennoch ist es nicht schön, dass ich in PHP mit Pfaden arbeiten muss und in JS auf die URLs zugreifen muss. Wenn ich in JS nämlich auch den Pfad verwende, funktioniert das nur auf dem Rechner, auf dem der Server läuft und schon im Intranet nicht mehr. Aber auch das ist logisch, wenn man den Unterschied zwischen URL und Pfad versteht.
Allerdings kann man ja die Aliase in der httpd.conf so ähnlich benennen, wie die Pfade lauten, dann kann man mit ein paar Stringoperationen einigermaßen vernünftig arbeiten.

Jedenfalls vielen Dank, dass Du Dich meines Anliegens angenommen hast.

Gruß

Rudolf
Riebensiel
 
Posts: 12
Joined: 19. January 2004 23:20
Location: Hamburg

Postby jakimo72 » 31. May 2005 11:45

In PHP funktionieren die allermeisten Dateioperationen auch mit
http-URLs. Z.B. funktioniert fopen("http://www.server.de/pfad/datei.txt"); .

Diese Dateien sind aber auch über jeden normalen Browser aufrufbar,
und dürfen keine sicherheitsrelevanten Informationen enthalten...
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Nochmal danke!

Postby Riebensiel » 31. May 2005 14:05

Hallo Jakimo 72,

vielen Dank nochmal. Ich habe es ausprobiert. fopen mag funktionieren aber opendir nicht, bei genauerem Überlegen ist das wohl auch ganz gut so.

Meine Aufgabe ist es, Dateien aus verschiedenen Verzeichnissen mit dem gleichen JS zu verarbeiten, wobei sich die Verzeichnisinhalte jederzeit ändern und jederzeit Verzeichnisse dazu kommen oder wegfallen oder verschoben werden können, das Auslesen der Verzeichnisse muss also zur Laufzeit geschehen und aktualisierbar sein. Soweit ich es verstanden habe, kann JS keine Verzeichnisse auslesen und mir ist auch nicht bekannt, ob JS solche Anweisungen wie getimagesize kennt, ich glaube eher nicht. Also mache ich es mit PHP und übergebe die entsprechenden Dateinamen und Zusatzinfos in einem zweidimensionalen Array an JS So kann ich die Pfade in JS rekonstruieren.
Mein Problem dabei war, dass ich in PHP Pfade verwenden musste, um opendir und readdir machen zu können. In JS kann ich mit den Pfaden aber nichts anfangen, da brauche ich eine URL, um auf die Dateien zugreifen zu können.
Gelöst habe ich es jetzt so:
Wenn ich z.B. das Verzeichnis c:/Verz/Verz/MP3 bearbeiten will, lege ich in der httpd.conf ein Alias namen /c an, das auf c:/ verweist. In PHP heißt der Pfad dann c:/Verz/Verz/MP3 und an JS übergebe ich die URL /c /Verz/Verz/MP3

So brauche ich nur eine endliche Anzahl von Alias(en?) in der httpd.conf, nämlich höchstens soviele, wie ich LWs habe.
Die zu bearbeitenden Pfade schreibe ich in eine einfache TXT-Datei, die ich per PHP in ein dynamisches Array einlese. PHP liest die Verzeichnisse aus und wandelt nach oben beschriebenem Muster die Pfade in URLs und gibt die URLs und die jeweiligen Verzeichnisinhalte weiter. So brauche ich das HTML Dokument nicht anzufassen, wenn ich zusätzliche Verzeichnisse in die Arbeitsliste eintrage oder Verzeichnisinhalte sich ändern. Wenn ich in das HTML Dokument noch ein zyklisches reload oder refresh einbauen würde, würde der User noch nicht einmal merken, dass sich was geändert hat. Und da ich in der httpd.conf die URLs auf Vorrat angelegt habe, brauche ich auch diese Datei nicht ständig zu editieren und muß den Server auch nicht ständig neu durchstarten. Das Einzige, was ich noch nicht ausprobiert habe, ist die Situation, dass ich die Arbeitsliste gerade editiere, wenn ein User auf die Seite geht, selbst dann müsste es aber konsistent sein, weil die Datei vermutlich in dem Zustand gelesen werden würde, die sie hatte, als ich sie zum Editieren geöffnet habe.
Im Grossen und Ganzen bin ich mit meiner Lösung ganz zufrieden, eine kleine Baustelle gibt es noch bei der Übergabe von zweidimensionalen Arrays von PHP an JS, aber auch dafür wird es eine Lösung geben...

Schönen Gruß aus HH

Rudolf
Riebensiel
 
Posts: 12
Joined: 19. January 2004 23:20
Location: Hamburg

Postby jakimo72 » 31. May 2005 14:57

Und wie machst Du das mit der Sicherheit?
kann man jetzt über das Intranet oder sogar über das Internet auf
"http://DeinServer/C/Dokumente und Einstellungen/Riebensiel/Eigene Dateien/"
auf Deine persönlichen Daten zugreifen?
Welch ein Horrorszenario...

Ebenfalls Gruss aus HH

Jakimo
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Kann man nicht

Postby Riebensiel » 31. May 2005 15:48

Ich bin zwar manchmal doof, aber so doof nun auch wieder nicht. Systempartitonen sind bei mir immer extra, dort sind niemals Daten oder andere Progs (es sei denn, es lässt sich nicht verhindern), daher auch keine Verweise in der httpd.conf sinnvoll/notwendig.
(Allerdings liegt die Systempartiton bei mir niemals auf c:. C: ist damit ausgelastet, Bootpartition zu sein, da hat sich ja seit Win 3.1 nichts geändert. Gebootet wird von der ersten physikalischen Partition auf der ersten physikalischen Festplatte (auch wenn XP etwas anderes behauptet), es sei denn, dass man von einem WechselLW bootet oder einen Bootmanager verwendet). Ansonsten ist alles, was außerhalb von htdocs liegt, gesperrt und bei mir liegt alles außerhalb von htdocs.

Da gibt es

Forbidden
You don't have permission to access /e/ on this server.


--------------------------------------------------------------------------------

Apache/2.0.52 (Win32) mod_ssl/2.0.52 OpenSSL/0.9.7e PHP/5.0.3 Server at myserver Port 80


es sei denn, dass ich ein index.htm in dem Verzeichnis habe, dann kann der User sich index.htm anschauen. Ein beliebiges anderes HTML Doc darf dort liegen, ohne dass von außen zugegriffen werden kann.

Gruß

Rudolf
Riebensiel
 
Posts: 12
Joined: 19. January 2004 23:20
Location: Hamburg

Alles zurück

Postby Riebensiel » 31. May 2005 16:43

Eine Sicherheitslücke gibt es doch noch. Die Verzeichnisse sind zwar gesperrt, d.h. dieses Inhaltsverzeichnis wird nicht angezeigt, aber wenn man zufällig einen Dateinamen weiß, könnte geschaut werden. Da muß ich noch was tun.
Riebensiel
 
Posts: 12
Joined: 19. January 2004 23:20
Location: Hamburg


Return to PHP

Who is online

Users browsing this forum: No registered users and 9 guests