2011-10-24 38 views
6

Tôi có một máy chủ Linux với sự đau khổ như máy chủ web. Trong kịch bản PHP của tôi, tôi đang tạo các thư mục với chế độ 0777. mã là khá đơn giản như sau:Quyền đối với PHP mkdir()

mkdir($path,0777) 

khi tôi chạy kịch bản này và đi đến quản lý tập tin máy chủ của tôi, thư mục là có nhưng cho phép được gán cho thư mục đó là 0755. Tôi không thể hiểu tại sao điều này đang xảy ra!! khi thư mục được tạo ra cột dùng đã apache trong nó, nhưng sự cho phép là 0755.

Trả lời

21

Bạn nên thử với các umask

$old = umask(0); 
mkdir($path,0777); 
umask($old); 
+0

cảm ơn! giải quyết vấn đề ... nhưng vẫn còn bối rối tại sao tập lệnh nt của tôi có thể tạo quyền truy cập thư mục 777? – samach

+0

@Salmanmahmood: Đây là điều cần hiểu trong Linux http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html chỉ là liên kết để bạn tham khảo –

+3

Thông thường, umask là 022, có nghĩa là bỏ qua bất kỳ nhóm nào hoặc các quyền ghi khác. Vì vậy, nếu các quyền được yêu cầu là 0777, thì các quyền được cấp là 0777 - 022 = 0755. – MetaEd

3

Bạn có thể thử:

chmod (string $filename , int $mode) 

Xem nếu điều đó có thể khắc phục vấn đề quyền.

0

Apache có thể không có quyền truy cập để thay đổi điều này. Những gì bạn có thể làm là. Đảm bảo rằng apache đang chạy trong cùng một nhóm với nhóm tệp hiện tại của bạn. Sau đó apache sẽ có thể thay đổi tập tin đó. Bạn có thể thay đổi nhóm apache trong cấu hình apache này. Hoặc cách dễ nhất là thay đổi toàn bộ người dùng dự án thành người dùng apache. Sau đó apache có thể thực hiện các thay đổi mà nó muốn.

đi đến các tập tin từ máy chủ và loại của bạn ls-al và nhìn vào người sử dụng và nhóm

0

Có thể là umask của bạn:

<?php 
$old = umask(0); 
mkdir($dir,0777); 
mask($old); 
?> 
Các vấn đề liên quan