2011-03-03 3 views
1

나는 PDF 파일 만 업로드 할 수있는 PHP 업로드 스크립트를 작업 중입니다. 업로드하기 전에 application/pdf MIME 유형을 확인합니다. 업로드 스크립트를 테스트하고있는 클라이언트의 PDF가 있는데 업로드 오류 검사에 실패하여 파일이 MIME 유형이 application/download이라고 알려줍니다. GMail을 통해 클라이언트에서 PDF를 다운로드했습니다. 필자는 Photoshop에서 만든 PDF로이 문제를 테스트했으며 스크립트는 application/download 유형이라는 것을 알려줍니다. 나는 (grunk의 조언에 따라) 내 서버에 설치된에서는 FileInfo 확장을 얻기 위해 노력하고MIME 애플리케이션/다운로드

$mimeType = 'application/pdf'; 

if($_FILES[$filesName]['type'] != $mimeType) 
{ 
    throw new UploadErrorException('File is not of correct type.'); 
} 

,하지만 지금 내가없이 작동하는 뭔가를 찾고 있어요 : 여기

내가 확인하고 방법이다.

아이디어가 있으십니까? 감사!

+0

MIME 형식을 확인하는 신뢰할 수있는 유일한 방법에서는 FileInfo의 FILEINFO 사용할 수 있는지 내가 이미 말한대로 http://www.php.net/manual/en/book.fileinfo.php 이 정보를 어떻게 확인합니까? 약간의 코드 추출이 도움이 될 수 있습니다. – grunk

+0

@grunk - 방금 코드 스 니펫을 추가했습니다. 현재 내 서버에 fileinfo가 설치되어 있지 않습니다. 나는 내가 지금 그것을 설치할 수 있는지 알게 될 것이다. 고맙습니다. –

+0

어떻게이 문제를 테스트하고 싶습니다. 응용 프로그램/다운로드 MIME 형식으로 pdf 파일을 준비 할 수 있습니까? – kicaj

답변

3

업로드 스크립트는 클라이언트가 PDF이라고하는 한 모든 파일 형식이 이되도록 허용합니다. 일부 브라우저에서는 MIME 형식을 결정할 수 없습니다. MIME 형식을 결정하는 것이 어려운 문제이므로 일반 형식을 보내면됩니다. "실제"MIME 유형을 확인하는 올바른 방법은 fileinfo입니다. 당신이 어떤 이유로에서는 FileInfo 사용할 수없는 경우

if (!class_exists('finfo')) { 
    class finfo { 
    function buffer($string) { 
     switch (substr($string, 0, 4)) { 
     case '%PDF': return 'application/pdf'; 
     default: return 'application/binary'; 
     } 
    } 
    function file($file_name, $options=0, $context=NULL) { 
     $f = fopen($file_name, 'rb', false, $context); 
     if ($f === false) return false; 
     $magic = fread($f, 4); 
     fclose($f); 
     return $this->buffer($magic); 
    } 
    } 
} 
$finfo = new finfo(); 
echo $finfo->file('test.pdf'); 
+0

감사합니다. phihag. 나는 fileinfo 전에 사람들이 사용했던 것을 궁금해하니? –

+1

@letseatfood 필자는 파일 형식에 대한 오늘날의 개념과 비슷한 것이 없다고 생각합니다. 'file'은 1973 년으로 거슬러 올라간다. – phihag

+0

오, 흥미 롭다.하지만 나는 fileinfo없이 mime-type을 검사하는 방법을 궁금해했다. 내 의견을 다르게 말 했어야 했어. –

1

당신이 업로드 된 파일을 열고 처음으로 확인하실 수 있습니다 : 당신이에서는 FileInfo가없는 경우

다음 드롭 인 교체 (PDF 전용) 사용 그것의 바이트. PDF 파일 만 원하는만큼 쉽게 만들 수 있습니다. 텍스트 편집기를 사용하여 PDF 파일을 열고 당신은 아마

%PDF-1.5 
그래서

업로드 된 파일이 %의 PDF가 포함 된 경우, MIME 타입으로 된 .pdf 확장 및 응용 프로그램/PDF이 같은 것을 볼 수 있습니다, 당신은 처리 할 좋은 기회가 좋은 유형.

그러나 당신이 더 나은 솔루션

+0

고마워. 필자는 fileinfo를 설치하여 실행하려고합니다. –