You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

65 lines
2.1 KiB

<?php
namespace App\Utils;
class FileUtils {
public static function scanBaseDir($baseDir): array
{
if (!is_dir($baseDir)) {
return [];
}
$dirs = scandir($baseDir);
$baseMap = [];
foreach ($dirs as $dir) {
if ($dir == "." || $dir == ".." || $dir == ".DS_Store") {
continue;
}
$baseMap[substr($dir, 0, strpos($dir, "-"))] = $baseDir . "/" . $dir;
}
return $baseMap;
}
public static function scanDuplicateDir($baseDir): array {
if (!is_dir($baseDir)) {
return [];
}
$dirs = scandir($baseDir);
$baseMap = [];
foreach ($dirs as $dir) {
if ($dir == "." || $dir == ".." || $dir == ".DS_Store") {
continue;
}
$baseMap[substr($dir, 0, strpos($dir, "-"))][] = $baseDir . "/" . $dir;
}
return $baseMap;
}
public static function humanFilesize($bytes, $decimals = 2) {
$sz = 'BKMGTP';
$factor = floor((strlen($bytes) - 1) / 3);
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
}
public static function listFiles($dir, $indent = 0) {
if (is_dir($dir)) {
// 打开目录
if ($dh = opendir($dir)) {
// 输出缩进
echo str_repeat(" ", $indent) . $dir . "\n";
// 遍历目录中的文件和子目录
while (($file = readdir($dh)) !== false) {
if ($file != "." && $file != "..") {
// 如果是子目录,则递归调用 list_files() 方法
if (is_dir($dir . "/" . $file)) {
self::listFiles($dir . "/" . $file, $indent + 2);
} else {
// 如果是文件,则输出文件名
echo str_repeat(" ", $indent + 2) . $file . "\n";
}
}
}
// 关闭目录
closedir($dh);
}
}
}
}