2012-04-04 18 views
5

Linux SSHPHP Utworzono plik | SSH nie można usunąć (brak uprawnień do zapisu)

utworzyć plik w PHP przy użyciu

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 

Plik pobiera następujące uprawnienia.

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

jednak gdy próbuję usunąć plik, pod zwykłe konto użytkownika (usr111). Wystąpił następujący błąd: UWAGA: Mogę usunąć plik w katalogu głównym.

FIX FOUND! mimo że używałem ustawienia trybu dla mkdir dla php. Z jakiegoś powodu to nie działało. Dodałem następujące.

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

     chmod($dir, 0777); 
    } 
+2

jakie są uprawnienia do katalogu Ten plik jest w? –

+1

Jeśli logujesz się na zwykłym koncie użytkownika, PHP lub raczej Apache jest właścicielem pliku i nie będziesz mógł go usunąć, chyba że ma on uprawnienia dla wszystkich. W przeciwnym razie, jeśli jesteś zalogowany z rootem, nie powinieneś mieć żadnych problemów. – Francisc

+0

+ MarcB drwxr-xr-x 2 apache apache 4096 4 kwietnia 12:48 sesja – RichardW11

Odpowiedz

2

mkdir pracuje dobrze, ale drugi argument nie jest to uprawnienie jest to tryb, który będzie używany przez system wraz z aktualnym umask obliczyć uprawnienia ustawić. Z instrukcji:

Tryb jest również modyfikowany przez bieżący umask, który można zmienić używając umask().

Musisz zmienić swój skrypt ustawia uprawnienia bez wywoływania plików dwukrotnie:

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

Dzięki za wyjaśnienie. – RichardW11

Powiązane problemy