mkdir -> File exists - obwohl Verzeichnis nicht existiert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mkdir -> File exists - obwohl Verzeichnis nicht existiert

    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:
    PHP-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

    Gruß,
    DreamDolphin

  • #2
    hat der User, der den Apache-Dienst startet, entsprechende Rechte auf das Laufwerk? Ist der Datentausch mit dem Desktop zugelassen?

    Kommentar


    • #3
      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

      Kann man notfalls irgendwie herausfinden, wer den Dienst startet?

      Kommentar


      • #4
        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
        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üfen
        EDIT:
        IMHO ist kein PHP-Problem mehr, daher **verschieb**
        Zuletzt geändert von asp2php; 17.11.2004, 09:36.

        Kommentar


        • #5
          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.

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              (<- freut sich)

              Danke, Du hast mir wirklich sehr geholfen!

              Kommentar


              • #8
                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

                Kommentar


                • #9
                  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

                  Kommentar

                  Lädt...
                  X