109 lines
2.9 KiB
PHP
109 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace PhpZip\Util;
|
|
|
|
use PhpZip\Constants\DosAttrs;
|
|
use PhpZip\Constants\UnixStat;
|
|
|
|
/**
|
|
* Class FileAttribUtil.
|
|
*
|
|
* @internal
|
|
*/
|
|
class FileAttribUtil implements DosAttrs, UnixStat
|
|
{
|
|
/**
|
|
* Get DOS mode,.
|
|
*
|
|
* @param int $xattr
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function getDosMode($xattr)
|
|
{
|
|
$xattr = (int) $xattr;
|
|
|
|
$mode = (($xattr & self::DOS_DIRECTORY) === self::DOS_DIRECTORY) ? 'd' : '-';
|
|
$mode .= (($xattr & self::DOS_ARCHIVE) === self::DOS_ARCHIVE) ? 'a' : '-';
|
|
$mode .= (($xattr & self::DOS_READ_ONLY) === self::DOS_READ_ONLY) ? 'r' : '-';
|
|
$mode .= (($xattr & self::DOS_HIDDEN) === self::DOS_HIDDEN) ? 'h' : '-';
|
|
$mode .= (($xattr & self::DOS_SYSTEM) === self::DOS_SYSTEM) ? 's' : '-';
|
|
$mode .= (($xattr & self::DOS_LABEL) === self::DOS_LABEL) ? 'l' : '-';
|
|
|
|
return $mode;
|
|
}
|
|
|
|
/**
|
|
* @param int $permission
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function getUnixMode($permission)
|
|
{
|
|
$mode = '';
|
|
$permission = (int) $permission;
|
|
switch ($permission & self::UNX_IFMT) {
|
|
case self::UNX_IFDIR:
|
|
$mode .= 'd';
|
|
break;
|
|
|
|
case self::UNX_IFREG:
|
|
$mode .= '-';
|
|
break;
|
|
|
|
case self::UNX_IFLNK:
|
|
$mode .= 'l';
|
|
break;
|
|
|
|
case self::UNX_IFBLK:
|
|
$mode .= 'b';
|
|
break;
|
|
|
|
case self::UNX_IFCHR:
|
|
$mode .= 'c';
|
|
break;
|
|
|
|
case self::UNX_IFIFO:
|
|
$mode .= 'p';
|
|
break;
|
|
|
|
case self::UNX_IFSOCK:
|
|
$mode .= 's';
|
|
break;
|
|
|
|
default:
|
|
$mode .= '?';
|
|
break;
|
|
}
|
|
$mode .= ($permission & self::UNX_IRUSR) ? 'r' : '-';
|
|
$mode .= ($permission & self::UNX_IWUSR) ? 'w' : '-';
|
|
|
|
if ($permission & self::UNX_IXUSR) {
|
|
$mode .= ($permission & self::UNX_ISUID) ? 's' : 'x';
|
|
} else {
|
|
$mode .= ($permission & self::UNX_ISUID) ? 'S' : '-'; // S==undefined
|
|
}
|
|
$mode .= ($permission & self::UNX_IRGRP) ? 'r' : '-';
|
|
$mode .= ($permission & self::UNX_IWGRP) ? 'w' : '-';
|
|
|
|
if ($permission & self::UNX_IXGRP) {
|
|
$mode .= ($permission & self::UNX_ISGID) ? 's' : 'x';
|
|
} // == self::UNX_ENFMT
|
|
else {
|
|
$mode .= ($permission & self::UNX_ISGID) ? 'S' : '-';
|
|
} // SunOS 4.1.x
|
|
|
|
$mode .= ($permission & self::UNX_IROTH) ? 'r' : '-';
|
|
$mode .= ($permission & self::UNX_IWOTH) ? 'w' : '-';
|
|
|
|
if ($permission & self::UNX_IXOTH) {
|
|
$mode .= ($permission & self::UNX_ISVTX) ? 't' : 'x';
|
|
} // "sticky bit"
|
|
else {
|
|
$mode .= ($permission & self::UNX_ISVTX) ? 'T' : '-';
|
|
} // T==undefined
|
|
|
|
return $mode;
|
|
}
|
|
}
|