用 *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);
?>