2011-03-03 1 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今日のファイルフォーマットのコンセプトに似たものはないとは思いません。 – phihag

+0

ああ、興味深いですが、私はfileinfoなしでmime-typeをチェックする方法を知りました(私のサーバは持っていません)。私は別の言葉で言いました。 –

1

がアップロードしたファイルを開き、最初の確認することができます。あなたがたFileInfo持っていない場合は

は、次のドロップイン置換(PDFのみ)を使用しますそれのバイト。 あなたはpdfファイルだけを望むので、かなり簡単です。テキストエディタでPDFファイルを開くと、あなたはおそらく

%PDF-1.5 
ので

アップロードされたファイルは、%のPDFが含まれている場合、MIMEタイプとして.pdf拡張子とアプリケーション/ PDFを持っているようなものを見ることができ、あなたが対処するための良い機会を持っています良いタイプで。

しかし、あなたはそれがより良い解決策

+0

ありがとう。私はfileinfoを起動して実行しようとしています。 –