MIME TYPE

PHP MIME TYPE 워드프레스 업로드 에러 문제 10만원 복구비로 해결

php mime type 관련하여 워드프레스 플러그인 Snippets 활용법입니다.

사용자 맞춤형 파일 업로드 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 표 설명

NoMIMETYPE확장자설명
1textplain.txt일반 텍스트
2texthtml.htmlHTML 문서
3textcss.cssCSS 스타일시트
4textcsv.csv컴마로 구분된 값 (CSV)
5imagejpeg.jpeg, .jpgJPEG 이미지
6imagepng.pngPNG 이미지
7imagegif.gifGIF 이미지
8imagebmp.bmpBMP 이미지
9audiomp3.mp3MP3 오디오
10audiowav.wavWAV 오디오
11audioogg.oggOgg Vorbis 오디오
12videomp4.mp4MP4 비디오
13videowebm.webmWebM 비디오
14applicationjson.jsonJSON 포맷
15applicationxml.xmlXML 문서
16applicationpdf.pdfPDF 문서
17applicationmsword.docMicrosoft Word
18applicationvnd.ms-excel.xlsMicrosoft Excel
19applicationvnd.openxmlformats-.docxMicrosoft Word (OOXML)
officedocument.wordprocessingml.document
20applicationvnd.openxmlformats-.xlsxMicrosoft Excel (OOXML)
officedocument.spreadsheetml.sheet
21applicationzip.zipZIP 아카이브
22applicationx-rar-compressed.rarRAR 아카이브
23textjavascript.jsJavaScript 코드
24applicationx-tar.tarTarball 아카이브
25applicationjava-archive.jarJava 아카이브 (JAR)
26imagesvg+xml.svgSVG 이미지
27applicationx-shockwave-flash.swfAdobe Flash
28imagex-icon.icoICO 아이콘 파일
29textmarkdown.mdMarkdown 문서
30applicationx-font-woff.woffWeb Open Font Format
MIME TYPE
NoMIMETYPE확장자설명
31applicationvnd.ms-powerpoint.pptMicrosoft PowerPoint
32applicationvnd.openxmlformats-.pptxMicrosoft PowerPoint (OOXML)
officedocument.presentationml.presentation
33videoogg.ogvOgg Video
34audiompeg.mpegMPEG 오디오
35videox-msvideo.aviAVI 비디오
36applicationx-font-ttf.ttfTrueType Font
37applicationx-font-woff2.woff2Web Open Font Format 2
38imagetiff.tiff, .tifTIFF 이미지
39videoquicktime.movQuickTime 비디오
40audiox-ms-wma.wmaWindows Media Audio
41videox-ms-wmv.wmvWindows Media Video
42applicationx-7z-compressed.7z7z 아카이브
43applicationx-dvi.dviDigital Video Interactive
44applicationx-latex.latexLaTeX 소스 파일
45applicationx-font-opentype.otfOpenType Font
46applicationrss+xml.rssRSS 피드
47applicationx-perl.plPerl 스크립트
48applicationx-python-code.pyPython 코드
49applicationrtfd.rtfdRich Text Format Directory
50applicationx-ruby.rbRuby 스크립트
51applicationx-bittorrent.torrentBitTorrent 파일
52applicationx-font-otf.otfOTF 글꼴 파일
53applicationx-sql.sqlSQL 파일
54applicationx-apple-diskimage.dmgApple Disk Image
55applicationvnd.apple.installer+xml.mpkgApple Installer Package
56applicationepub+zip.epubEPUB eBook
57applicationx-deb.debDebian 패키지
58applicationx-shellscript.shShell 스크립트
59textx-c.cC 소스 코드
60textx-c++.cppC++ 소스 코드
MIME TYPE
NoMIMETYPE확장자설명
61textx-java-source.javaJava 소스 코드
62applicationx-object.o컴파일 된 오브젝트 파일
63applicationx-executable.bin실행 가능한 바이너리 파일
64applicationvnd.android.package-archive.apkAndroid 앱 패키지
65applicationx-redhat-package-manager.rpmRed Hat 패키지 매니저
66applicationx-httpd-php.phpPHP 스크립트
67textx-python-script.pyPython 스크립트
68textx-shellscript.shBash shell 스크립트
69applicationx-lua-bytecode.luacLua 바이트코드
70textx-lua.luaLua 스크립트
71textx-scala.scalaScala 소스 코드
72applicationx-tex.texTeX 문서
73textx-vhdl.vhdlVHDL 소스 코드
74imagex-psd.psdPhotoshop 문서
75applicationx-httpd-eruby.rhtmleRuby 템플릿
76textx-sass.sassSass 스타일시트
77textx-scss.scssSCSS 스타일시트
78applicationx-httpd-php-source.phpsPHP 소스 코드
79applicationx-httpd-php3.php3PHP 3 스크립트
80applicationx-httpd-php4.php4PHP 4 스크립트
81applicationx-httpd-php5.php5PHP 5 스크립트
82applicationx-freemind.mmFreeMind 마인드 맵
83applicationx-x509-ca-cert.crt, .certX.509 인증서
84applicationx-pkcs12.p12PKCS#12 인증서
85applicationx-pkcs7-certificates.p7bPKCS#7 인증서
86applicationx-pkcs7-certreqresp.p7rPKCS#7 응답
87textx-go.goGo 소스 코드
88textx-rust.rsRust 소스 코드
89textx-swift.swiftSwift 소스 코드
90applicationx-xpinstall.xpiFirefox 확장 패키지
MIME TYPE

이 포스트가 여러분에게 도움이 되었기를 바랍니다.

만약 추가적인 질문이나 도움이 필요하시다면 언제든지 문의해주세요!


태그: #MIME #파일업로드 #웹개발 #코드스니펫 #PHP


노트: 본 블로그의 모든 코드 사용은 사용자의 책임하에 이루어집니다.