PHP无法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)权限?

解决方法:

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...