. */ namespace SP\Util; use FilesystemIterator; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use SP\Core\Exceptions\FileNotFoundException; use SP\DataModel\FileData; /** * Class FileUtil * * @package SP\Util */ final class FileUtil { private const IMAGE_MIME = [ 'image/jpeg', 'image/png', 'image/bmp', 'image/gif', ]; /** * Removes a directory in a recursive way * * @throws \SP\Core\Exceptions\FileNotFoundException * @see https://stackoverflow.com/a/7288067 */ public static function rmdir_recursive(string $dir): bool { if (!is_dir($dir)) { throw new FileNotFoundException('Directory does not exist'); } $it = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir, FilesystemIterator::SKIP_DOTS ), RecursiveIteratorIterator::CHILD_FIRST ); foreach ($it as $file) { if ($file->isDir()) { rmdir($file->getPathname()); } else { unlink($file->getPathname()); } } return rmdir($dir); } public static function isImage(FileData $fileData): bool { return in_array(strtolower($fileData->getType()), self::IMAGE_MIME, true); } }