当前位置:  开发笔记 > 编程语言 > 正文

如何用php找到文件的mime-type?

如何解决《如何用php找到文件的mime-type?》经验,为你挑选了5个好方法。

好的,所以我有一个index.php文件,它必须处理许多不同的文件类型.我怎么猜测基于的文件类型REQUEST_URI.

如果我请求http://site/image.jpg,并且所有请求都通过index.php重定向,这看起来像这样


我该如何正确地完成这项工作?

我应该根据所请求文件的扩展名进行测试,还是有办法获取文件类型?



1> leek..:

如果您确定自己只使用过图像,可以查看 和getimagesize() exif_imagetype() PHP函数,它试图返回图像的mime-type.

如果您不介意外部依赖项,您还可以查看优秀的getID3库,它可以确定许多不同文件类型的mime类型.

最后,您可以查看mime_content_type()函数 - 但不推荐使用Fileinfo PECL扩展.


而不是getimagesize(),而是调用exif_imagetype():http://us3.php.net/manual/en/function.exif-imagetype.php.它提供相同的信息而没有做其他事情的性能损失.

2> Eric_WVGG..:

不推荐使用mime_content_type(),因此将来无法依赖它.有一个"fileinfo"PECL扩展,但我没有听到有关它的好消息.

如果您在*nix服务器上运行,则可以执行以下操作,这对我来说很好:

$file = escapeshellarg( $filename );
$mime = shell_exec("file -bi " . $file);
$filename should probably include the absolute path.


*我还没听说过好消息。*-如果我们能阅读您所听到的内容,那就太好了;)

3> Ale..:
function get_mime($file) {
  if (function_exists("finfo_file")) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    $mime = finfo_file($finfo, $file);
    finfo_close($finfo);
    return $mime;
  } else if (function_exists("mime_content_type")) {
    return mime_content_type($file);
  } else if (!stristr(ini_get("disable_functions"), "shell_exec")) {
    // http://stackoverflow.com/a/134930/1593459
    $file = escapeshellarg($file);
    $mime = shell_exec("file -bi " . $file);
    return $mime;
  } else {
    return false;
  }
}

对我来说,这没有任何作用 - mime_content_type已弃用,finfo未安装,shell_exec不允许.



4> Shane..:

我实际上厌倦了PHP中缺乏标准的 MIME嗅探方法.安装fileinfo ...使用已弃用的功能......哦,这些工作,但仅适用于图像!我厌倦了它,所以我做了一些研究,发现了WHATWG Mimesniffing规范 - 我相信这仍然是草案规范.

无论如何,使用这个规范,我能够在PHP中实现mimesniffer.性能不是问题.事实上,在我不起眼的机器上,我能够在PHP超时之前打开并嗅探数千个文件.

这是MimeReader类.

require_once("MimeReader.php");

$mime = new MimeReader();
$mime_type_string = $mime->getType();     // "image/jpeg" etc.


嗨trejder.感谢您的更新,并对迟到的回复表示歉意.你可以找到我迷你网站上托管的所有项目(我知道的并不多).如果它变得流行,我可能会把它放在github上.一切都在项目之下.它已发布到公共领域,因此请随意清理代码(它需要它!)或以其他方式修改您认为合适的代码.http://shane.social-library.org/

5> Andrew..:

如果您只使用图像并且您需要mime类型(例如标题),那么这是最快且最直接的答案:

$file = 'path/to/image.jpg';
$image_mime = image_type_to_mime_type(exif_imagetype($file));

即使重命名图像文件,它也会输出真实的图像mime类型

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有