Arne: Dateizugriff klappt nicht!

Hallo!

Ich habe eine PHP-Datei, in der ich eine Datei öffnen möchte, aber irgendwie bekomme ich dabei jedes Mal die folgende Fehlermeldung:

Warning:  fopen(required/msg.txt) [function.fopen]: failed to create stream: Permission denied in ....

Ich dachte vielleicht es liegt an der Rechtevergabe, aber sowohl die Datei msg.txt, als auch die Ordner haben alle Rechte! Weiss jemand, wo der Fehler liegen könnte?

Gruss Arne

  1. Hi,

    erzähl doch mal unter welchem System Du arbeitest, und wer da noch so alles Rechte drauf hat.
    Unter Linux konnte chmod 755 msg.txt bzw. chmod msg.txt 755 schon helfen.
    Unter Windows musst Du gegebenfalls dem System Benutzer noch reche auf dei Datei geben.
    Denn, das PHP Script wird nicht als unter Deinem Benutzer  ausgeführt.

    Gruss Matze

  2. Holladiewaldfee,

    Warning:  fopen(required/msg.txt) [function.fopen]: failed to create stream: Permission denied in ....

    nur so kurz:
    Du hast den Dateinamen schon in Anführungszeichen verpackt, oder?

    Ciao,

    Harry

    --
      Herbst ist Wanderzeit!
      http://harry.ilo.de/projekte/berge/
  3. Also auf meinem Webspace läuft Unix.... Ich habe CHMOD 777 vergeben, ist doch in Ordnung, oder? Zu Matze:

    Ja, ich habe den Dateinamen in Anführungszeichen geschrieben.

    LG Arne

    1. Hi,

      arg das war nun etwas übertrieben, damit hast Du allen Vollzugriff auf die Datei gegeben.
      Normalerweise sollte eigentlich schon chmod 655 reichen.
      Aber mach mal lieber 755 und naja auch auf das Verzeichnis.

      Zur erklärung... hoffentlich richtig:
      chmod 7 Bedeutet Vollzugriff.
      Löschen Aendern lesen ausführen.

      Hier eine kleine Liste aus meinem Verzeichnis.

      drwxr-xr-x   9 deploy   dep       512 Sep  5  2002 application
      -rw-r--r--   1 deploy   dep    930598 Nov 11 18:50 build.log
      -r--r--r--   1 deploy   dep       966 Nov 11 17:36 build.properties
      -r-xr-xr-x   1 deploy   dep      9966 Mar 21  2003 build.xml

      Das erste Zeichen siehe 1. Eintrag
      drwxr-xr-x  bedeutet d = directory
      r heisst read
      w heisst write
      x heisst execute

      So weit ich weiss Ich hoff das stimmt nun auch:
      entspricht r = 4
                 w = 2
                 x = 1

      Damit stellst Du Deinen Schlüssel zusammen.
      1 bedeutet also ausführrechte
      2 Schreibrechte
      3 Schreiben und ausführen
      4 Lese Rechte
      5 Lesen und Ausführen
      6 Lesen und Schreiben
      7 Ausführen lesen und schreiben.

      Das ganze ist nun in einen dreierblock dargstellt.
      im obigen Beispeil heisst das für da Verzeichnis:
      rwx = 7 -> Der Root bzw. Besitzer / Ersteller, darf das Verzeichnis öffnen löschen ...

      der 2. 3er Block bedeutet nun:
      r_x nur lesen und ausführen. also 5
      Dies gilt nun für die Gruppe dep zu welcher auch der deploy Benutz er gehört.

      Der Benutzer deploy ist der Eigentümer der Datei.

      Und der 3. 3er Block nun bestimmt, was alle anderen Benutzer damit tun dürfen.
      In diesem Falle auch lesen und ausführen. 5

      Bei Verzeichnissen wie diesem ist es leider notwendig, ausführungsrechte zu setzen, denn wenn du per cd in das Verzeichnis springt, das kein lesen sondern ausführen ist.

      Also zu Deinem Fall nochmals, wenn Du die Datei bearbeiten möchtest, benötigst du min. 766 jedoch keine 777
      Wenn Du nur lesen möchtest, dann reiht schon 744.

      Gruss Matze

      1. Moin!

        Zur erklärung... hoffentlich richtig:

        Leider nein. Ist unter Unix etwas komplizierter. :)

        chmod 7 Bedeutet Vollzugriff.
        Löschen Aendern lesen ausführen.

        Als Buchstabenzeichen wird rwx für "read - write - execute" verwendet, und das bedeutet genau das: Man darf die Datei lesen, schreiben oder auch ausführen (dann ist es ein Programm oder ein Shellscript).

        Die Möglichkeit, neue Dateien anzulegen oder alte Dateien zu löschen, wird durch die Rechtevergabe des Verzeichnisses gelöst.

        Das Verzeichnis ist hierbei wie eine Textdatei zu betrachten, welche die enthaltenen Dateien auflistet.

        Damit man das Directory anzeigen darf, benötigt man Leserechte fürs Directory. Damit man neue Datein anlegen oder alte löschen darf, benötigt man Schreibrechte fürs Verzeichnis (man ändert damit ja die Dateiliste). Und damit man auf die enthaltenen Dateien zugreifen darf (aber das Listing nicht anzeigen - klingt komisch, ist aber so), benötigt man das execute-Recht.

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
        1. Servus,

          Zur erklärung... hoffentlich richtig:

          Leider nein. Ist unter Unix etwas komplizierter. :)

          chmod 7 Bedeutet Vollzugriff.
          Löschen Aendern lesen ausführen.

          Als Buchstabenzeichen wird rwx für "read - write - execute" verwendet, und das bedeutet genau das: Man darf die Datei lesen, schreiben oder auch ausführen (dann ist es ein Programm oder ein Shellscript).

          Sagte ich da was anderes? Habe nur nicht r w und x erklärt sondern bin den Umweg über die Zahlen gegangen.

          Die Möglichkeit, neue Dateien anzulegen oder alte Dateien zu löschen, wird durch die Rechtevergabe des Verzeichnisses gelöst.

          Stimmt nicht ganz. Eine 666 Datei kann ich sehrwohl löschen. jedoch, sofern das Verzeichnis falsch angelegt ist nicht wieder erstellen.

          Das Verzeichnis ist hierbei wie eine Textdatei zu betrachten, welche die enthaltenen Dateien auflistet.

          Damit man das Directory anzeigen darf, benötigt man Leserechte fürs Directory. Damit man neue Datein anlegen oder alte löschen darf, benötigt man Schreibrechte fürs Verzeichnis (man ändert damit ja die Dateiliste). Und damit man auf die enthaltenen Dateien zugreifen darf (aber das Listing nicht anzeigen - klingt komisch, ist aber so), benötigt man das execute-Recht.

          »»

          Ja gut das wusste ich nun nicht so genau.
          Achja habe obiges grad mal auf einer solaris 8 getestet.
          Vieleicht verhält sich ja BSD bzw. manch anderes System anderster.

          Gruss Matze

          1. Moin!

            Die Möglichkeit, neue Dateien anzulegen oder alte Dateien zu löschen, wird durch die Rechtevergabe des Verzeichnisses gelöst.

            Stimmt nicht ganz. Eine 666 Datei kann ich sehrwohl löschen. jedoch, sofern das Verzeichnis falsch angelegt ist nicht wieder erstellen.

            Sicher? Klar kannst du sämtlichen Inhalt aus der Datei entfernen und sie mit 0 Bytes zurücklassen, aber aus dem Verzeichnis _entfernen_ kannst du sie nicht, wenn du keine Schreibrechte auf das Verzeichnis hast.

            Mag sein, dass Sticky-Bits bei den Verzeichnisrechten das noch weiter beeinflussen, aber so, wie ich es schildere, ist es unter Linux.

            Ja gut das wusste ich nun nicht so genau.
            Achja habe obiges grad mal auf einer solaris 8 getestet.
            Vieleicht verhält sich ja BSD bzw. manch anderes System anderster.

            Kann sein, dass unter Solaris die Sinnlosigkeit erkannt wurde, dass man die Datei zwar leeren, aber nicht löschen kann, und entsprechend reagiert. Ist aber keinesfalls Standard.

            - Sven Rautenberg

            --
            "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
            (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
            1. Servus,

              Stimmt nicht ganz. Eine 666 Datei kann ich sehrwohl löschen. jedoch, sofern das Verzeichnis falsch angelegt ist nicht wieder erstellen.

              Sicher?

              Ja auf der Solaris klappt es so.
              Aber nicht auf Linux Suse 8.2...

              Mag sein, dass Sticky-Bits bei den Verzeichnisrechten das noch weiter beeinflussen, aber so, wie ich es schildere, ist es unter Linux.

              Jup das stimmt so. Grad den Admin belästigt und geprüft. :-))

              Kann sein, dass unter Solaris die Sinnlosigkeit erkannt wurde, dass man die Datei zwar leeren, aber nicht löschen kann, und entsprechend reagiert. Ist aber keinesfalls Standard.

              Gut zu wissen ich habe es eigentlich als "Standart" verstanden.
              Muss mal prüfen wo ich das wieder gelesen habe.
              Vieleicht entpuppt sich ja schon wieder mal ein Buch als Kamin Anzünder :-))

              Gruss Matze