20250526
Добавлен класс File, который реализует функционал работы с файлами и выполнение операций над файлами одной командой.
This commit is contained in:
		
							
								
								
									
										148
									
								
								sources/classes/File.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								sources/classes/File.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | ||||
| <?php | ||||
|  | ||||
| namespace goodboyalex\php_components_pack\classes; | ||||
|  | ||||
| /** | ||||
|  * Класс, реализующий функционал работы с файлами и выполнение операций над файлами одной командой. | ||||
|  * | ||||
|  * @author Александр Бабаев | ||||
|  * @package php_components_pack | ||||
|  * @version 1.0 | ||||
|  * @since 1.0.21 | ||||
|  */ | ||||
| final class File | ||||
| { | ||||
|     /** | ||||
|      * Получает список файлов в директории и поддиректориях, соответствующей шаблону $pattern. | ||||
|      * | ||||
|      * @param string $dir Родительская директория | ||||
|      * @param string $pattern Шаблон имени файла | ||||
|      * | ||||
|      * @return false|array Список файлов или false в случае ошибки | ||||
|      */ | ||||
|     public static function FindFiles (string $dir, string $pattern = '*.php'): false|array | ||||
|     { | ||||
|         // Получаем список файлов и каталогов в текущей директории | ||||
|         $files = glob("$dir/$pattern"); | ||||
|  | ||||
|         // Если произошла ошибка | ||||
|         if ($files === false) | ||||
|             // - то возвращаем false | ||||
|             return false; | ||||
|  | ||||
|         // Перебираем поддиректории | ||||
|         foreach (glob("$dir/*", GLOB_ONLYDIR | GLOB_NOSORT) as $subDir) { | ||||
|             // - если ошибка | ||||
|             if ($subDir === false) | ||||
|                 // - то пропускаем | ||||
|                 continue; | ||||
|  | ||||
|             // - рекурсивный вызов для каждой поддиректории | ||||
|             $files = array_merge($files, self::FindFiles($subDir, $pattern)); | ||||
|         } | ||||
|  | ||||
|         // Возвращаем список файлов | ||||
|         return $files; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Получает имя файла без пути к нему и расширения. | ||||
|      * | ||||
|      * @param string $fileName Полное имя файла с путем к нему. | ||||
|      * | ||||
|      * @return string Имя файла без пути к нему и расширения. | ||||
|      */ | ||||
|     public static function ExtractFileNameWithoutExtension (string $fileName): string | ||||
|     { | ||||
|         // Имя файла без пути к нему | ||||
|         $fileNameOnly = self::ExtractFileName($fileName); | ||||
|  | ||||
|         // Расширение файла | ||||
|         $fileExtension = self::ExtractFileExtension($fileName); | ||||
|  | ||||
|         // Возвращаем имя файла без пути к нему и расширения. | ||||
|         return substr($fileNameOnly, 0, -strlen($fileExtension) - 1); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Получает имя файла без пути к нему, но с расширением. | ||||
|      * | ||||
|      * @param string $fileName Полное имя файла с путем к нему. | ||||
|      * | ||||
|      * @return string Имя файла без пути к нему, но с расширением. | ||||
|      */ | ||||
|     public static function ExtractFileName (string $fileName): string | ||||
|     { | ||||
|         return basename($fileName); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Получает расширение файла. | ||||
|      * | ||||
|      * @param string $fileName Имя файла с путем к нему. | ||||
|      * | ||||
|      * @return string Расширение файла. | ||||
|      */ | ||||
|     public static function ExtractFileExtension (string $fileName): string | ||||
|     { | ||||
|  | ||||
|         return pathinfo($fileName, PATHINFO_EXTENSION); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Получает относительный путь к файлу, относительно заданной папки | ||||
|      * | ||||
|      * @param string $fullPath Полный путь к файлу | ||||
|      * @param string $basePath Вырезаемый путь (с начала) | ||||
|      * | ||||
|      * @return false|string Относительный путь к файлу | ||||
|      */ | ||||
|     public static function GetRelativePath (string $fullPath, string $basePath): false|string | ||||
|     { | ||||
|         return stripos($fullPath, $basePath) !== false ? str_replace($basePath, "", $fullPath) : false; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Удаляет директорию вместе со всеми файлами и поддиректориями. | ||||
|      * | ||||
|      * @param string $directory Полный путь к директории. | ||||
|      * | ||||
|      * @return bool Результат удаления. | ||||
|      */ | ||||
|     public static function RemoveDir (string $directory): bool | ||||
|     { | ||||
|         // Если директории не существует | ||||
|         if (!file_exists($directory)) | ||||
|             // - то удаление не требуется | ||||
|             return true; | ||||
|  | ||||
|         // Если это не директория | ||||
|         if (!is_dir($directory)) | ||||
|             // - то удаляем файл | ||||
|             return unlink($directory); | ||||
|  | ||||
|         // Перебираем все файлы и поддиректории | ||||
|         foreach (scandir($directory) as $item) { | ||||
|             // - если это '.' или '..' | ||||
|             if ($item == '.' || $item == '..') | ||||
|                 // -- то пропускаем | ||||
|                 continue; | ||||
|  | ||||
|             // - задаём переменную - целевую директорию | ||||
|             $target = $directory . DIRECTORY_SEPARATOR . $item; | ||||
|  | ||||
|             // - если это директория | ||||
|             if (is_dir($target)) | ||||
|                 // -- то рекурсивно удаляем её | ||||
|                 if (!self::RemoveDir($target)) | ||||
|                     // --- и прерываем удаление директории, если ошибка | ||||
|                     return false; | ||||
|                 else | ||||
|                     // -- иначе удаляем файл | ||||
|                     unlink($target); | ||||
|         } | ||||
|  | ||||
|         // Удаляем директорию | ||||
|         return rmdir($directory); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user