Linux SSH
我使用php创build一个文件
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
该文件获得以下权限。
-rwxrwxrwx 1 apache apache 1447 Apr 4 12:48 D.txt -rwxrwxrwx 1 apache apache 1447 Apr 4 12:48 E.txt
但是,当我尝试删除该文件,在普通用户帐户(usr111)下。 我得到以下错误
[usr111@host session]$ rm D.txt rm: cannot remove `D.txt': Permission denied
注:我可以删除根目录下的文件。
修复发现! 即使我使用mkdir的模式设置为PHP。 由于某种原因,这是行不通的。 我添加了以下内容。
if (!is_dir($dir)) { mkdir($dir, 0777); chmod($dir, 0777); }
mkdir运行良好,但第二个参数不是权限,它是一个模式,将与系统一起使用您的当前umask来计算权限设置。 从手册:
该模式也由当前的umask修改,您可以使用umask()更改该模式。
您需要更改脚本以设置权限,而不必调用文件系统两次:
$oldUmask = umask(0); // disable umask mkdir($path, 0777); umask($oldUmask); // reset the umask