0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4, 'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8); $bytes = (int)$bytes; $value = 0; if ($bytes > 0) { if (!array_key_exists($unit, $units)) { $pow = floor(log($bytes) / log(1024)); $unit = array_search($pow, $units); } $value = (intval($bytes) / pow(1024, floor($units[$unit]))); } if (!is_numeric($decimals) || $decimals < 0) { $decimals = 2; } if ($unit == 'KB' && $value < 0.1) { $decimals = 0; } if ($showUnit) { return sprintf('%.' . $decimals . 'f' . $unit, $value); } else { return sprintf('%.' . $decimals . 'f ', $value); } } /** * 获取用户访问目录路径 * @param string $path 目录 */ public static function getVisitPath($path) { $usePath = explode('/', $path); $dirPathes = array(); $lastDir = $usePath[0]; foreach ($usePath AS $key => $path) { if (!$path) continue; $array = array(); $array['name'] = $path; if ($key > 0) { $lastDir = $lastDir . '/' . $path; } $array['path'] = $lastDir; $array['url'] = _link('/dirs?path=' . urlencode($lastDir)); $dirPathes[] = $array; } return $dirPathes; } public static function fileType($fullPath) { if (is_dir($fullPath)) return 'folder'; return pathinfo($fullPath, PATHINFO_EXTENSION); } /** * 是否是图片文件 * @param string $fullPath 文件路径 * @return bool */ public static function isImage($fullPath) { $fileType = self::fileType($fullPath); if (in_array($fileType, array('gif', 'jpg', 'jpeg', 'webp', 'png', 'bmp'))) { return true; } return false; } /** * 获取目录中文件及目录 * @param string $path 目录 * @return array */ public static function getFolders($path, $filter = '*') { $dir = dir($path); $filetype = _include('../private/configure/filetype.config.php'); $files = array(); while (($file = $dir->read()) !== false) { if ($file == '.' || $file == '..') continue; $fullPath = str_replace('//', '/', $path . '/' . $file); $isDir = is_dir($fullPath); if ($filter != '*' && !$isDir && !preg_match('/' . $filter . '$/', $file)) continue; $array = array(); $type = self::fileType($fullPath); $array['name'] = iconv('GBK', 'UTF-8', $file); if (!in_array($type, $filetype)) { $array['icon'] = _link('static/images/filetype/unknow.png'); } else { $array['icon'] = _link('static/images/filetype/' . $type . '.gif'); } $array['type'] = is_dir($fullPath) ? 'folder' : 'file'; $array['url'] = $array['type'] == 'folder' ? '/dirs?path=' . urlencode($fullPath) : '/dirs/file?file=' . urlencode($fullPath); $array['remove'] = _link('/dirs/remove?file=' . $fullPath . '&isAjax=1'); $array['path'] = _link($fullPath); $size = $array['type'] == 'folder' ? '' : filesize($fullPath); $array['size'] = $array['type'] == 'folder' ? '' : \helper\tools::formatSize($size, 'KB'); $array['isImage'] = self::isImage($fullPath); //如果文件超过200k就不让直接查看,让下载后查看 if ($size > 1024 * 200) { $array['url'] = '/dirs/down?file=' . urlencode($fullPath); } $array['url'] = _link($array['url']); $array['extension'] = $type; $array['createAt'] = filectime($fullPath); $array['updateAt'] = fileatime($fullPath); $files[] = $array; } $dir->close(); return $files; } /** * 不在指定目录的文件不让删除 * * @param $file * @return bool */ public static function allowRemove($file) { $allowFolder = array('tmp', 'tmp/compile'); $file = ltrim($file, './'); foreach ($allowFolder AS $allow) { if (stristr($file, $allow)) return true; } return false; } /** * 删除指定文件夹或文件 * @param $dir * @return bool */ public static function removeFile($dir) { //只让删除指定文件夹的文件,其他文件夹中的不让删除 if (!self::allowRemove($dir)) { return false; } if (is_file($dir)) return unlink($dir); $dh = opendir($dir); while ($file = readdir($dh)) { if ($file != "." && $file != "..") { $fullpath = $dir . "/" . $file; if (!is_dir($fullpath)) { unlink($fullpath); } else { self::removeFile($fullpath); } } } closedir($dh); //删除当前文件夹: if (rmdir($dir)) { return true; } else { return false; } } }