Dateizugriff auf Rechner im LAN ohne Webserver dort


Mike Rofon

Erfahrenes Mitglied
Ich möchte... bzw. ich MUSS... von meinem PC mit Apache aus mittels PHP, Dateien (XML) lesen, die auf einem PC im LAN (mit fester IP) in einem Verzeichnis XY liegen. Auf dem entfernten Rechner wurde Freigabe erteilt. Einen Webserver gibt es dort nicht. Ich kann auch keinen installieren, es ist nicht mein Rechner. Hier zu Hause JA, aber dann irgendwann im Einsatz NICHT. Und dieses Szenario gilt es zu bauen.
Wie komm ich mittels PHP an die Dateien ran? simple_xml_loadfile(URL) ... aber wie lautet die URL?Falls das überhaupt irgendwie geht...
 
Zuletzt bearbeitet:

Mike Rofon

Erfahrenes Mitglied
Ich Depp... Wahrscheinlich über netzlaufwerk verbinden... Heute morgen kam ich drauf
 
Zuletzt bearbeitet:

Mike Rofon

Erfahrenes Mitglied
... oder auch nicht. Muß das DOCH wieder hoch holen.
Also: Ich habe das Netzlaufwerk verbunden.Laufwerksbuchstabe R: auf dem Rechner
Dann habe ich ins Webserver-Root eine Verknüpfung erstellt auf dieses Laufwerk R:
Die heißt "Reports"
Idee war, per simple_xml_loadfile("Reports/XML/daten.xml") diese Datei einzulesen.
Bekomme aber "failed to load external entity <pfad/dateiname>"
Im Dateiexplorer dagegen klicke ich auf die Verknüpfung, sehe den Ordner XML und danach auch die Datei. Da siehts schick aus, also an den Rechten liegt es nicht.
Also wo ist der Fehler?
 

Mike Rofon

Erfahrenes Mitglied
Können andere Programme (z. B. Notepad++) die Datei öffnen, wenn du ihnen den absoluten Pfad mittels Netzlaufwerk gibst?
R:\XML\datei.xml kann ich öffnen
E:\_data\... (=Webserver-Root) ... \Reports\XML\datei.xml funktioniert auch
simple_xml_loadfile("Reports/XML/daten.xml")
Sehe da aber kein R:\.
R: funktioniert ja auf Webserver-"Ebene" nicht. Richtig? Daher gibt es ja im Verzeichnis der PHP Dateien = DocumentRoot des Apache eine Verknüpfung namens "Reports", die auf R: verweist.
So jedenfalls hatte ich mir das vorgestellt :cool:
Aber wenn ich so drüber nachdenke... kommt eigentlich eine Windows-Verknüpfung mit dem Webserver Dateisystem klar? :unsure:
 

ComFreek

Mod | @comfreek
Moderator
R: funktioniert ja auf Webserver-"Ebene" nicht. Richtig?
Warum nicht? Beachte, dass der Webserver nichts anderes ist als ein ganz normaler Prozess auf dem System.* Wenn du also mit dem explorer.exe zu R:\ navigieren kannst oder mit Notepad++ was auf R:\ öffnen kannst, dann kann es auch der Webserver.

DocumentRoot gibt es nur deswegen, damit in der Defaultkonfiguration dein Apache-Webserver weiß, welche Dateien er ausliefert. Du kannst PHP-Dateien auch außerhalb des DocumentRoots platzieren - ja das ist gerade empfohlen, damit sie niemals versehentlich bei einer Miskonfiguration ausgeliefert werden vom Webserver.
Man könnte fast sagen, dass es nur dann Sinn ergibt, einen DoumentRoot zu haben, wenn die Website nur aus statischen Dateien besteht (html, css, js, png, ...), d.h. komplett ohne serverseitige Logik auskommt. Sobald du serverseitige Logik hast, benutzt du in vielen Fällen sowieso komplexere "URI-Logiken" (welche URI auf welchen Inhalt geht), die vom DocumentRoot oft nicht abgedeckt werden können. Deswegen gibt es ja Mod Rewrite für Apache unter anderem.

*) Diese Analogie stimmt nicht immer. Etwa werden Webserver oft unter einem speziellen separaten Nutzeraccount laufen gelassen auf *nix-Systemen.
 

m.scatello

Erfahrenes Mitglied
Im Dateiexplorer dagegen klicke ich auf die Verknüpfung, sehe den Ordner XML und danach auch die Datei. Da siehts schick aus, also an den Rechten liegt es nicht.
Das kannst du so pauschal nicht sagen. Du magst vielleicht die Rechte haben, aber der Webserver läuft vermutlich mit einem anderen Konto und kennt das verbundene Laufwerk nicht. Du kannst es aber mal per UNC-Pfad versuchen, also z.B. \\rechnername\freigabename
Eventuell hilft auch eine Erweiterung von open_basedir in der php.ini