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