php mime type 관련하여 워드프레스 플러그인 Snippets 활용법입니다.
Table of Contents
사용자 맞춤형 파일 업로드 MIME TYPE 관리
웹사이트에서는 특정 파일 형식만 업로드를 허용하기 위해 MIME 타입을 관리합니다.
이 글에서는 사용자 정의로 웹사이트에 업로드 가능한 파일 형식을 추가하고 관리하는 방법에 대해 설명합니다.
코드 스니펫을 통해 쉽게 이해하실 수 있습니다.
1. 기능 설명
- 웹사이트에서 업로드 가능한 파일 확장자를 추가하는 기능
- 파일 확장자를 카테고리별로 활성화/비활성화하는 기능
- 특정 확장자를 업로드 금지 리스트에서 관리하는 기능
2. 사용 방법
1) MIME TYPE 확장자 추가
custom_allowed_mimes
함수를 통해 원하는 확장자와 그에 해당하는 MIME 타입을 추가합니다.
phpCopy code
$existing_mimes['json'] = 'application/json';
이를 통해 .json
파일을 업로드할 수 있게 됩니다.
2) 확장자 활성화/비활성화
add_allow_upload_extension_exception
함수에서 각 카테고리별로 활성화/비활성화를 설정합니다. 예를 들어, 문서 확장자만 활성화하려면:
phpCopy code
$enable_documents = true; $enable_images = false; ...
3) 금지 확장자 관리
disallowed_extensions.json
파일을 통해 특정 확장자를 업로드 금지 리스트에 추가할 수 있습니다. 예:
jsonCopy code
{ "disallowed": ["exe", "bat"] }
3. MIME TYPE 수정시 주의사항
⚠️ 이 코드는 수정 중 에러가 발생할 경우 소스 복구 비용 10만원이 추가되므로 절대 수정하지 마시기 바랍니다!!
코드를 변경하거나 수정할 때는 반드시 원본을 백업하고, 전문가의 도움을 받아 진행해주세요.
등록하고 싶은 확장자가 있으면 필히 톡톡을 이용하셔서 요청하시기 바랍니다.
4. 마치며
웹사이트에서 파일 업로드를 관리하는 것은 보안과 사용성 측면에서 매우 중요합니다.
위의 스니펫을 활용하면 사용자의 요구에 맞게 업로드 가능한 파일 확장자를 손쉽게 관리할 수 있습니다.
MIME TYPE 소스코드 다운받기
Snippets 소스코드
// 이 코드는 수정 중 에러가 발생할 경우 소스 복구 비용 10만원이 추가되므로 절대 수정하지 마시기 바랍니다!!
function custom_allowed_mimes( $existing_mimes ) {
// 여기에 허용할 확장자를 추가합니다.
// 이 코드는 수정 중 에러가 발생할 경우 소스 복구 비용 10만원이 추가되므로 절대 수정하지 마시기 바랍니다!!
$existing_mimes['json'] = 'application/json';
$existing_mimes['js'] = 'application/javascript';
$existing_mimes['pdf'] = 'application/pdf';
$existing_mimes['hwp'] = 'application/x-hwp';
$existing_mimes['doc'] = 'application/msword';
$existing_mimes['docx'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
$existing_mimes['xls'] = 'application/vnd.ms-excel';
$existing_mimes['xlsx'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
$existing_mimes['ppt'] = 'application/vnd.ms-powerpoint';
$existing_mimes['pptx'] = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
// 필요한 확장자를 계속 추가할 수 있습니다.
// 이 코드는 수정 중 에러가 발생할 경우 소스 복구 비용 10만원이 추가되므로 절대 수정하지 마시기 바랍니다!!
return $existing_mimes;
}
function add_allow_upload_extension_exception( $types, $file, $filename, $mimes ) {
// ========== 파일 확장자 활성화/비활성화 변수 ==========
$enable_documents = true; // 문서 확장자 활성화 (예: json, js, pdf 등)
$enable_images = true; // 이미지 확장자 활성화 (예: jpg, jpeg, gif 등)
$enable_audio = true; // 오디오 확장자 활성화 (예: mp3, wav 등)
$enable_video = true; // 비디오 확장자 활성화 (예: mp4, avi 등)
$enable_archives = true; // 압축 파일 확장자 활성화 (예: zip, rar 등)
$enable_fonts = true; // 폰트 확장자 활성화 (예: ttf, woff 등)
$enable_executable = false; // 실행 파일 확장자 활성화 (보안상 기본값은 false로 설정)
// ================================================
$file_categories = array(
'documents' => array(
'active' => $enable_documents,
'extensions' => array('json', 'js', 'pdf', 'hwp', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx')
),
'images' => array(
'active' => $enable_images,
'extensions' => array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'tif', 'tiff', 'ico')
),
'audio' => array(
'active' => $enable_audio,
'extensions' => array('mp3', 'wav', 'ogg', 'flac', 'aac')
),
'video' => array(
'active' => $enable_video,
'extensions' => array('mp4', 'avi', 'mov', 'flv', 'wmv')
),
'archives' => array(
'active' => $enable_archives,
'extensions' => array('zip', 'gz', 'tar', 'rar', '7z')
),
'fonts' => array(
'active' => $enable_fonts,
'extensions' => array('ttf', 'woff', 'woff2', 'otf', 'eot')
),
'executable' => array(
'active' => $enable_executable,
'extensions' => array('exe')
)
);
$all_extensions = [];
foreach ($file_categories as $category) {
if ($category['active']) {
$all_extensions = array_merge($all_extensions, $category['extensions']);
}
}
$json_path = '/var/www/_______snippets/disallowed_extensions.json';
$disallowed_extensions = [];
if (file_exists($json_path)) {
$json_data = json_decode(file_get_contents($json_path), true);
if (is_array($json_data) && isset($json_data['disallowed'])) {
$disallowed_extensions = $json_data['disallowed'];
}
}
else
{
return $types;
}
$wp_filetype = wp_check_filetype( $filename, $mimes );
$ext = $wp_filetype['ext'];
$type = $wp_filetype['type'];
if (in_array($ext, $disallowed_extensions)) {
return $types;
}
if (in_array($ext, $all_extensions) && !in_array($ext, $disallowed_extensions)) {
$types['ext'] = $ext;
$types['type'] = $type;
}
return $types;
}
add_filter('upload_mimes', 'custom_allowed_mimes');
add_filter('wp_check_filetype_and_ext', 'add_allow_upload_extension_exception', 1, 4);
Snippets 소스코드 json 파일 다운받기
json 파일을 다운 받아서 Snippets 플러그인에서 Import 하면 됩니다.
Import -> 파일 선택 -> 다운받은 json 파일 선택 -> 열기버튼
비활성화 상태인 스니핏을 활성화 시킵니다.
MIME TYPE 표 설명
No | MIME | TYPE | 확장자 | 설명 |
---|---|---|---|---|
1 | text | plain | .txt | 일반 텍스트 |
2 | text | html | .html | HTML 문서 |
3 | text | css | .css | CSS 스타일시트 |
4 | text | csv | .csv | 컴마로 구분된 값 (CSV) |
5 | image | jpeg | .jpeg, .jpg | JPEG 이미지 |
6 | image | png | .png | PNG 이미지 |
7 | image | gif | .gif | GIF 이미지 |
8 | image | bmp | .bmp | BMP 이미지 |
9 | audio | mp3 | .mp3 | MP3 오디오 |
10 | audio | wav | .wav | WAV 오디오 |
11 | audio | ogg | .ogg | Ogg Vorbis 오디오 |
12 | video | mp4 | .mp4 | MP4 비디오 |
13 | video | webm | .webm | WebM 비디오 |
14 | application | json | .json | JSON 포맷 |
15 | application | xml | .xml | XML 문서 |
16 | application | PDF 문서 | ||
17 | application | msword | .doc | Microsoft Word |
18 | application | vnd.ms-excel | .xls | Microsoft Excel |
19 | application | vnd.openxmlformats- | .docx | Microsoft Word (OOXML) |
officedocument.wordprocessingml.document | ||||
20 | application | vnd.openxmlformats- | .xlsx | Microsoft Excel (OOXML) |
officedocument.spreadsheetml.sheet | ||||
21 | application | zip | .zip | ZIP 아카이브 |
22 | application | x-rar-compressed | .rar | RAR 아카이브 |
23 | text | javascript | .js | JavaScript 코드 |
24 | application | x-tar | .tar | Tarball 아카이브 |
25 | application | java-archive | .jar | Java 아카이브 (JAR) |
26 | image | svg+xml | .svg | SVG 이미지 |
27 | application | x-shockwave-flash | .swf | Adobe Flash |
28 | image | x-icon | .ico | ICO 아이콘 파일 |
29 | text | markdown | .md | Markdown 문서 |
30 | application | x-font-woff | .woff | Web Open Font Format |
No | MIME | TYPE | 확장자 | 설명 |
---|---|---|---|---|
31 | application | vnd.ms-powerpoint | .ppt | Microsoft PowerPoint |
32 | application | vnd.openxmlformats- | .pptx | Microsoft PowerPoint (OOXML) |
officedocument.presentationml.presentation | ||||
33 | video | ogg | .ogv | Ogg Video |
34 | audio | mpeg | .mpeg | MPEG 오디오 |
35 | video | x-msvideo | .avi | AVI 비디오 |
36 | application | x-font-ttf | .ttf | TrueType Font |
37 | application | x-font-woff2 | .woff2 | Web Open Font Format 2 |
38 | image | tiff | .tiff, .tif | TIFF 이미지 |
39 | video | quicktime | .mov | QuickTime 비디오 |
40 | audio | x-ms-wma | .wma | Windows Media Audio |
41 | video | x-ms-wmv | .wmv | Windows Media Video |
42 | application | x-7z-compressed | .7z | 7z 아카이브 |
43 | application | x-dvi | .dvi | Digital Video Interactive |
44 | application | x-latex | .latex | LaTeX 소스 파일 |
45 | application | x-font-opentype | .otf | OpenType Font |
46 | application | rss+xml | .rss | RSS 피드 |
47 | application | x-perl | .pl | Perl 스크립트 |
48 | application | x-python-code | .py | Python 코드 |
49 | application | rtfd | .rtfd | Rich Text Format Directory |
50 | application | x-ruby | .rb | Ruby 스크립트 |
51 | application | x-bittorrent | .torrent | BitTorrent 파일 |
52 | application | x-font-otf | .otf | OTF 글꼴 파일 |
53 | application | x-sql | .sql | SQL 파일 |
54 | application | x-apple-diskimage | .dmg | Apple Disk Image |
55 | application | vnd.apple.installer+xml | .mpkg | Apple Installer Package |
56 | application | epub+zip | .epub | EPUB eBook |
57 | application | x-deb | .deb | Debian 패키지 |
58 | application | x-shellscript | .sh | Shell 스크립트 |
59 | text | x-c | .c | C 소스 코드 |
60 | text | x-c++ | .cpp | C++ 소스 코드 |
No | MIME | TYPE | 확장자 | 설명 |
---|---|---|---|---|
61 | text | x-java-source | .java | Java 소스 코드 |
62 | application | x-object | .o | 컴파일 된 오브젝트 파일 |
63 | application | x-executable | .bin | 실행 가능한 바이너리 파일 |
64 | application | vnd.android.package-archive | .apk | Android 앱 패키지 |
65 | application | x-redhat-package-manager | .rpm | Red Hat 패키지 매니저 |
66 | application | x-httpd-php | .php | PHP 스크립트 |
67 | text | x-python-script | .py | Python 스크립트 |
68 | text | x-shellscript | .sh | Bash shell 스크립트 |
69 | application | x-lua-bytecode | .luac | Lua 바이트코드 |
70 | text | x-lua | .lua | Lua 스크립트 |
71 | text | x-scala | .scala | Scala 소스 코드 |
72 | application | x-tex | .tex | TeX 문서 |
73 | text | x-vhdl | .vhdl | VHDL 소스 코드 |
74 | image | x-psd | .psd | Photoshop 문서 |
75 | application | x-httpd-eruby | .rhtml | eRuby 템플릿 |
76 | text | x-sass | .sass | Sass 스타일시트 |
77 | text | x-scss | .scss | SCSS 스타일시트 |
78 | application | x-httpd-php-source | .phps | PHP 소스 코드 |
79 | application | x-httpd-php3 | .php3 | PHP 3 스크립트 |
80 | application | x-httpd-php4 | .php4 | PHP 4 스크립트 |
81 | application | x-httpd-php5 | .php5 | PHP 5 스크립트 |
82 | application | x-freemind | .mm | FreeMind 마인드 맵 |
83 | application | x-x509-ca-cert | .crt, .cert | X.509 인증서 |
84 | application | x-pkcs12 | .p12 | PKCS#12 인증서 |
85 | application | x-pkcs7-certificates | .p7b | PKCS#7 인증서 |
86 | application | x-pkcs7-certreqresp | .p7r | PKCS#7 응답 |
87 | text | x-go | .go | Go 소스 코드 |
88 | text | x-rust | .rs | Rust 소스 코드 |
89 | text | x-swift | .swift | Swift 소스 코드 |
90 | application | x-xpinstall | .xpi | Firefox 확장 패키지 |
이 포스트가 여러분에게 도움이 되었기를 바랍니다.
만약 추가적인 질문이나 도움이 필요하시다면 언제든지 문의해주세요!
태그: #MIME #파일업로드 #웹개발 #코드스니펫 #PHP
노트: 본 블로그의 모든 코드 사용은 사용자의 책임하에 이루어집니다.