.rar, .zip 파일 MIME 유형
간단한 php 업로드 스크립트를 개발하고 있는데 사용자는 ZIP 파일과 RAR 파일만 업로드 할 수 있습니다.
어떤 MIME 유형을 사용하여 확인해야 합니까?$_FILES[x][type]
? (완전한 리스트를 주세요)
프리덤피스, 키야라쉬, 샘블로에버그스의 답변:
.rar application/x-rar-compressed, application/octet-stream
.zip application/zip, application/octet-stream, application/x-zip-compressed, multipart/x-zip
파일명도 확인하겠습니다.파일이 RAR 파일인지 ZIP 파일인지 확인하는 방법은 다음과 같습니다.빠른 명령줄 애플리케이션을 만들어 테스트했습니다.
<?php
if (isRarOrZip($argv[1])) {
echo 'It is probably a RAR or ZIP file.';
} else {
echo 'It is probably not a RAR or ZIP file.';
}
function isRarOrZip($file) {
// get the first 7 bytes
$bytes = file_get_contents($file, FALSE, NULL, 0, 7);
$ext = strtolower(substr($file, - 4));
// RAR magic number: Rar!\x1A\x07\x00
// http://en.wikipedia.org/wiki/RAR
if ($ext == '.rar' and bin2hex($bytes) == '526172211a0700') {
return TRUE;
}
// ZIP magic number: none, though PK\003\004, PK\005\006 (empty archive),
// or PK\007\008 (spanned archive) are common.
// http://en.wikipedia.org/wiki/ZIP_(file_format)
if ($ext == '.zip' and substr($bytes, 0, 2) == 'PK') {
return TRUE;
}
return FALSE;
}
아직 100% 확신할 수는 없지만, 아마 충분할 것입니다.
$ rar.exe l somefile.zip
somefile.zip is not RAR archive
그러나 WinRAR도 SFX 아카이브로서 RAR 이외의 파일을 검출합니다.
$ rar.exe l somefile.srr
SFX Volume somefile.srr
업로드용:
MIME 유형의 공식 목록은 IANA(Internet Assigned Numbers Authority)에서 확인할 수 있습니다.Content-Type
을 위해 머리글을 쓰다.zip
이application/zip
.
미디어 유형:rar
파일은 IANA에 공식적으로 등록되지 않지만 일반적으로 사용되는 비공식 mime-type 값은 다음과 같습니다.application/x-rar-compressed
.
application/octet-stream
"파일 스트림을 보냅니다만, 이 스트림의 내용은 지정되어 있지 않습니다."와 같은 의미입니다(따라서 이 스트림은zip
또는rar
파일도 작성됩니다).서버는 스트림의 실제 내용을 검출하도록 되어 있습니다.
주의: 업로드 시 로 설정된MIME 타입에 의존하는 것은 안전하지 않습니다.Content-Type
header를 클릭합니다.헤더는 클라이언트로 설정되며 임의의 랜덤 값으로 설정할 수 있습니다.대신 php file info 함수를 사용하여 서버에서 파일 mime-type을 검출할 수 있습니다.
다운로드용:
를 다운로드하는 경우zip
파일 이외의 것은 1개만 설정할 필요가 있습니다.Accept
헤더 값추가 값 세트는 서버가 를 충족할 수 없는 경우에 대비하여 폴백으로 사용됩니다.Accept
헤더가 mime-type을 요구했습니다.
WC3 규격에 따라 다음을 수행한다.
application/zip, application/octet-stream
「MIME 타입을 선호합니다만, 이것을 전달할 수 없는 경우는, (파일 스트림)도 괜찮습니다」라고 하는 메세지가 표시됩니다.
단 1개:
application/zip
보증합니다.zip
파일(또는 a)406 - Not Acceptable
서버가 사용자의 요청을 충족할 수 없는 경우 응답)을 클릭합니다.
믿어서는 안 된다$_FILES['upfile']['mime']
MIME 타입을 직접 체크합니다.이를 위해 PHP 5.3.0에서 기본적으로 활성화된 확장을 사용할 수 있습니다.
$fileInfo = new finfo(FILEINFO_MIME_TYPE);
$fileMime = $fileInfo->file($_FILES['upfile']['tmp_name']);
$validMimes = array(
'zip' => 'application/zip',
'rar' => 'application/x-rar',
);
$fileExt = array_search($fileMime, $validMimes, true);
if($fileExt != 'zip' && $fileExt != 'rar')
throw new RuntimeException('Invalid file format.');
주의: 에서 내선번호를 유효하게 하는 것을 잊지 말아 주세요.php.ini
서버를 재기동합니다.
extension=php_fileinfo.dll
및 가 많이 됩니다.application/zip
★★★★★★★★★★★★★★★★★」application/x-rar-compressed
각각 다음과 같다.
전자의 매칭은 올바르지만 후자의 IANA에 대해서는 https://www.iana.org/assignments/media-types/application/vnd.rar에서 rar에 대해 보고합니다.application/x-rar-compressed
되지 않는 입니다.대신 에일리어스 이름입니다.application/vnd.rar
의 올바른 은:2020년 IANA입니다.
zip
application/zip
rar
application/vnd.rar
링크된 질문에는 파일 URL의 MIME 형식을 가져오기 위한 Objective-C 코드가 있습니다. MIME 형식을 가져오기 위해 Objective-C 코드를 기반으로 Swift 확장자를 만들었습니다.
import Foundation
import MobileCoreServices
extension URL {
var mimeType: String? {
guard self.pathExtension.count != 0 else {
return nil
}
let pathExtension = self.pathExtension as CFString
if let preferredIdentifier = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, nil) {
guard let mimeType = UTTypeCopyPreferredTagWithClass(preferredIdentifier.takeRetainedValue(), kUTTagClassMIMEType) else {
return nil
}
return mimeType.takeRetainedValue() as String
}
return nil
}
}
내선번호는 3글자 이상일 수 있으므로 다음에서는 내선번호 길이에 관계없이 내선번호를 테스트합니다.
이것을 시험해 보세요.
$allowedExtensions = array( 'mkv', 'mp3', 'flac' );
$temp = explode(".", $_FILES[$file]["name"]);
$extension = strtolower(end($temp));
if( in_array( $extension, $allowedExtensions ) ) { ///
마지막 '.' 이후의 모든 문자를 확인합니다.
언급URL : https://stackoverflow.com/questions/6977544/rar-zip-files-mime-type
'it-source' 카테고리의 다른 글
Synology NAS의 속편을 통해 Mariadb에 연결 (0) | 2022.10.30 |
---|---|
긴 텍스트 열이 있는 테이블을 JSON 배열로 변환 (0) | 2022.10.30 |
Magento - 특정 속성 값을 가진 제품 검색 (0) | 2022.10.30 |
HTML 버튼을 사용하여 JavaScript 함수 호출 (0) | 2022.10.30 |
어레이에서 변경 가능한 목록을 작성하시겠습니까? (0) | 2022.10.30 |