| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?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;
- }
- }
|