Linux SSH
我使用在php中创建了一个文件
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 for 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