PHP创建的文件| SSH无法删除(权限被拒绝)

时间:2012-04-04 17:59:14

标签: php linux file-permissions

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

注意:我可以删除root下的文件。

找到了! 即使我在mkdir上使用模式设置为php。出于某种原因,这不起作用。我添加了以下内容。

    if (!is_dir($dir)) {
        mkdir($dir, 0777);

        chmod($dir, 0777);
    }

1 个答案:

答案 0 :(得分:2)

mkdir运行良好,但第二个参数不是权限,它是系统将与您当前的umask一起使用的模式,用于计算要设置的权限。 来自手册:

  

模式也会被当前的umask修改,您可以更改   使用umask()。

您需要更改脚本以设置权限,而无需两次调用文件系统:

$oldUmask = umask(0); // disable umask
mkdir($path, 0777);
umask($oldUmask);  // reset the umask