![](/img/trans.png)
[英]Replacement for File::mime() in Laravel 4 (to get mime type from file extension)
[英]What is the relation between Mime Type and file extension
我的問題是:文件擴展名和它的mime類型之間有關系嗎? 我的意思是,如果我得到一個文件,例如.php並將其擴展名更改為.png也會更改它的mime類型?
簡短的回答:是的。
答案略長:Mime類型和文件擴展名提供了有關如何處理文件的提示。 文件擴展名通常用於您的OS來決定使用哪個程序打開文件,而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"
文件擴展名是關於文件包含的數據類型的提示。 MIME類型是文件中數據類型的標簽。 一個文件擴展名最多映射到一種MIME類型。 一種MIME類型映射到零個或多個文件擴展名。 一個很好的例子是image/jpeg
,它同時映射到.jpg
和.jpeg
。
除了理論之外,瀏覽器為您提供的MIME類型通常是可靠的,但是如果您需要確定性 ,則必須假定瀏覽器已受到破壞。
在這種情況下,在使用PHP的服務器上,您可以檢查給定的文件是否與給定的MIME類型匹配並具有FInfo擴展名:
$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
}
這是一個類似的答案 ,記錄了實現此目標的其他方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.