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