PHP无法chmod?

时间:2011-07-27 05:25:01

标签: php unix ubuntu file-permissions chmod

我正在运行PHP 5.3.5-1ubuntu7.2(safe_mode = Off)并且我无法在PHP脚本中正确设置任何文件或目录的模式,我编写了以下测试(只是为了确保):

$result = array();

if (mkdir('./I/do/not/exist/', 0777, true) === true)
{
    $result['./I/'] = sprintf('%s (%s)', getFileOwner('./I/'), getFilePermissions('./I/'));
    $result['./I/do/'] = sprintf('%s (%s)', getFileOwner('./I/do/'), getFilePermissions('./I/do/'));
    $result['./I/do/not/'] = sprintf('%s (%s)', getFileOwner('./I/do/not/'), getFilePermissions('./I/do/not/'));
    $result['./I/do/not/exist/'] = sprintf('%s (%s)', getFileOwner('./I/do/not/exist/'), getFilePermissions('./I/do/not/exist/'));
    $result[__DIR__] = sprintf('%s (%s)', getFileOwner(__DIR__), getFilePermissions(__DIR__));
    $result[__FILE__] = sprintf('%s (%s)', getFileOwner(__FILE__), getFilePermissions(__FILE__));
}

echo '<pre>';
print_r($result);
echo '</pre>';

function getFileOwner($path)
{
    $user = posix_getpwuid(fileowner($path));
    $group = posix_getgrgid(filegroup($path));

    return implode(':', array($user['name'], $group['name']));
}

function getFilePermissions($path)
{
    return substr(sprintf('%o', fileperms($path)), -4);
}

这是输出:

Array
(
    [./I/] => www-data:www-data (0755)
    [./I/do/] => www-data:www-data (0755)
    [./I/do/not/] => www-data:www-data (0755)
    [./I/do/not/exist/] => www-data:www-data (0755)
    [/home/alix/Server/_] => alix:alix (0777)
    [/home/alix/Server/_/chmod.php] => alix:alix (0644)
)

为什么./I/do/not/exist/的(子)文件夹中没有一个获得指定的(0777)权限?

3 个答案:

答案 0 :(得分:3)

在创建目录之前,您可能必须先清除umask。但是,建议使用chmod调整权限,而不是依赖于umask。

答案 1 :(得分:2)

看起来你有umask 022.尝试在umask(0)之前添加mkdir

答案 2 :(得分:1)

Just read the manual:

  

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

检查您的系统umask并相应地使用mode参数。

或者将umask设置为您能够处理的值。

在创建目录后处理chmod'ding