-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtreeFiles.php
58 lines (43 loc) · 1.65 KB
/
treeFiles.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
$getTreeFiles = function ($dir, $level = 5, $fileTree = true, array $extension = []) use (&$getTreeFiles){
$directoriesIgnored = ['.', '..'];
if($level <= 0)
return [];
$fileInfo = new SplFileInfo($dir);
if(!$fileInfo->isDir())
throw new Exception("Por favor adicione um diretório valido!");
if(!$fileInfo->isReadable())
throw new Exception("Você não pode ler este diretório!");
$dir = $fileInfo->getRealPath();
$treeFiles = scandir($dir);
if(!is_array($treeFiles))
throw new Exception("Ocorreu um erro ao exportar a lista de diretórios!");
$structure = [];
foreach ($treeFiles as $fileDir) {
$dirInfo = new SplFileInfo("{$dir}/{$fileDir}");
if(!in_array($dirInfo->getBasename(), $directoriesIgnored) && ($dirInfo->isDir() || empty($extension) || ($dirInfo->isFile() && in_array($dirInfo->getExtension(), $extension)))){
if($dirInfo->isFile())
$structure[] = [
'name' => $dirInfo->getBasename(),
'only_name' => $dirInfo->getBasename("." . $dirInfo->getExtension()),
'type' => $dirInfo->getType(),
'size' => $dirInfo->getSize() / 1000,
'path' => $dirInfo->getPathname(),
'extension' => $dirInfo->getExtension(),
'readable' => $dirInfo->isReadable(),
'writable' => $dirInfo->isWritable(),
];
elseif($fileTree)
$structure[] = [
'name' => $dirInfo->getBasename(),
'type' => $dirInfo->getType(),
'path' => $dirInfo->getPathname() . "/",
'readable' => $dirInfo->isReadable(),
'writable' => $dirInfo->isWritable(),
'tree' => $getTreeFiles($dirInfo->getRealPath(), $level - 1, $fileTree, $extension),
];
}
unset($dirInfo);
}
return $structure;
};