FileAttribUtil.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace PhpZip\Util;
  3. use PhpZip\Constants\DosAttrs;
  4. use PhpZip\Constants\UnixStat;
  5. /**
  6. * Class FileAttribUtil.
  7. *
  8. * @internal
  9. */
  10. class FileAttribUtil implements DosAttrs, UnixStat
  11. {
  12. /**
  13. * Get DOS mode,.
  14. *
  15. * @param int $xattr
  16. *
  17. * @return string
  18. */
  19. public static function getDosMode($xattr)
  20. {
  21. $xattr = (int) $xattr;
  22. $mode = (($xattr & self::DOS_DIRECTORY) === self::DOS_DIRECTORY) ? 'd' : '-';
  23. $mode .= (($xattr & self::DOS_ARCHIVE) === self::DOS_ARCHIVE) ? 'a' : '-';
  24. $mode .= (($xattr & self::DOS_READ_ONLY) === self::DOS_READ_ONLY) ? 'r' : '-';
  25. $mode .= (($xattr & self::DOS_HIDDEN) === self::DOS_HIDDEN) ? 'h' : '-';
  26. $mode .= (($xattr & self::DOS_SYSTEM) === self::DOS_SYSTEM) ? 's' : '-';
  27. $mode .= (($xattr & self::DOS_LABEL) === self::DOS_LABEL) ? 'l' : '-';
  28. return $mode;
  29. }
  30. /**
  31. * @param int $permission
  32. *
  33. * @return string
  34. */
  35. public static function getUnixMode($permission)
  36. {
  37. $mode = '';
  38. $permission = (int) $permission;
  39. switch ($permission & self::UNX_IFMT) {
  40. case self::UNX_IFDIR:
  41. $mode .= 'd';
  42. break;
  43. case self::UNX_IFREG:
  44. $mode .= '-';
  45. break;
  46. case self::UNX_IFLNK:
  47. $mode .= 'l';
  48. break;
  49. case self::UNX_IFBLK:
  50. $mode .= 'b';
  51. break;
  52. case self::UNX_IFCHR:
  53. $mode .= 'c';
  54. break;
  55. case self::UNX_IFIFO:
  56. $mode .= 'p';
  57. break;
  58. case self::UNX_IFSOCK:
  59. $mode .= 's';
  60. break;
  61. default:
  62. $mode .= '?';
  63. break;
  64. }
  65. $mode .= ($permission & self::UNX_IRUSR) ? 'r' : '-';
  66. $mode .= ($permission & self::UNX_IWUSR) ? 'w' : '-';
  67. if ($permission & self::UNX_IXUSR) {
  68. $mode .= ($permission & self::UNX_ISUID) ? 's' : 'x';
  69. } else {
  70. $mode .= ($permission & self::UNX_ISUID) ? 'S' : '-'; // S==undefined
  71. }
  72. $mode .= ($permission & self::UNX_IRGRP) ? 'r' : '-';
  73. $mode .= ($permission & self::UNX_IWGRP) ? 'w' : '-';
  74. if ($permission & self::UNX_IXGRP) {
  75. $mode .= ($permission & self::UNX_ISGID) ? 's' : 'x';
  76. } // == self::UNX_ENFMT
  77. else {
  78. $mode .= ($permission & self::UNX_ISGID) ? 'S' : '-';
  79. } // SunOS 4.1.x
  80. $mode .= ($permission & self::UNX_IROTH) ? 'r' : '-';
  81. $mode .= ($permission & self::UNX_IWOTH) ? 'w' : '-';
  82. if ($permission & self::UNX_IXOTH) {
  83. $mode .= ($permission & self::UNX_ISVTX) ? 't' : 'x';
  84. } // "sticky bit"
  85. else {
  86. $mode .= ($permission & self::UNX_ISVTX) ? 'T' : '-';
  87. } // T==undefined
  88. return $mode;
  89. }
  90. }