<?php
namespace laytp\library;
use DateTime;
use DateTimeZone;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use think\facade\Config;
class DirFile
{
public static function createDir($path, $mode = 0777)
{
if (is_dir($path)) {
return true;
} else {
if (mkdir($path, $mode, true)) {
return true;
} else {
return false;
}
}
}
public static function recurDir($pathName, $filterDir = [], $filterFile = [], $selected = [], $output = ['id'=>'id', 'fullName' => 'fullName', 'baseName' => 'baseName'])
{
$result = [];
$temp = [];
if (!is_dir($pathName) || !is_readable($pathName)) {
return null;
}
$allFiles = scandir($pathName);
foreach ($allFiles as $fileName) {
if (in_array($fileName, ['.', '..'])) {
continue;
}
if (mb_substr($pathName, -1, 1) == DS) {
$fullName = $pathName . $fileName;
} else {
$fullName = $pathName . DS . $fileName;
}
$baseName = basename($fileName);
if (is_dir($fullName)) {
if (in_array($fullName, $filterDir)) {
continue;
}
$res = [
$output['baseName'] => $baseName,
$output['fullName'] => $fullName,
'type' => 'dir',
'children' => self::recurDir($fullName, $filterDir, $filterFile, $selected, $output),
];
if (in_array($fullName, $selected)) {
$res['state'] = ['selected' => true];
} else {
$res['state'] = ['selected' => false];
}
$apiDirName = Config::get('apidirname');
if(isset($apiDirName[$fullName])){
$res['name'] = $apiDirName[$fullName];
}else{
$res['name'] = '';
}
$res['id'] = $fullName;
$result[] = $res;
} else {
if($filterFile != '*'){
if (in_array($fullName, $filterFile)) {
continue;
}
$tem = [$output['id'] => $fullName, $output['baseName'] => $baseName, $output['fullName'] => $fullName, 'type' => 'file', 'state' => ['selected' => false]];
if (in_array($fullName, $selected)) {
$tem['state'] = ['selected' => true];
} else {
$tem['state'] = ['selected' => false];
}
$temp[] = $tem;
}
}
}
if ($temp) {
foreach ($temp as $f) {
$result[] = $f;
}
}
return $result;
}
public static function rmDirs($dirname, $withself = true)
{
if (!is_dir($dirname)) {
return false;
}
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($files as $fileinfo) {
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
$todo($fileinfo->getRealPath());
}
if ($withself) {
@rmdir($dirname);
}
return true;
}
public static function copyDirs($source, $dest)
{
if (!is_dir($dest)) {
mkdir($dest, 0755, true);
}
foreach (
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
) as $item
) {
if ($item->isDir()) {
$sontDir = $dest . DS . $iterator->getSubPathName();
if (!is_dir($sontDir)) {
mkdir($sontDir, 0755, true);
}
} else {
copy($item, $dest . DS . $iterator->getSubPathName());
}
}
}
}