我正在运行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.