| <?php |
| namespace app\common\util; |
| class Dir { |
|
|
| private $_values = array(); |
| public $error = ""; |
|
|
| |
| |
| |
| |
| public function __construct($path = '', $pattern = '*') { |
| if (!$path) return false; |
| if (substr($path, -1) != "/") $path .= "/"; |
| $this->listFile($path, $pattern); |
| } |
|
|
|
|
| |
| |
| |
| |
| |
| |
| public static function create($path, $mode = 0755) { |
| if(is_dir($path)) return TRUE; |
| $path = str_replace("\\", "/", $path); |
| if(substr($path, -1) != '/') $path = $path.'/'; |
| $temp = explode('/', $path); |
| $cur_dir = ''; |
| $max = count($temp) - 1; |
| for($i=0; $i<$max; $i++) { |
| $cur_dir .= $temp[$i].'/'; |
| if (@is_dir($cur_dir)) continue; |
| @mkdir($cur_dir, $mode, true); |
| @chmod($cur_dir, $mode); |
| } |
| return is_dir($path); |
| } |
|
|
| |
| |
| |
| |
| public static function listFile($pathname, $pattern = '*') { |
| static $_listDirs = array(); |
| $guid = md5($pathname . $pattern); |
| if (!isset($_listDirs[$guid])) { |
| $dir = array(); |
| $list = glob($pathname . $pattern); |
| foreach ($list as $i => $file) { |
| |
| |
| |
| $dir[$i]['filename'] = preg_replace('/^.+[\\\\\\/]/', '', $file); |
| $dir[$i]['pathname'] = realpath($file); |
| $dir[$i]['owner'] = fileowner($file); |
| $dir[$i]['perms'] = fileperms($file); |
| $dir[$i]['inode'] = fileinode($file); |
| $dir[$i]['group'] = filegroup($file); |
| $dir[$i]['path'] = dirname($file); |
| $dir[$i]['atime'] = fileatime($file); |
| $dir[$i]['ctime'] = filectime($file); |
| $dir[$i]['size'] = filesize($file); |
| $dir[$i]['type'] = filetype($file); |
| $dir[$i]['ext'] = is_file($file) ? strtolower(substr(strrchr(basename($file), '.'), 1)) : ''; |
| $dir[$i]['mtime'] = filemtime($file); |
| $dir[$i]['isDir'] = is_dir($file); |
| $dir[$i]['isFile'] = is_file($file); |
| $dir[$i]['isLink'] = is_link($file); |
| |
| $dir[$i]['isReadable'] = is_readable($file); |
| $dir[$i]['isWritable'] = is_writable($file); |
| } |
| $cmp_func = create_function('$a,$b', ' |
| $k = "isDir"; |
| if($a[$k] == $b[$k]) return 0; |
| return $a[$k]>$b[$k]?-1:1; |
| '); |
| |
| usort($dir, $cmp_func); |
| $this->_values = $dir; |
| $_listDirs[$guid] = $dir; |
| } else { |
| $this->_values = $_listDirs[$guid]; |
| } |
| } |
|
|
| |
| |
| |
| |
| public static function current($arr) { |
| if (!is_array($arr)) { |
| return false; |
| } |
| return current($arr); |
| } |
|
|
| |
| |
| |
| |
| public static function getATime() { |
| $current = $this->current($this->_values); |
| return $current['atime']; |
| } |
|
|
| |
| |
| |
| |
| public static function getCTime() { |
| $current = $this->current($this->_values); |
| return $current['ctime']; |
| } |
|
|
| |
| |
| |
| |
| public static function getChildren() { |
| $current = $this->current($this->_values); |
| if ($current['isDir']) { |
| return new Dir($current['pathname']); |
| } |
| return false; |
| } |
|
|
| |
| |
| |
| |
| public static function getFilename() { |
| $current = $this->current($this->_values); |
| return $current['filename']; |
| } |
|
|
| |
| |
| |
| |
| public static function getGroup() { |
| $current = $this->current($this->_values); |
| return $current['group']; |
| } |
|
|
| |
| |
| |
| |
| public static function getInode() { |
| $current = $this->current($this->_values); |
| return $current['inode']; |
| } |
|
|
| |
| |
| |
| |
| public static function getMTime() { |
| $current = $this->current($this->_values); |
| return $current['mtime']; |
| } |
|
|
| |
| |
| |
| |
| function getOwner() { |
| $current = $this->current($this->_values); |
| return $current['owner']; |
| } |
|
|
| |
| |
| |
| |
| public static function getPath() { |
| $current = $this->current($this->_values); |
| return $current['path']; |
| } |
|
|
| |
| |
| |
| |
| public static function getPathname() { |
| $current = $this->current($this->_values); |
| return $current['pathname']; |
| } |
|
|
| |
| |
| |
| |
| public static function getPerms() { |
| $current = $this->current($this->_values); |
| return $current['perms']; |
| } |
|
|
| |
| |
| |
| |
| public static function getSize() { |
| $current = $this->current($this->_values); |
| return $current['size']; |
| } |
|
|
| |
| |
| |
| |
| public static function getType() { |
| $current = $this->current($this->_values); |
| return $current['type']; |
| } |
|
|
| |
| |
| |
| |
| public static function isDir() { |
| $current = $this->current($this->_values); |
| return $current['isDir']; |
| } |
|
|
| |
| |
| |
| |
| public static function isFile() { |
| $current = $this->current($this->_values); |
| return $current['isFile']; |
| } |
|
|
| |
| |
| |
| |
| public static function isLink() { |
| $current = $this->current($this->_values); |
| return $current['isLink']; |
| } |
|
|
| |
| |
| |
| |
| public static function isExecutable() { |
| $current = $this->current($this->_values); |
| return $current['isExecutable']; |
| } |
|
|
| |
| |
| |
| |
| public static function isReadable() { |
| $current = $this->current($this->_values); |
| return $current['isReadable']; |
| } |
|
|
| |
| |
| |
| |
| public static function getIterator() { |
| return new ArrayObject($this->_values); |
| } |
|
|
| |
| public static function toArray() { |
| return $this->_values; |
| } |
|
|
| |
| |
| |
| |
| |
| public static function isEmpty($directory) { |
| $handle = opendir($directory); |
| while (($file = readdir($handle)) !== false) { |
| if ($file != "." && $file != "..") { |
| closedir($handle); |
| return false; |
| } |
| } |
| closedir($handle); |
| return true; |
| } |
|
|
| |
| |
| |
| |
| public static function getList($directory) { |
| $scandir = scandir($directory); |
| $dir = []; |
| foreach ($scandir as $k => $v) { |
| if ($v == '.' || $v == '..') { |
| continue; |
| } |
| $dir[] = $v; |
| } |
| return $dir; |
| } |
|
|
| |
| |
| |
| |
| public static function delDir($directory, $subdir = true) { |
| if (is_dir($directory) == false) { |
| return false; |
| } |
| $handle = opendir($directory); |
| while (($file = readdir($handle)) !== false) { |
| if ($file != "." && $file != "..") { |
| is_dir("$directory/$file") ? |
| Dir::delDir("$directory/$file") : |
| @unlink("$directory/$file"); |
| } |
| } |
| if (readdir($handle) == false) { |
| closedir($handle); |
| rmdir($directory); |
| } |
| } |
|
|
| |
| |
| |
| |
| public static function del($directory) { |
| if (is_dir($directory) == false) { |
| return false; |
| } |
| $handle = opendir($directory); |
| while (($file = readdir($handle)) !== false) { |
| if ($file != "." && $file != ".." && is_file("$directory/$file")) { |
| unlink("$directory/$file"); |
| } |
| } |
| closedir($handle); |
| } |
|
|
| |
| |
| |
| |
| public static function copyDir($source, $destination) { |
| if (is_dir($source) == false) { |
| return false; |
| } |
| if (is_dir($destination) == false) { |
| mkdir($destination, 0755); |
| } |
| $handle = opendir($source); |
| while (false !== ($file = readdir($handle))) { |
| if ($file != "." && $file != "..") { |
| if (is_dir("$source/$file")) { |
| Dir::copyDir("$source/$file", "$destination/$file"); |
| } else { |
| copy("$source/$file", "$destination/$file"); |
| } |
| } |
| } |
| closedir($handle); |
| } |
|
|
| } |
|
|
| ?> |