2012-04-04 23 views
5

Linux SSHPHP Erstellte Datei | SSH kann nicht gelöscht werden (Berechtigung verweigert)

ich eine Datei in php

if (!is_dir(DIR_FILE)) 
    mkdir(DIR_FILE, 0777); 

$filename = DIR_FILE . $id . '.txt'; 

$handle_cf = fopen($filename, 'a'); 
fwrite($handle_cf, $data . "\n"); 
fclose($handle_cf); 

chmod($filename, 0777); 

chown($filename, "usr111"); // usr111 = username 
chgrp($filename, "usr111"); // usr111 = group that is also attached to apache 

Die Datei erhält die folgenden Berechtigungen.

-rwxrwxrwx 1 apache  apache  1447 Apr 4 12:48 D.txt 
-rwxrwxrwx 1 apache  apache  1447 Apr 4 12:48 E.txt 

aber wenn ich versuche, die Datei zu löschen, unter dem regulären Benutzerkonto (usr111). Ich erhalte die folgenden Fehler

[[email protected] session]$ rm D.txt 
rm: cannot remove `D.txt': Permission denied 

HINWEIS: ich die Datei im Root-Verzeichnis löschen.

FIX GEFUNDEN! obwohl ich die Moduseinstellung auf mkdir für PHP verwendet habe. Aus irgendeinem Grund funktionierte das nicht. Ich habe Folgendes hinzugefügt.

if (!is_dir($dir)) { 
     mkdir($dir, 0777); 

     chmod($dir, 0777); 
    } 
+2

was sind die Berechtigungen für das Verzeichnis diese Datei in ist? –

+1

Wenn Sie sich mit einem normalen Benutzerkonto anmelden, ist PHP oder besser Apache der Eigentümer der Datei und Sie können ihn nicht löschen, es sei denn, er hat Berechtigungen für alle Benutzer. Andernfalls, wenn Sie mit root angemeldet sind, sollten Sie keine Probleme haben. – Francisc

+0

+ MarcB drwxr-xr-x 2 Apache Apache 4096 Apr 4 12:48 Sitzung – RichardW11

Antwort

2

mkdir gut funktioniert, aber das zweite Argument ist nicht die Erlaubnis, es ist ein Modus, der zusammen mit dem System verwendet wird, mit Ihrem aktuellen umask die Berechtigungen zu berechnen einzustellen. Von Handbuch:

Der Modus auch durch die aktuelle umask modifiziert wird, die Sie mit umask ändern können().

Sie benötigen Skript zu ändern, die Berechtigungen ohne Aufruf des Dateisystems zweimal zu setzen:

$oldUmask = umask(0); // disable umask 
mkdir($path, 0777); 
umask($oldUmask); // reset the umask 
+0

Danke für die Erklärung. – RichardW11

Verwandte Themen