2016-08-23 109 views
2

我知道,正確的MIME類型fo json文件是applicattion/json可能會由此職位What is the correct JSON content type?確認。爲什麼PHP不爲json文件返回正確的mime?

但是,我想知道爲什麼我的PHP安裝返回text/plain。我需要在解析json文件之前測試正確的mime。

我有以下代碼

$fileinfo = new finfo(); 
$fileType = $fileinfo->file($_FILES['tmp_name'], FILEINFO_MIME_TYPE); 

其中$fileType回報text/plain代替applicattion/json

同樣,$_FILES['type']返回application/octet-stream而不是applicattion/json

我缺少什麼?

編輯

我通過jQuery的AJAX發送文件:

var formData = new FormData($(form)[0]); 
var jsonFile = $('input:file[name=contents]', form).get(0).files[0]; 

formData.append('jsonFile', jsonFile); 

$.ajax({ 

    type: 'POST', 
    url: 'url', 
    data: formData, 
    dataType:'json', 
    enctype : 'multipart/form-data', 
    processData: false, 
    contentType : false, 
    encode:true, 
}) 
+0

該文件的內容是什麼? –

+0

該文件的擴展名是什麼? –

+0

另外你如何發送文件? – Pogrindis

回答

3

finfo通過它識別文件類型的內容,而不是文件擴展名。

只有文件簽名可以正確識別。否則,根據其內容將被標識爲text/plain(ASCII)或application/octet-stream(二進制)。

不幸的是,JSON編碼的內容沒有簽名,因此被標識爲text/plainapplication/octet-stream

如要進一步瞭解,請訪問: -

List of file signatures

希望這有助於。

[編輯1]以下是我對上述的測試腳本。乾杯。

$filename = "test.json"; 

$finfo = finfo_open(FILEINFO_MIME_TYPE); 

file_put_contents($filename, "<?php \n"); 
printf("%s\n", finfo_file($finfo, $filename)); 

file_put_contents($filename, "@echo off\n"); 
printf("%s\n", finfo_file($finfo, $filename)); 

file_put_contents($filename, json_encode(array("a" => "1"))); 
printf("%s\n", finfo_file($finfo, $filename)); 

file_put_contents($filename, "\xff"); 
printf("%s\n", finfo_file($finfo, $filename)); 

finfo_close($finfo); 
+0

對於SO上的回答者來說,在OP上跳轉和無需耐心地註銷以真正理解OP想要的內容是非常普遍的。這是一個例外。 –

3

我不完全相信你的實際問題是什麼。它指的是獲得某種MIME類型的兩種方式。

Fileinfo使用libmagic。正如名字所示,這裏有神奇的事情發生。本質上它看着文件並試圖猜測文件可能是什麼類型。如果它開始於GIF89a它將報告圖像/ gif。猜測常常是錯誤的,但可能就足夠了。

$_FILES包含客戶端(網絡瀏覽器)發送的信息。那裏的類​​型就是瀏覽器的東西。這通常是完全沒用的。

如果你需要一個精確的類型,你必須自己確保這一點。如何做到這一點取決於文件來自哪裏以及你打算做什麼。即如果這來自可信賴的管理員,您可以查看文件擴展名。對於從不太可信的用戶上傳的圖片(我希望你不打算接受從不完全信任的用戶上傳的JavaScript文件來執行),一個好方法是實際嘗試打開圖像,甚至重新編碼它(即擺脫exif數據)

+0

我不知道你是否清楚我的問題,我的問題是正確的mime類型是'application/json'我需要爲了測試這個,爲什麼PHP不會返回這個,儘管用'.json'保存文件,該文件包含格式良好的json內容,並且使用不同的方法來返回'text/plain'。 –

0

如果您在* nix系統上,您可以隨時嘗試使用file命令。

+0

這究竟是什麼與「* nix」做? – Pogrindis

+0

我不認爲(知道)* dows系統上是否有任何'file'命令... – muchar

+0

這是'php' ..操作系統不可知論者.. – Pogrindis

相關問題