Discussion:
openDir auf Netzwerkrechner
(zu alt für eine Antwort)
Thomas Weiler
2009-12-03 10:08:01 UTC
Permalink
Hallo,

ich habe eine Verzeichnisstruktur auf einem anderen Rechner im gleichen
Netzwerk, die ich gerne mit PHP auslesen und auf einer Webseite ausgeben
möchte. Beide Rechner (entfernter und Webserver) sind Windows 2003
Server. Die Share wäre:

\\foreignhost01\dokumente

Nun versuche ich folgendes Skript:

-------------- snip --------------------

$directory = "file://foreignhost01/dokumente";
//$directory = "./files/";
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo $file;
}
}
closedir($handle);
}

------------- snap ----------------------

mit folgendem Ergebnis:

Warning: opendir() [function.opendir]: remote host file access not supported

Die zweite im Beispielcode auskommentierte Zeile auf das lokale
Verzeichnis funktioniert ohne Probleme, wenn ich sie auskommentiere.

Kann man das irgendwie einstellen bzw. wie kann ich per PHP
Verzeichnisstrukturen von Netzwerkrechner abfragen?

Danke für alle Antworten.
Carsten Wiedmann
2009-12-03 10:20:55 UTC
Permalink
Post by Thomas Weiler
\\foreignhost01\dokumente
-------------- snip --------------------
$directory = "file://foreignhost01/dokumente";
Warning: opendir() [function.opendir]: remote host file access not supported
Dann lass einfach das "file:" weg.

BTW:
Der Process der das PHP Skript ausführt, braucht natürlich Zugriffsrechte
auf die Share.

Gruß,
Carsten
Thomas Weiler
2009-12-09 14:17:17 UTC
Permalink
Post by Carsten Wiedmann
Post by Thomas Weiler
\\foreignhost01\dokumente
-------------- snip --------------------
$directory = "file://foreignhost01/dokumente";
Warning: opendir() [function.opendir]: remote host file access not supported
Dann lass einfach das "file:" weg.
Der Process der das PHP Skript ausführt, braucht natürlich Zugriffsrechte
auf die Share.
Gruß,
Carsten
Hab ich gemacht. Leider ohne Erfolg.

Mittlerweile habe ich dem Prozess, auf dem das Skript läuft, einem User
mit Domänen Admin Rechten zugeordnet. Auch die Sicherheitstechnische
Kamikazeaktion war ohne Erfolg. Jetzt kommt immer die Fehlermeldung:

[function.opendir]: failed to open dir: No error in
//foreignhost01/dokumente

Wenn ich die Meldung richtig verstehe, läuft das Skript aber der Zugriff
scheitert. Was könnte ich noch falsch machen?
Carsten Wiedmann
2009-12-09 14:38:21 UTC
Permalink
Post by Thomas Weiler
Post by Carsten Wiedmann
Post by Thomas Weiler
$directory = "file://foreignhost01/dokumente";
Warning: opendir() [function.opendir]: remote host file access not supported
Dann lass einfach das "file:" weg.
Der Process der das PHP Skript ausführt, braucht natürlich Zugriffsrechte
auf die Share.
Hab ich gemacht. Leider ohne Erfolg.
Mittlerweile habe ich dem Prozess, auf dem das Skript läuft, einem User
mit Domänen Admin Rechten zugeordnet. Auch die Sicherheitstechnische
[function.opendir]: failed to open dir: No error in
//foreignhost01/dokumente
Hm, gute Frage. Dann würd ich halt mal das in der Shell nachstellen.

Zuerstmal ein:
| net view \\foreignhost01

Das sollte ja dann eine Freigabe mit dem Namen "dokumente" (und Type
"Platte") auflisten.


Dann ein:
| php -r "var_dump(opendir('//foreignhost01/dokumente'));"

Was wird da dann ausgegeben?

BTW:
Um welche PHP-Version und Webserver geht es denn?

Gruß
Carsten
Thomas Weiler
2009-12-09 15:06:38 UTC
Permalink
Post by Carsten Wiedmann
Post by Thomas Weiler
Post by Carsten Wiedmann
Post by Thomas Weiler
$directory = "file://foreignhost01/dokumente";
Warning: opendir() [function.opendir]: remote host file access not supported
Dann lass einfach das "file:" weg.
Der Process der das PHP Skript ausführt, braucht natürlich Zugriffsrechte
auf die Share.
Hab ich gemacht. Leider ohne Erfolg.
Mittlerweile habe ich dem Prozess, auf dem das Skript läuft, einem User
mit Domänen Admin Rechten zugeordnet. Auch die Sicherheitstechnische
[function.opendir]: failed to open dir: No error in
//foreignhost01/dokumente
Hm, gute Frage. Dann würd ich halt mal das in der Shell nachstellen.
| net view \\foreignhost01
Das sollte ja dann eine Freigabe mit dem Namen "dokumente" (und Type
"Platte") auflisten.
| php -r "var_dump(opendir('//foreignhost01/dokumente'));"
Was wird da dann ausgegeben?
Um welche PHP-Version und Webserver geht es denn?
Gruß
Carsten
net view \\foreignhost01 zeigt die Freigabe als Typ Platte an

php -r ... gibt resource(4) of type (stream) aus.

Ist PHP 5.2.10 auf einem IIS 6.0
Carsten Wiedmann
2009-12-09 15:23:12 UTC
Permalink
Post by Thomas Weiler
net view \\foreignhost01 zeigt die Freigabe als Typ Platte an
php -r ... gibt resource(4) of type (stream) aus.
Ist PHP 5.2.10 auf einem IIS 6.0
Ergo liegt es also daran, dass das Script vom Webserver mit einem User ohne
Rechte auf diese Ressource ausgeführt wird.

Macht aus Sinn, da normal eine Website beim IIS (Anonymer Zugriff) mit dem
User IUSR_HOSTNAME ausgeführt wird, der überhaupt keinen Netzwerkzugriff
hat. Eben diesen muss man ändern auf einen User mit Zugriff auf die Share.

Im Zweifel würd ich einfach mal bei z.B. http://forums.iis.net/ nachfragen.
(oder eine passende Newsgroup zu diesem Server)

Gruß
Carsten
Thomas Weiler
2009-12-09 15:56:16 UTC
Permalink
Post by Carsten Wiedmann
Post by Thomas Weiler
net view \\foreignhost01 zeigt die Freigabe als Typ Platte an
php -r ... gibt resource(4) of type (stream) aus.
Ist PHP 5.2.10 auf einem IIS 6.0
Ergo liegt es also daran, dass das Script vom Webserver mit einem User ohne
Rechte auf diese Ressource ausgeführt wird.
Macht aus Sinn, da normal eine Website beim IIS (Anonymer Zugriff) mit dem
User IUSR_HOSTNAME ausgeführt wird, der überhaupt keinen Netzwerkzugriff
hat. Eben diesen muss man ändern auf einen User mit Zugriff auf die Share.
Im Zweifel würd ich einfach mal bei z.B. http://forums.iis.net/ nachfragen.
(oder eine passende Newsgroup zu diesem Server)
Gruß
Carsten
Habs gefunden. Es lag am Admin, der nicht an allen wichtigen Schrauben
gedreht hat ;). Hab zwar den User für den Application Pool auf den
Domänen-User geändert, den für die Website direkt aber noch auf dem
Anonymous User gelassen. Jetzt klappt der Zugriff.

Vielen Dank für die tolle schnelle Hilfe.

Thomas

Loading...