방법 1: pathinfo
코드 예:
/**
* 파일 접미사를 가져옵니다. (파일 이름이 11.11이고, 11이 접미사가 아닐 경우 11은 접미사로 기본 설정됩니다.)
* $file string파일 경로나 파일 이름
*/
function get_extension($file){
return pathinfo($file, PATHINFO_EXTENSION);
}
설명: pathinfo의 구체적인 사용법은 php 매뉴얼을 볼 수 있습니다.그러나 이 방법은 파일 접미사만으로 파일 형식을 판단할 수 있고, HTML 접미사 파일이 .php 접미사처럼 수정되면 php 형식의 파일이 읽힌다.
방법2:$_FILES
php가 파일을 업로드하면 $_FILES['uploadfile']['type']으로 파일 형식을 가져올 수 있지만 pathinfo와 같은 문제가 있을 수 있으며 파일 접미사만으로 파일 클래스를 판단할 수 있습니다.유형.
방법 3: php Fileinfo 파일 가져오기MIME 형식 (finfo_open)
코드 예:
<?php
$finfo = finfo_open(FILEINFO_MIME); // mime 종류 되돌리기
$filename = '.\Uploads\2.zip';
var_dump(finfo_file($finfo, $filename));
finfo_close($finfo);
die;
결과를 반환합니다.
설명: 파일이 있으면 파일 형식을 반환하고 그렇지 않으면 false를 반환합니다.이 방법은 php5.3.0+ 버전이 필요하다.반환된 결과에 따라 어떤 종류의 파일인지 판단할 수 있다.이 방법은 원본 파일의 형식을 이미 읽을 수 있도록 원문서가 수정되어도 된다.
방법 4: 판단으로 파일의 첫 6바이트를 읽습니다
<?php
// 공식 예
function minimime($fname) {
$fh=fopen($fname,'rb');
if ($fh) {
$bytes6=fread($fh,6);
fclose($fh);
if ($bytes6===false) return false;
if (substr($bytes6,0,3)=="\xff\xd8\xff") return 'image/jpeg';
if ($bytes6=="\x89PNG\x0d\x0a") return 'image/png';
if ($bytes6=="GIF87a" || $bytes6=="GIF89a") return 'image/gif';
return 'application/octet-stream';
}
return false;
}
// 파일 첫 번째 4바이트를 16진수로 변환
function fileType($filename) {
// 읽기 파일의 상위 4바이트, 하드코드로 판단
$file = fopen ( $filename, "rb" );
$strFile = fread ( $file, 4 ); //읽기 전용 파일 헤더 4바이트
fclose ( $file );
$strInfo = @unpack ( "C4chars", $strFile );
//dechex(),십진법을 십육진법으로 바꾸다。
$code = dechex ( $strInfo ['chars1'] ) .
dechex ( $strInfo ['chars2'] ) .
dechex ( $strInfo ['chars3'] ) .
dechex ( $strInfo ['chars4'] );
$type = '';
switch ($code) //하드코드 값 체크리스트
{
case "504b34" :
$type = 'application/zip; charset=binary';
break;
case "89504e47" :
$type = 'image/png; charset=binary';
break;
default :
$type = false;
break;
}
return $type;
}
설명: 이 방법은 결함이 있으며, 파일 형식이 다를 수 있으며, 파일의 첫 번째 4바이트는 동일할 수 있으며, 일부 파일 형식은 4바이트 미만의 파일 형식의 문자열을 나타냅니다.방법 3과 방법 4를 조합하여 사용하는 것을 생각할 수 있다.
파일 형식 하드코드 값 대조표: http://www.garykessler.net/library/file_sigs.html
(대조표의 영문 대문자는 소문자로 바꾸고, 첫 번째 숫자가 0일 때는 생략한다. eg:504B0304에서 읽은 것은 504b34)
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP+MySQL 뉴스 관리 시스템 구현 (0) | 2022.07.14 |
---|---|
php는 데몬을 구현하는 두 가지 방식이다 (0) | 2022.07.13 |
javamd5와 phpmd5의 불일치 문제 해결 (0) | 2022.07.13 |
도커 원클릭 Nginx+PHP 환경 구축 (자동 배치 명령 포함) (0) | 2022.07.13 |
PHP가 HTTP 요청을 보내는 6가지 방법 (0) | 2022.07.13 |