从php中的文件名获取mime类型

时间:2016-02-09 18:26:29

标签: php mime-types

我有以下函数从文件名生成mime类型:

return rtrim(strtr(base64_encode($token), '+/', '-_'), '='); 

我在我的代码的这一部分调用了这个函数:

    function get_mime_type($file) {
      if (function_exists('finfo_open')) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mimetype = finfo_file($finfo, $file);
        finfo_close($finfo);
      }
      else {
        $mimetype = mime_content_type($file);
      }
      if (empty($mimetype)) $mimetype = 'application/octet-stream';
      return $mimetype;
    }

$out['uploads'][] = array( 'filename' => $fldrow['field_value'], 'mimetype' => get_mime_type($fldrow['field_value']), 'id' => $fldrow['ID'], ); 包含$fldrow['field_value']

我期待'card.pdf'

我正在'application/pdf'

我还使用Mode = 1尝试了这种更精细的方法: PHP Mime type checking alternative way of doing it?

模式= 1时结果相同,模式= 0时为空白。

我可能在这里做错了什么?

EDIT 我的解决方案基于Dymen1的回应,在查看了该方向的其他帖子之后如下:

'application/octet-stream'

2 个答案:

答案 0 :(得分:7)

如果您查看文档,则可以看到您没有做错任何事情。 但是,如果你做更多的研究:

https://stackoverflow.com/a/3664655/3784145

你可以看到你得到的mime类型是正确的,但扩展名不需要与mime类型匹配,如下所述:

http://nl3.php.net/manual/en/function.mime-content-type.php#85879

因此我会使用文件后缀来确定文件mime类型。 (如第一个例子所示)

答案 1 :(得分:0)

我试图使用mime_content_type()和get_mime_type()获取文件的mimeType,但是它不起作用。

这对我有用

$file = $request->file('FILE_NAME_IN_REQUEST');
$mimeType = $file->getClientmimeType();