18

アップロードされたファイルの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"正しく設定できます。

4

3 に答える 3

33

ファイル名ではなく、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);
}
?>
于 2012-02-27T00:05:31.543 に答える
1

私は以下のように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タイプをチェックする必要をなくす別の方法は、ファイルのアップロードをドキュメントのルートフォルダから完全に保存することです。

于 2017-12-04T10:45:42.830 に答える
-1

これは少し古いことは知っていますが、$_FILESスーパーグローバルを使用しているので、ファイルのアップロード後にサーバーにチェックさせるのではなく、ファイル配列のタイプキー(つまり)を使用できますか?$_FILES['soup']['type']

于 2015-01-08T16:18:12.657 に答える