PHP创build文件| SSH不能删除(权限被拒绝)

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