Mime Type和文件扩展名之间的关系是什么?

时间:2015-07-03 18:11:41

标签: php file mime-types

我的问题是: 文件扩展名和它的mime类型之间是否存在某种关系?我的意思是,如果我得到一个文件,例如.php并将它的扩展名改为.png也会改变它的mime类型吗?

2 个答案:

答案 0 :(得分:2)

简短回答:是的。

稍微长一点的回答:Mime类型和文件扩展名提供了如何处理文件的提示。虽然文件扩展名通常用于您的操作系统以决定打开文件的程序,但浏览器使用Mime类型来决定如何呈现某些数据(或服务器如何解释接收的数据)。两者都是可选的,但签订协议是一个好习惯。更改mime类型文件的服务取决于您的Web服务器。我相信Apache有一些设置可以从扩展到mime类型。如果您有自己的后端服务内容,则可以使用任意mime类型提供内容,例如,在PHP中:

<?php
// We'll be outputting a PDF
header('Content-Type: application/pdf');
...

<?php
header('Content-Type: application/javascript');
echo "//script code here"

答案 1 :(得分:1)

文件扩展名是关于文件包含的数据类型的提示。 MIME类型是文件中数据类型的标签。一个文件扩展名最多映射一种MIME类型。一种MIME类型映射到零个或多个文件扩展名。一个很好的例子是image/jpeg,它映射到.jpg.jpeg

除了理论之外,浏览器为您提供的MIME类型通常是可靠的,但如果您需要确定性,则必须假设浏览器已被泄露。

在这种情况下,在使用PHP的服务器上,您可以检查给定文件是否与具有FInfo扩展名的给定MIME类型匹配:

$path = '/path/to/your/file.pdf';
$info = finfo_open(FILEINFO_MIME_TYPE);
switch (finfo_file($info, $fpath)) {
case 'application/pdf':
    // hooray, this is what you want
    // do whatever
    break;

default:
    throw new RuntimeException('I said give me a PDF!');
}

或者如果你想要一个简单的功能:

function is_mime_type($path, $mime) {
    return (finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path) === $mime);
}

if (is_mime_type('/path/to/file.pdf', 'application/pdf')) {
    // hooray
}

以下是similar answer,其中记录了实现此目标的其他方法。

这里是an answer询问文件扩展名和MIME类型之间的映射。