65 lines
2.1 KiB
PHP
65 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Traits;
|
|
|
|
use RuntimeException;
|
|
|
|
trait FileTrait
|
|
{
|
|
final protected function mkdir_FileTrait(string $path)
|
|
{
|
|
if (!is_dir($path)) {
|
|
if (!mkdir($path, 0755, true)) {
|
|
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 디렉토리 생성 실패:{$path}");
|
|
}
|
|
}
|
|
}
|
|
|
|
final protected function isFileType_FileTrait(string $file_ext, string $type = "img"): bool
|
|
{
|
|
switch ($type) {
|
|
case "audio":
|
|
$exts = ['wav', 'mp3'];
|
|
break;
|
|
case "video":
|
|
$exts = ['mov', 'avi', 'mp4'];
|
|
break;
|
|
case "img":
|
|
default:
|
|
$exts = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
|
|
break;
|
|
}
|
|
return in_array($file_ext, $exts);
|
|
}
|
|
|
|
// 디렉토리에 속한 파일 List
|
|
final protected function getFiles_FileTrait(string $path, string $type = "img"): array
|
|
{
|
|
// 디렉토리에서 파일 목록 가져오기
|
|
$files = [];
|
|
foreach (scandir($path) as $file_name) {
|
|
// 확장자가 이미지 형식인지 확인
|
|
$file_ext = pathinfo($path . DIRECTORY_SEPARATOR . $file_name, PATHINFO_EXTENSION);
|
|
if ($this->isFileType_FileTrait($file_ext, $type)) {
|
|
$files[] = $file_name;
|
|
}
|
|
}
|
|
return $files;
|
|
}
|
|
|
|
final protected function getUniqueName_FileTrait(string $path, string $file_name): string
|
|
{
|
|
$fileExtension = pathinfo($file_name, PATHINFO_EXTENSION);
|
|
$fileBaseName = pathinfo($file_name, PATHINFO_FILENAME);
|
|
$newFilename = $file_name;
|
|
$counter = 1;
|
|
// 중복된 파일명이 존재하는지 확인
|
|
while (file_exists($path . DIRECTORY_SEPARATOR . $newFilename)) {
|
|
// 중복된 파일명이 존재하면 숫자를 추가하여 새로운 파일명 생성
|
|
$newFilename = $fileBaseName . '_' . $counter . '.' . $fileExtension;
|
|
$counter++;
|
|
}
|
|
return $newFilename;
|
|
}
|
|
}
|