2012-04-04 23 views
5

Linux SSHPHP Tạo tập tin | SSH không thể xóa (cho phép từ chối)

tôi có thể tạo một tập tin trong php sử dụng

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 

Các tập tin được các điều khoản sau đây.

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

tuy nhiên khi tôi cố xóa tệp, trong tài khoản người dùng thông thường (usr111). Tôi nhận được lỗi sau đây

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

LƯU Ý: Tôi có thể xóa tệp dưới gốc.

FIX FOUND! mặc dù tôi đã sử dụng cài đặt chế độ trên mkdir cho php. Đối với một số lý do này không được làm việc. Tôi đã thêm phần sau đây.

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

     chmod($dir, 0777); 
    } 
+2

các điều khoản trên thư mục tập tin này là trong là gì? –

+1

Nếu bạn đăng nhập bằng tài khoản người dùng thông thường, PHP hoặc đúng hơn Apache là chủ sở hữu tệp và bạn sẽ không thể xóa nó trừ khi nó có quyền cho mọi người làm điều đó. Nếu không, nếu bạn đã đăng nhập bằng root, bạn sẽ không có vấn đề gì. – Francisc

+0

+ MarcB drwxr-xr-x 2 apache apache 4096 Apr 4 12:48 phiên – RichardW11

Trả lời

2

mkdir đang làm việc tốt nhưng đối số thứ hai không phải là sự cho phép đó là một chế độ mà sẽ được sử dụng bởi hệ thống cùng với hiện tại umask của bạn để tính toán các điều khoản để thiết lập. Từ thủ công:

Chế độ này cũng được sửa đổi theo umask hiện tại, mà bạn có thể thay đổi sử dụng umask().

Bạn cần phải thay đổi kịch bản của bạn để thiết lập các điều khoản mà không gọi hệ thống tập tin hai lần:

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

Cảm ơn lời giải thích. – RichardW11

Các vấn đề liên quan