Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
mkdir -> File exists - obwohl Verzeichnis nicht existiert [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mkdir -> File exists - obwohl Verzeichnis nicht existiert


 
DreamDolphin
17-11-2004, 08:15 
 
Hallo!

Ich habe da ein Problem mit der Funktion mkdir...

Und zwar möchte ich auf einem Netzlaufwerk ein Verzeichnis erstellen. Ich prüfe vorher ab, ob es evtl. schon existiert, und wenn nicht, soll das Script es anlegen.

Die Existenz-Prüfung funktioniert soweit, nur beim Anlegen bekomme ich folgende Fehlermeldung:

Warning: mkdir(M:\DATEN\test): File exists in c:\programme\apache group\apache\htdocs\test.php on line 7

Hier der Auszug aus dem Test-Code:
$dest = "M:\\DATEN\\test";
if (is_dir($dest))
{ echo 'Verzeichnis existiert'; }
else
{ echo 'Verzeichnis existiert nicht!'; mkdir ($dest); }

Im Pfad sind natürlich Doppel-\ angegeben...

Dazu gibt es noch eine kleine Besonderheit zu erwähnen: Das Script läuft auf einem Windows-Webserver. Nur der Webserver (bzw. der entsprechende Windows-User) darf in das Netzlaufwerk schreiben, alle anderen User dürfen nur lesen.

Ich habe schon fast die Befürchtung, dass es da rechtemäßig irgendwelche Probleme gibt, aber müßte ich dann nicht eine andere Fehlermeldung bekommen?

Für jeden Lösungsansatz wäre ich euch sehr dankbar :o

Gruß,
DreamDolphin

 
asp2php
17-11-2004, 08:45 
 
hat der User, der den Apache-Dienst startet, entsprechende Rechte auf das Laufwerk? Ist der Datentausch mit dem Desktop zugelassen?

 
DreamDolphin
17-11-2004, 09:18 
 
Auf dem Desktop kann ich ohne Probleme Verzeichnisse erstellen...

Also wenn der User, der im Windows angemeldet ist, auch den Dienst startet, dann müßte er die entsprechenden Rechte haben :rolleyes:

Kann man notfalls irgendwie herausfinden, wer den Dienst startet?

 
asp2php
17-11-2004, 09:27 
 
Original geschrieben von DreamDolphin
Auf dem Desktop kann ich ohne Probleme Verzeichnisse erstellen...

das hat nichts damit zu tun

Also wenn der User, der im Windows angemeldet ist, auch den Dienst startet, dann müßte er die entsprechenden Rechte haben :rolleyes:
wenn ... aber das mußt du prüfen

Kann man notfalls irgendwie herausfinden, wer den Dienst startet?
Dienste anschauen -> Rechtsklick bei Apache ausführen -> Eigenschaft auswählen -> Reiter: Anmelden -> prüfenIMHO ist kein PHP-Problem mehr, daher **verschieb**

 
DreamDolphin
17-11-2004, 10:24 
 
Danke fürs Verschieben, einige weitere Versuche zeigen nämlich, dass es sich tatsächlich um ein Rechte Problem handelt...

Jedenfalls funktioniert es jetzt mit Deiner Hilfe! Danke vielmals!

Ich mußte zwar tricksen, aber so klappt es auch:

Der Dienst auf dem Webserver läßt sich nämlich nicht vom entsprechenden Benutzer starten (Fehler: Der Dienst "Apache" auf "Lokaler Computer" konnte nicht gestartet werden. Fehler 1069: Der Dienst konnte wegen einer fehlerhaften Anmeldung nicht gestartet werden. ). Warum - k.A. (User ist Administrator). Ist da evtl. ein Lösungsansatz für dieses Problem bekannt? Würde mich mal interessieren...

Jedenfalls wenn ich den Dienst vom "richtigen" Administrator starten lasse (der hat auch Zugriff auf das Laufwerk), funktioniert es. :)

 
asp2php
17-11-2004, 10:38 
 
Der Dienst auf dem Webserver läßt sich nämlich nicht vom entsprechenden Benutzer starten (Fehler: Der Dienst "Apache" auf "Lokaler Computer" konnte nicht gestartet werden. Fehler 1069: Der Dienst konnte wegen einer fehlerhaften Anmeldung nicht gestartet werden. ). Warum - k.A. (User ist Administrator). Ist da evtl. ein Lösungsansatz für dieses Problem bekannt? Würde mich mal interessieren...
Klar, du mußt dich nur etwas mit der Administration auskennen :)

