Art*_*tro 7 php file mime-types
我的问题是:文件扩展名和它的 mime 类型之间是否存在某种关系?我的意思是,如果我得到一个文件,例如 .php 并将其扩展名更改为 .png 也会更改它的 mime 类型吗?
文件扩展名是有关文件包含的数据类型的提示。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!');
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想要一个简单的功能:
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
}
Run Code Online (Sandbox Code Playgroud)
这是一个类似的答案,记录了实现此目标的其他方法。
这里有一个关于文件扩展名和 MIME 类型之间映射的答案。
Short answer: Yes.
答案稍长:Mime 类型和文件扩展名提供了如何处理文件的提示。文件扩展名通常用于操作系统来决定使用什么程序打开文件,而浏览器则使用 Mime 类型来决定如何呈现某些数据(或服务器如何解释接收到的数据)。两者都是可选的,但达成协议是一个很好的做法。更改文件的 MIME 类型取决于您的网络服务器。我相信 Apache 有一些设置可以从扩展映射到 mime 类型。如果您有自己的后端服务内容,则可以使用任意 MIME 类型提供内容,例如,在 PHP 中:
<?php
// We'll be outputting a PDF
header('Content-Type: application/pdf');
...
Run Code Online (Sandbox Code Playgroud)
或者
<?php
header('Content-Type: application/javascript');
echo "//script code here"
Run Code Online (Sandbox Code Playgroud)