Matthias: CHMOD, UNLINK und RENAME

hallo.

seit nun genau 2 tagen versuche ich eine datei unter php zu löschen. das schlimmste ist, daß es manchmal beim probieren und rumfummeln funktioniert ?! aber kein erkenntlicher grund warum es geht und ein 2. mal funktionierts nicht.

genauer meine ich den chmod befehl. dieser scheint nicht so zu wollen, wie er soll.

ich ändere den wert der datei kurz vorm löschen oder umbenennen auf 777 bzw 0777.

datei wird nicht gelöscht oder umbenannt ( permission denied ).

nun probiere ich ein wenig rum ( chmod wert "0777" 777 0777 "777" ).
irgendwann beim probieren wird die datei dann doch noch gelöscht. ( ab und zu ).

ALLE BEFEHLE SIND RICHTIG EINGEGEBEN !

ich weiß nicht was ich noch machen soll. ich habe auch schon im archiv geblättert. dort hatte jemand das selbe problem, was aber unbeantwortet blieb bzw. nicht richtig geklärt werden konnte.
sollte jemand eine lösung parat haben, würde ich mich sehr freuen.

schönen gruß
matthias

  1. hi!

    seit nun genau 2 tagen versuche ich eine datei unter php zu löschen. [...]
    genauer meine ich den chmod befehl. dieser scheint nicht so zu wollen, wie er soll.

    [...]

    ALLE BEFEHLE SIND RICHTIG EINGEGEBEN !

    Glaubst du nicht, es würde uns mehr helfen, wenn du den Source postest, als dass du hier lamentierst,
    dass dein - angeblich - richtiger Code nicht funktioniert?

    "Mein Programm funktioniert nicht, obwohl alles richtig programmiert ist. Warum?"

    bye, Frank!

    1. [...]

      ALLE BEFEHLE SIND RICHTIG EINGEGEBEN !

      Läuft dein PHP im Safe-Mode? Zumindest unter Suse 6.1 läuft PHP im Safe-mode, was den Zugriff aufs Dateisystem stark einschränkt...

      1. nein, wie gesagt es geht ab und zu.

        ein beispiel:

        der befehl lautet:

        chmod($filename, 777);
        unink($filename);

        dann kommt Unlink failed (Permission denied)

        ändere ich dann den source in
        chmod($filename, 0777);
        unlink($filename);

        wird die datei gelöscht. das funktioniert dann aber nicht bei dem nächsten file. dort muß wieder mit 777 angefangen werden.

        gebe ich nun folgendes ein:
        chmod($filename, 777);
        chmod($filename, 0777);
        unlink($filename);

        passiert auch nichts Unlink failed (Permission denied)

        1. nein, wie gesagt es geht ab und zu.

          ein beispiel:

          der befehl lautet:

          chmod($filename, 777);
          unink($filename);

          Hallo,

          sind das Files die du mit PHP angelegt hast oder mit deinem FTP proggi raufgespielt hast?

          FYI: PHP läuft immer mit der Userkennung des Apache (default nobody.wwwrun)

          Wenn du aber nur 644 rechte auf dem file hast und du einer anderen gruppe angehörst is nix mit löschen oder chmoden. (gottseidank, sonst könntest ja auf php ebene alle userverzeichnisse löschen)

          lg
          Ludwig

    2. else:
      chmod($filename, 0777);
      unlink($filename);
      endif;

      eindeutig beschrieben worden, oder ? denke aber das leute die eine lösung für mich hätten/haben das auch so verstehen. wenn ich sage, permission denied, wird wohl kaum der pfad falsch sein, oder der befehl falsch geschrieben sein. konnte das nun mit dem code wirklich nicht erahnen. hoffe trotzdem hat jemand eine lösung.

      geht eigentlich nur darum, das die datei umbenannt oder gelöscht werden kann.

      bye zurück,
      matthias

  2. Hallo Matthias!

    Zuerst mal: Du solltest Dir den Hinweis von Frank zu Herzen nehmen.

    Sodann: Um eine Datei zu loeschen, brauchst Du nicht die Schreibrechte auf diese Datei, sondern auf das Verzeichnis, in dem diese liegt. Benutze chmod also auf das Verzeichnis.

    Und: diese Zahlen wie z.B. 777 oder 644 muessen oktal interpretiert werden. Wie man in PHP oktale Zahlen schreibt, weiss ich nicht. Falls es genauso wie in C, Perl und JavaScript laeuft, dann musst Du die Zahl mit einer 0 anfangen. Also 0777, das entspricht der dezimalen Zahl 511. Die dezimale Zahl 777 waere jedoch 1411 octal. Und diese Rechte willst Du sicher nicht setzen.

    So lange