2010-07-28 2 views
3

파일 업로드가 필요한 프로젝트 작업 중입니다. 보안이 유지되고 PDF 파일 만 업로드되고 있는지 확인하고 싶습니다. 이미 파일 확장명을 확인하고 있지만 파일이 실제로 pdf 파일인지 확인하려고합니다.PHP에서 업로드시 MIME 형식의 pdf 파일 확인

PHP에서 마임 유형을 확인하는 가장 좋은 방법은 무엇입니까? PHP 5.2.5를 사용하고 있는데 fileinfo 나 mime_content_type()이 작동하지 않는 것처럼 보입니다. 에서는 FileInfo에 대한

내가이가 계속 :

Warning: finfo_open() [function.finfo-open]: Failed to load magic database 
at '(null)'. in [snipped filename] on line 35 
+0

왜/mime_content_type 작업을 FILEINFO하지 않는 올바른 마법 파일을 가리 키거나 finfo 생성자에 두 번째 매개 변수로 마법의 파일을 통과 MAGIC의 값을 설정? –

답변

5

마임 유형의 파일 유형을 확인하기위한 신뢰할 수 없습니다. 클라이언트의 브라우저가 잘못보고 할 수 있습니다.

Magic Number을 확인하십시오. PDF 파일은 "% PDF"(25 50 44 46)로 시작합니다.

+0

$ _FILE 변수에서 MIME 유형을 읽으면 브라우저에서 가져옵니다. 이게 내가 한 일이야. 내가하고 싶은 것은 파일의 헤더를 읽어서 실제로 PDF 파일인지 확인하는 것입니다. – Samuel

+0

예. 그것이 여기서 제안되는 것입니다. – recursive

+0

@ recursive 기록을 위해이 답변의 두 번째 줄은 내가 코멘트를 올렸을 때 거기에 없었습니다. – Samuel

-2

MIME 유형을 얻는 쉬운 방법은 $ _FILES에서 직접 가져 오는 것입니다. MIME 형식에 'pdf'라는 단어가 포함되어 있으면 유효한 PDF로 간주 할 수 있습니다.

$contentType = $_FILES['myFile']['type']; 
if(isValidPDF($contentType)) { 
    die('It is a PDF'); 
} else { 
    die('It is not a PDF'); 
} 

function isValidPDF($mime) { 
    return strpos($mime, 'pdf') !== false; 
} 
+0

이것은 안전하지 않은 방법입니다. $ _FILES는 브라우저 자체가 아니라 브라우저에서 MIME 유형을 가져옵니다. – buggedcom

1

실제로 MIME 유형은 사용자가 올바른 파일을 업로드했는지 확인하는 가장 좋은 방법은 아닙니다.

그러나 파일이 게시 될 때, 당신은 항상 MIME 타입이 방법으로 확인할 수 있습니다

$Type = $_FILES['someFile']['type']; 

어쩌면 당신이 FPDF (http://www.fpdf.org/)

같은 유효한 PDF의 뭔가를 결정하기 위해 PHP 클래스를 사용할 수를

어쨌든 행운을 빌어 요.

1

아마도 이것은 MAGIC 환경 변수가 설정되지 않았으며 사용자의 마법 파일이/usr/share/misc/magic에 없다는 것을 의미합니다. 어느

$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic"); 

또는

$finfo = finfo_open(FILEINFO_MIME, "/usr/share/misc/magic"); 
관련 문제