2017-01-30 8 views
0

私はCVSファイルのアップロードを受け入れるべきフォームを持っています。 は、だから私は、次でそれを保護:PHPでMIMEタイプの検出に問題があります

if (!in_array($mimeType, array("text/csv"))) throw new TMSException("Error"); 

すべての私のテストは、私のdevの環境にうまくいったが、今私は、Windowsクライアント上で、同じ正確なファイルのために、私は別のMIMEタイプを取得することが分かりました。

これは私のUbuntu PCに接続するときに私が得るものです:

/var/www/ct/preinvoice.php:203: 
array (size=1) 
    'tariffLines' => 
    array (size=5) 
     'name' => string 'C&T - Labatut.csv' (length=17) 
     'type' => string 'text/csv' (length=8) 
     'tmp_name' => string '/tmp/php2vIcaE' (length=14) 
     'error' => int 0 
     'size' => int 3812 

そして、これはWindowsマシンから同じファイルをアップロードしようとすると、私が得るものです:

/var/www/ct/preinvoice.php:203: 
array (size=1) 
    'tariffLines' => 
    array (size=5) 
     'name' => string 'C&T - Labatut.csv' (length=17) 
     'type' => string 'application/vnd.ms-excel' (length=24) 
     'tmp_name' => string '/tmp/phpPaMvN3' (length=14) 
     'error' => int 0 
     'size' => int 3812 

どれideiaをPHPが同じファイルに対して異なるMIMEタイプを検出するのはなぜですか?そして私はこれをどのように解決することができますか?

+0

MIMEタイプは、いくつかのシステムでは、/は異なり、それらを保存読む「テキスト/ CSV」ではないかもしれません。 (Internet Explorerは.csvファイルをapplication/vnd.ms-excelとして扱います) – Svekke

+0

こんにちは! $ _FILES ["file"] ["type"]は 'application/vnd.ms-excel'です。同じファイルでアップロードをテストしています。 私は別のアプローチを使用しなければならないと思います。 –

+0

クライアントはMIMEタイプを設定します。あなたはそれを支配しません。 – zeroflagL

答えて

0

あなたは、次の手順を実行して、この問題をキャッチすることができます:

$mimetypes = array('application/vnd.ms-excel','text/csv'); 
if(in_array($_FILES['file']['type'],$mimetypes)){ 
    // do something 
} else { 
    die("MIME type is not allowed"); 
} 
+0

あなたは正しいですが、私はExcelファイルを受け入れたくありません。私は使用しました \t \t \t \t '$ finfo = finfo_open(FILEINFO_MIME_TYPE); \t \t \t \t $ mimeType = finfo_file($ finfo、$ _FILES ["tariffLines"] ["tmp_name"]); \t \t \t \t finfo_close($ finfo); ' 強制的にシステムがMIMEタイプをチェックするようにします。この方法では、毎回「テキスト/プレーン」のMIMEタイプを取得します –

関連する問題