确定本地文件';使用PHP创建Mime类型(内容类型)

确定本地文件';使用PHP创建Mime类型(内容类型),php,file,content-type,mime-types,Php,File,Content Type,Mime Types,我正在尝试确定文件的mime类型。我已经尝试了一些方法,但还没有找到任何能提供一致输出的方法。我尝试了$mime=mime\u content\u type($file)和$mime=exec('file-bi.$file)。我正在提供图像、CSS和JavaScript 示例mime\u content\u type()输出: jquery.min.js-文本/普通 editor.js-文本/纯文本 admin.css-文本/纯文本 controls.css-应用程序/x-troff logo

我正在尝试确定文件的mime类型。我已经尝试了一些方法,但还没有找到任何能提供一致输出的方法。我尝试了
$mime=mime\u content\u type($file)
$mime=exec('file-bi.$file)
。我正在提供图像、CSS和JavaScript

示例
mime\u content\u type()
输出:

  • jquery.min.js-文本/普通
  • editor.js-文本/纯文本
  • admin.css-文本/纯文本
  • controls.css-应用程序/x-troff
  • logo.png-文本/纯文本
示例
exec(…)
输出:

  • jquery.min.js-text/plain;字符集=美国ascii码
  • editor.js-text/x-c++;字符集=美国ascii码
  • admin.css-text/x-c;字符集=美国ascii码
  • controls.css-text/x-c;字符集=美国ascii码
  • logo.png-image/png
从这里可以看到,结果到处都是

我的PHP版本是5.2.6


解决方案(感谢Jacob)

如果您在>=5.30上,分机将完成此任务

  • 您应该尽量避免执行命令
  • PHP 5.30中不推荐使用
    mime\u content\u type

如果不幸的是,您使用的是<5.30,那么我可能会自己编写它,它比您从上面的函数/命令中获得的要可靠得多

下面是一个例子:

<?php
$filename = 'FILENAME HERE';
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css',
    'js' => 'application/x-javascript'
    // any other extensions that you may be serving      
);

$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename)));
if(array_key_exists($ext, $mimetypes)) {
    $mime = $mimetypes[$ext];
} else {
    echo 'mime type not found';
}

?>


文件信息为PHP>=5.3.0。我在5.2.6上。我刚刚更新了我的帖子来反映这一点。使用您的解决方案,但您应该将
in_array()
更改为
array\u key_exists()
,并反转参数。您说您使用的是5.2.6,那么您如何使用
fileinfo
pathinfo()
自PHP4.0.3以来就一直存在,也就是说,提供的解决方案本质上是不安全的,因为它只检查文件扩展名,不应在上载的文件上使用它来检查有效性。@buggedcom-我同意。在我的例子中,文件由我们管理,所以这个解决方案是可以接受的。我找不到有效的安全解决方案。我愿意为有效的安全解决方案提供一个公认的答案。
<?php
$filename = 'FILENAME HERE';
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css',
    'js' => 'application/x-javascript'
    // any other extensions that you may be serving      
);

$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename)));
if(array_key_exists($ext, $mimetypes)) {
    $mime = $mimetypes[$ext];
} else {
    echo 'mime type not found';
}

?>