アップロードされたファイルの MIME タイプを示す次の PHP コードがあります。
<?php
if ($_POST) {
var_dump($_FILES);
$finfo = new finfo(FILEINFO_MIME_TYPE);
var_dump($finfo->file($_FILES['file']['tmp_name']));
} else{
?>
<form method="POST" enctype="multipart/form-data"><input name="file" type="file"><input name="submit" value="send" type="submit"/></form>
<?php
}
このスクリプトで somefile.csv をアップロードした結果は次のようになります。
array (size=1)
'file' =>
array (size=5)
'name' => string 'somefile.csv' (length=12)
'type' => string 'text/csv' (length=8)
'tmp_name' => string '/tmp/phpKiwqtu' (length=14)
'error' => int 0
'size' => int 3561
string 'text/x-fortran' (length=14)
もちろん、MIME タイプは text/csv にする必要があります。しかし、私が使用するフレームワーク (Symfony 1.4) は、fileinfo を使用してメソッドを使用します。
また、もう少しテストしたところ、コマンド (Ubuntu の場合)file --mime-type somefile.csv
が返さsomefile.csv: text/x-fortran
れ、コマンドmimetype somefile.csv
が返されたようsomefile.csv: text/csv
です。somefile.csv は MSOffice で作成されます (これが問題かどうかはわかりません)。どうやらmimetype
素晴らしい MIME データベース ( http://freedesktop.org/wiki/Software/shared-mime-info ) を使用しているようですが、使用しfile
ていません。
- PHP は使用する
file
か、mimetype
または使用しないか? - さらに、ここで何をすべきかわかりません。アップロードしたファイルの形式が間違っていますか? 別の MIME データベースを使用する必要がありますか? PHP にバグがありますか? ここで何が起こっているのですか?
編集:
Fortran プログラムとして検出される理由は、somefile.csv に次の内容しか含まれていないためです。
somecolumn;
C F;
上記の CSV ファイルの内容は正しいと思いますか? フィールドにスペースが含まれている場合、このフィールドを引用符で囲む必要はありませんよね?