1: <?php
2:
3: declare(strict_types = 1);
4:
5: namespace CloudCastle\FileSystem;
6:
7: /**
8: * Класс Dir
9: * @version 0.0.1
10: * @package CloudCastle\FileSystem
11: * @generated Зорин Алексей, please DO NOT EDIT!
12: * @author Зорин Алексей <zorinalexey59292@gmail.com>
13: * @copyright 2022 разработчик Зорин Алексей Евгеньевич.
14: */
15: class Dir
16: {
17:
18: /**
19: * Проверка наличия дирректории
20: * @param string|null $dir Путь до дирректории
21: * @return bool Если дирректория найдена, то вернет true, иначе false
22: */
23: public static function has(?string $dir = null): bool
24: {
25: if ($dir) {
26: return is_dir($dir);
27: }
28: return false;
29: }
30:
31: /**
32: * Создать дирректорию
33: * @param string|null $dir Путь дирректории которую необходимо создать
34: * @param string $permissions Права на дирректорию
35: * @param bool $recursive Создать рекурсивно
36: * @return bool В случае успеха вернет true, иначе false
37: */
38: public static function create(?string $dir = null, int $permissions = 0777, bool $recursive = true): bool
39: {
40: if ( ! self::has($dir) AND $dir AND mkdir($dir, $permissions, $recursive)) {
41: return true;
42: }
43: return self::has($dir);
44: }
45:
46: /**
47: * Установить права на дирректорию
48: * @param string $dir Путь к дирректории
49: * @param string $permissions Необходимые права
50: * @return bool В случае успеха вернет true, иначе false
51: */
52: public static function permissions(string $dir, int $permissions = 0777): bool
53: {
54: if (self::has($dir) AND chmod($dir, $permissions)) {
55: return true;
56: }
57: return false;
58: }
59:
60: /**
61: * Удалить дирректорию рекурсивно
62: * @param string|null $dir Путь к дирректории
63: * @param bool $recursive Удалить дирректорию рекурсивно
64: * @return bool В случае успеха вернет true, иначе false
65: */
66: public static function delete(string $dir, bool $recursive = false): bool
67: {
68: if ($recursive) {
69: self::recursiveRemove($dir);
70: }
71: if ( ! is_dir($dir) OR( ! self::scan($dir) AND rmdir($dir))) {
72: return true;
73: }
74: return false;
75: }
76:
77: /**
78: * Сканировать дирректорию
79: * @param string $dir Путь к дирректории
80: * @return array Массив с файлами и каталогами директории
81: */
82: public static function scan(string $dir): array
83: {
84: $data = [];
85: if (is_dir($dir)) {
86: foreach (scandir($dir) as $file) {
87: if ($file !== '.' AND $file !== '..') {
88: $data[] = dirname($dir) . DIRECTORY_SEPARATOR .
89: basename($dir) . DIRECTORY_SEPARATOR .
90: $file;
91: }
92: }
93: }
94: return $data;
95: }
96:
97: /**
98: * Получить подробную информацию о директории
99: * @param string $dir Путь к дирректории
100: * @return File Объект класса File заполненый информацией об указаной директории
101: */
102: public static function info(string $dir): File
103: {
104: return File::info($dir);
105: }
106:
107: /**
108: * Рекурсивное удаление дирректории вместе содержимым
109: * @param string $dir Путь к дирректории
110: * @return void
111: */
112: private static function recursiveRemove(string $dir): void
113: {
114: $files = self::scan($dir);
115: foreach ($files as $file) {
116: if (File::has($file)) {
117: File::delete($file);
118: } elseif (self::has($file)) {
119: self::delete($file, true);
120: }
121: }
122: }
123:
124: }
125: