用 unix/linux 格式显示文件权限

用 *nix 格式显示文件权限

用 fileperms 获取文件权限的时候,返回的是以八进制形式显示的文件的权限,如果我们想要得到 unix 或者 linux 显示文件权限的格式,可以用本文介绍的方法。

<?php
// 说明:用 unix/linux 格式显示文件权限
// 整理:http://www.CodeBit.cn

$perms = fileperms('/etc/passwd' );

if (($perms & 0xC000) == 0xC000) {
    // Socket
    $info = 's';
} elseif (( $perms & 0xA000) == 0xA000) {
    // Symbolic Link
    $info = 'l';
} elseif (($perms & 0x8000 ) == 0x8000) {
    // Regular
    $info = '-';
} elseif (( $perms & 0x6000) == 0x6000) {
    // Block special
    $info = 'b';
} elseif (($perms & 0x4000 ) == 0x4000) {
    // Directory
    $info = 'd';
} elseif (( $perms & 0x2000) == 0x2000) {
    // Character special
    $info = 'c';
} elseif (($perms & 0x1000 ) == 0x1000) {
    // FIFO pipe
    $info = 'p';
} else {
     // Unknown
    $info = 'u';
}

// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
            (($perms & 0x0800) ? 's' : 'x' ) :
            (($perms & 0x0800) ? 'S' : '-'));

// Group
$info .= (( $perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
            (($perms & 0x0400) ? 's' : 'x' ) :
            (($perms & 0x0400) ? 'S' : '-'));

// World
$info .= (( $perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
            (($perms & 0x0200) ? 't' : 'x' ) :
            (($perms & 0x0200) ? 'T' : '-'));

echo $info;
?>

摘录自 User manager for PureFTPd 的权限显示函数

PureFTPd 是 *nix 下的一个 FTP 服务器软件,而User manager for PureFTPd 则是为了方便在线管理 ftp 用户设计制作的。作者是:M.Mastenbroek。

<?php
// 说明:摘录自 User manager for PureFTPd 的权限显示函数
// 整理:http://www.CodeBit.cn

function DisplayFilePermissions($Mode) {
	// Determine Type
	if ($Mode & 0x1000) {
		$Type = 'p';	// FIFO pipe
	} else if ($Mode & 0x2000) {
		$Type = 'c';	// Character special
	} else if ($Mode & 0x4000) {
		$Type = 'd';	// Directory
	} else if ($Mode & 0x6000) {
		$Type = 'b';	// Block special
	} else if ($Mode & 0x8000) {
		$Type = '-';	// Regular
	} else if ($Mode & 0xA000) {
		$Type = 'l';	// Symbolic Link
	} else if ($Mode & 0xC000) {
		$Type = 's';	// Socket
	} else {
		$Type = 'u';	// UNKNOWN
	}

	// Determine permissions
	$Owner['read']    = ($Mode & 00400) ? 'r' : '-';
	$Owner['write']   = ($Mode & 00200) ? 'w' : '-';
	$Owner['execute'] = ($Mode & 00100) ? 'x' : '-';
	$Group['read']    = ($Mode & 00040) ? 'r' : '-';
	$Group['write']   = ($Mode & 00020) ? 'w' : '-';
	$Group['execute'] = ($Mode & 00010) ? 'x' : '-';
	$World['read']    = ($Mode & 00004) ? 'r' : '-';
	$World['write']   = ($Mode & 00002) ? 'w' : '-';
	$World['execute'] = ($Mode & 00001) ? 'x' : '-';

	// Adjust for SUID, SGID and sticky bit
	if ($Mode & 0x800) $Owner['execute'] = ($Owner['execute'] == 'x') ? 's' : 'S';
	if ($Mode & 0x400) $Group['execute'] = ($Group['execute'] == 'x') ? 's' : 'S';
	if ($Mode & 0x200) $World['execute'] = ($World['execute'] == 'x') ? 't' : 'T';

	return
		$Type
		. $Owner['read'] . $Owner['write'] . $Owner['execute']
		. $Group['read'] . $Group['write'] . $Group['execute']
		. $World['read'] . $World['write'] . $World['execute'];
}

$perms = fileperms( '/etc/passwd' );

echo DisplayFilePermissions($perms);

?>

关于 Artlover

有多年 web 开发经验,擅长领域 PHP / MySQL / CSS / Javascript / Zend Framework ,期望:在分享中共同成长。
此条目发表在 PHP 分类目录,贴了 , , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>