为什么 PHP 没有为 json 文件返回正确的 mime?

Ste*_*kun 4 php mime json mime-types

我知道 json 文件的正确 MIME 类型applicattion/json可以通过这篇文章确认什么是正确的 JSON 内容类型?.

但是,我想知道为什么我的 PHP 安装返回text/plain. 在解析 json 文件之前,我需要测试正确的 mime。

我有以下代码

$fileinfo = new finfo();
$fileType = $fileinfo->file( $_FILES['tmp_name'], FILEINFO_MIME_TYPE );
Run Code Online (Sandbox Code Playgroud)

其中$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,
})
Run Code Online (Sandbox Code Playgroud)

Cap*_*l C 5

finfo 通过内容识别文件类型,而不是文件扩展名。

只有带签名的文件才能被正确识别。否则,将根据其内容被标识为text/plain(ASCII) 或application/octet-stream(Binary)。

不幸的是,JSON 编码的内容没有签名,因此被标识为text/plainor application/octet-stream

如需进一步阅读,请访问:-

文件签名列表

希望这可以帮助。

[编辑 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);
Run Code Online (Sandbox Code Playgroud)