2011-06-22 24 views
7

Một câu hỏi bỏ qua quyền tệp khi lưu tệp khi không tồn tại, được tạo ban đầu dưới dạng tệp mới.Quyền hạn tệp và CHMOD: Cách đặt 777 trong PHP khi tạo tệp?

Hiện tại, mọi thứ đều ổn và tệp đã lưu dường như có chế độ 644.

Tôi phải thay đổi điều gì ở đây, để làm cho các tệp lưu dưới dạng chế độ 777?

Cảm ơn một nghìn vì bất kỳ gợi ý, manh mối hoặc câu trả lời nào. Mã mà tôi nghĩ là có liên quan ở đây tôi đã bao gồm:

/* write to file */ 

    self::writeFileContent($path, $value); 

/* Write content to file 
* @param string $file Save content to wich file 
* @param string $content String that needs to be written to the file 
* @return bool 
*/ 

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 
    return true; 
} 
+2

Lưu ý rằng chế độ 0777 là ** nguy hiểm **. Xem http://stackoverflow.com/questions/2338641/in-a-php-apache-linux-context-why-exactly-is-chmod-777-dangerous –

+0

@Phoenix cảm ơn. Tôi guese 0766 sẽ đủ (cần phải cho phép tất cả các quyền viết). là tốt hơn? – Sam

+1

0766 tốt hơn; điều đó sẽ ngăn chặn việc thực thi mã tùy ý. Tệp có cần phải là ** thế giới ** có thể ghi được không hoặc nó có đủ nếu chỉ có, Apache có thể ghi vào nó không? Bạn có một tập hợp các ứng dụng cần để có thể ghi các tệp này không? Điều gì xảy ra nếu bạn làm cho chúng chạy như cùng một nhóm và đặt chế độ 0764 thay thế? –

Trả lời

18

PHP đã tích hợp sẵn chức năng gọi bool chmod(string $filename, int $mode)

http://php.net/function.chmod

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 
    chmod($file, 0777); //changed to add the zero 
    return true; 
} 
+8

_Don't_ sử dụng 777, đó là số _decimal_ và không có gì giống như những gì bạn muốn :-) – paxdiablo

+3

@paxdiablo cảm ơn! ghi chú và chỉnh sửa – thescientist

+0

Đây có phải là rủi ro bảo mật không? Nếu quyền của tệp là 777, thì kẻ tấn công có thể sử dụng phương pháp "PUT" để tải tệp lên hệ thống? Liệu tôi có sai? Theo câu trả lời của bạn, tôi sẽ sử dụng giải pháp của bạn. – Hasan

4

Bạn chỉ cần phải tự thiết lập cho phép mong muốn với chmod() :

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 

    // Set perms with chmod() 
    chmod($file, 0777); 
    return true; 
} 
+1

Xem nhận xét của tôi về chuyên gia dinh dưỡng - mặt nạ chính xác là ** 0777 ** không phải 777. – paxdiablo

+1

@paxdiablo Thay đổi được thực hiện. Tôi dành cả ngày trên dòng lệnh unix và sử dụng để loại bỏ các bit đặc biệt. –

2

Nếu bạn muốn thay đổi các điều khoản của một tập tin hiện có, sử dụng chmod (thay đổi chế độ):

$itWorked = chmod ("/yourdir/yourfile", 0777); 

Nếu bạn muốn tất cả các file mới có quyền truy cập nhất định, bạn cần phải nhìn vào thiết umode của bạn. Đây là một thiết lập quy trình áp dụng một sửa đổi mặc định cho các chế độ tiêu chuẩn.

Đây là hình thức trừ. Do đó, tôi có nghĩa là umode của 022 sẽ cấp cho bạn quyền mặc định là 755 (777 - 022 = 755).

Nhưng bạn nên nghĩ rằng rất cẩn thận về cả hai các tùy chọn này. Các tệp được tạo bằng chế độ đó sẽ hoàn toàn không được bảo vệ khỏi các thay đổi.

+1

'0755'. Không phải '755'. –

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