Also in Verwaltung auf dem Web-Server -> lokale Sicherheitseinstellungen -> lokale Richtlinien -> Zuweisen von Benutzerrechten -> Als Dienst anmelden -> den User hinzufügen, Haken setzen, bestätigen und sich freuen ;)

Du kannst jeden User einfügen, sowohl lokalen als auch globalen User. In deinem Fall wäre ein globaler User ratsam, da du über ihn auf Netzlaufwerk zugreifst.

 
DreamDolphin
17-11-2004, 11:02 
 
:D (<- freut sich)

Danke, Du hast mir wirklich sehr geholfen! :)

 
Wumpso
09-05-2005, 17:34 
 
Hallo!
Ich habe jetzt das gleiche Problem - ich möchte prüfen, ob eine bestimmte Datei auf einem Netzlaufwerk existiert.
Ich komme aber einfach mit den Rechten nicht recht zurecht ;-)
Ich habe bei Dienste / Eigenschaften / Anmelden / Anmelden als: Lokals Systemkonto eingestellt und das Häkchen "Datenaustausch zwischen Dienst und Desktop zulassen" angeklickt.

Lieber asp2php (oder andere Checker): Kannst Du mir nochmal idiotensicher beschreiben, wie ich vorgehen muss, damit das klappt (Server ist WinXP Pro mit Apache2 als Dienst)? Am besten inklusive Anlegen eines geeigneten Benutzers?

Danke schon mal

Wumpso

 
Wumpso
11-05-2005, 14:10 
 
Nachdem ich's jetzt auch geschafft habe, hier nochmal eine kurze Zusammenfassung, wie es klappt, damit welche, die nach dem gleichen Problem googeln, eine nachvollziehbare Lösung finden. Sicherheitstechnisch habe ich eine Ahnung, aber zumindet funktioniert es so:

Also bei mir ist der Webserver (Apache2) auf einem WinXP Pro-System als Dienst installiert und ich möchte per PHP auf ein Netzlaufwerk zugreifen.

1. Dazu muss der Benutzer, der den Dienst Apache2 startet, Zugriff auf dieses Netzlaufwerk haben. Also auf den Dienst rechtsklicken, Eigenschaften / Anmelden und einen Benutzer mit Durchsuchen / Ereitert / Jetzt suchen den gewünschten Benutzer auswählen.
Scheinbar muss der Benutzer ein Passwort haben, ohne hat's bei mir nicht funktioniert. Wenn man den Benutzer ausgewählt hat, fügt Windows den Benutzer automatisch den Sicherheitsrichtlinien hinzu (Lokale Sicherheitsrichtlinier / Sicherheitseinstellungen / Lokale Richtlinien / Zuweisen von Benutzerrechten / Als Dienst starten).

2. Der Benutzer muss natürlich auf dem Zielrechner die entsprechenden Rechte haben. Also, falls nicht wie bei mir, Jeder dort alles darf, dort den entsprechenden Benutzer mit Passwort anlegen.

3. Das Netzlaufwerk sollte mit dem gleichen Benutzernamen hergestellt werden. Dazu das Netzlaufwerk trennen (falls verbunden) und im Explorer unter Extras / Netzlaufwerk verbinden /
den Buchstaben und den Netzwerkpfad eingeben, Häkchen bei "Verbindung beim Anmelden wiederherstellen" machen. Und bei "Verbindung unter anderem Benutzernamen herstellen" den entsprechenden Benutzer mit Passwort eingeben (hier konnte ich bei mir nicht auf "Durchsuchen..." klicken, also einfach den Benutzernamen und das Passwort eintippen).

4. So. Und in PHP kann man dann scheinbar immer noch nicht den Laufwerksnamen (also f:\ o. ä.) verwenden. Um auf die Daten zugreifen zu können, muss man den kompletten Netzwerkpfad eingeben also zum Beispiel \\MEIN_SERVER\FREIGABE\dateiname.xyz und das natürlich mit doppelter Backslashung: \\\\MEIN_SERVER\\FREIGABE\\dateiname.xyz.

Ich hoffe es hilft mal jemandem.

So long,

Wumpso

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:42 Uhr.