我的问题是: 文件扩展名和它的mime类型之间是否存在某种关系?我的意思是,如果我得到一个文件,例如.php并将它的扩展名改为.png也会改变它的mime类型吗?
答案 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类型之间的映射。