php - 使用 PHP 确定本地文件的 MIME 类型(内容类型)

标签 php file content-type mime-types

我正在尝试确定文件的 MIME 类型。我尝试了几种方法,但还没有想出任何可以提供一致输出的方法。我试过 $mime = mime_content_type($file)$mime = exec('file -bi ' . $file)。我提供图像、CSS 和 JavaScript。

示例 mime_content_type() 输出:

  • jquery.min.js - 文本/纯文本
  • editor.js - 文本/纯文本
  • admin.css - 文本/纯文本
  • controls.css - 应用程序/x-troff
  • logo.png - text/plain

示例 exec(...) 输出:

  • jquery.min.js - 文本/纯文本; charset=us-ascii
  • editor.js - 文本/x-c++; charset=us-ascii
  • admin.css - 文本/x-c; charset=us-ascii
  • controls.css - 文本/x-c; charset=us-ascii
  • logo.png - 图片/png

从这里可以看出,结果无处不在。

我的PHP版本是5.2.6


解决方案(感谢 Jacob)

$mimetypes = array(
    'gif' => 'image/gif',
    'png' => 'image/png',
    'jpg' => 'image/jpg',
    'css' => 'text/css',
    'js' => 'text/javascript',
);
$path_parts = pathinfo($file);
if (array_key_exists($path_parts['extension'], $mimetypes)) {
    $mime = $mimetypes[$path_parts['extension']];
} else {
    $mime = 'application/octet-stream';
}

最佳答案

Fileinfo如果你在 >= 5.30

上,扩展将完成这项工作
  • 你应该尽量避免执行命令
  • mime_content_type 在 PHP 5.30 中被弃用

如果不幸的是你使用的是 < 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 - 使用 PHP 确定本地文件的 MIME 类型(内容类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455476/

相关文章:

php - 获取 2 个元素之间的 HTML 内容

java - 使用 getFilesDir() 时应用程序上下文返回 null

Linux 文件描述符 - 获取当前重定向标准输出文件?

php - 使用 php 为所有文件格式查找 Mime 类型的文件或 url

php - 为什么 php 生成器比数组慢?

PHP:按最常见的方式回显表中的重复项数

php - MySQL 内连接两个表

c++ - 我想获取文件内容并将每一行放入数组项中

javascript - 相同的 URL 提供不同的内容 - 为什么?

html - 使用 HTTP POST 获取 HTML 表单提交上的 JSON 数据