web-dev-qa-db-ja.com

mime-typeを判別するためのアップロードされたファイルのFinfo_file

アップロードされたファイルのmimeタイプを判別しようとしていますが、fileinfo()を使用したいのですが、これはiveが試していることであり、機能していません。

$uploadedfile = $_FILES['soup']['tmp_name'];
if(isset($uploadedfile))
{
    $uploadedname = $_FILES['soup']['name'];
    $file=$uploadedsong;
    $file.=$uploadedname;
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $file);

残念ながら、finfo_fileが実行されていないようです。これに対して、次の$fileが正しく設定されていないと想定していますが、$_FILEを使用して新しくアップロードされたファイルでこれを適切に行う方法はありますか。この?または私はこの問題に完全に不適切な方法で行っていますか?別のファイルに直接プリセットされているファイルを使用すると、$file="folder/file.doc"の設定が正しく機能します。

17
JimmyBanks

ファイル名ではなく、finfo_file関数へのパスを渡す必要があります。

<?php 
if (isset($_FILES['soup']['tmp_name'])) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $_FILES['soup']['tmp_name']);
    if ($mime == 'application/msword') {
        //Its a doc format do something
    }
    finfo_close($finfo);
}
?>
30

以下のように、phpプラットフォームのfinfo()buffer()関数とfile_get_contents()を使用します。

_$finfo = new finfo(FILEINFO_MIME);
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type
_

_php 5.3_以上で、finfo()拡張機能がインストールされていることを確認する必要があります。 Linuxの場合_extension=fileinfo_。およびWindowsの場合:_php_fileinfo.dll_

受け入れられたmimeタイプの配列を作成し、それがその配列に存在するかどうかを確認できます

_$acceptedMime = [];
if(in_array($mimetype, $acceptedMime, true) === true){
  #mime type is valid. Proceed!
}
_

Mimeタイプをチェックする必要を回避する別の方法は、ファイルのアップロードをドキュメントのルートフォルダーから完全に保存することです。

1